2015-07-16 4 views
1

У меня есть приложение grails (2.5.0) с использованием Spring безопасности и аутентификация с помощью плагина spring-security-ldap (2.0-RC2) в домене Windows AD.Grails spring-security-ldap plugin изменить пароль пользователя для AD

Это очень хорошо работает для аутентификации, но теперь у меня есть требование разрешить пользователю изменять свой пароль (на самом деле, чтобы его требовать!).

Несмотря на поиск в документации, чтение кода и поиск с помощью google Все, что я могу найти, это ссылки на LdapUserDetailsManager.changePassword, но я не могу найти ни одного примера того, как это использовать.

Я нахожу в плагине

public class GrailsLdapUserDetailsManager extends LdapUserDetailsManager 
    implements GrailsUserDetailsService {.... 

, но это не имеет Changepassword, и я не понимаю, как это назвать, если он сделал.

Я просмотрел все StackOverflow вопросы, такие как

how to change password using spring ldap and spring security

но ответы появляются быть написаны на другом языке и говорить о вещах, у меня нет, как XML-файлов.

Может ли кто-нибудь сказать мне, желательно с понятным примером, как я могу реализовать функцию паролей изменений в Grails против источника ldap AD в сочетании с плагином grails spring-security-ldap? Аутентификация без возможности управлять изменением паролей - это просто неправильно!

ответ

1

Вы можете использовать ldapUserDetailsManager, введя его в свой контроллер, например.

GSP:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta name="layout" content="main"> 
     <title><g:message code="menu.item.change.password" /></title> 
    </head> 
    <body> 
     <div class="maincontentdiv" role="main"> 

     <div class="alert alert-info alert-dismissible" role="alert"> 
      <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
      flash.changePasswordMessage 
     </div> 

      <h3><g:message code="menu.item.change.password" /></h3> 

      <g:form class="form-horizontal"> 

       <div class="form-group"> 
        <label class="col-md-4 control-label" for="currentPassword">Current password</label> 
        <div class="col-md-4"> 
         <g:field type="password" name="currentPassword" class="form-control" required="true" /> 
        </div> 
       </div> 

       <div class="form-group"> 
        <label class="col-md-4 control-label" for="newPassword">New password</label> 
        <div class="col-md-4"> 
         <g:field type="password" name="newPassword" class="form-control" pattern=".{6,15}" required title="Password must be a minimum of 6 and a maximum of to 10 characters" /> 
        </div> 
       </div> 

       <div class="form-group"> 
        <label class="col-md-4 control-label" for="confirmNewPassword">Confirm new password</label> 
        <div class="col-md-4"> 
         <g:field type="password" name="confirmNewPassword" class="form-control" pattern=".{6,15}" required title="Password must be a minimum of 6 and a maximum of to 10 characters" /> 
        </div> 
       </div> 

       <g:render template="/templates/generic_submit_button" model="[btnname: 'changePassword', btntxt: 'Change password']" /> 

      </g:form> 

     </div> 
    </body> 
</html> 

Контроллер:

class ChangePasswordController { 

    def ldapUserDetailsManager 

    def index() { 
     if (params.changePassword) { 
      try { 
       if (params.newPassword.equals(params.confirmNewPassword)) { 
        ldapUserDetailsManager.changePassword(params.currentPassword, params.newPassword) 
       } 
       else { 
        throw new InvalidParameterException('Please ensure the new password and confirm new password fields match') 
       } 
      } 
      catch(all) { 
       flash.changePasswordMessage= all.message 
      } 
     } 
    } 
} 
Смежные вопросы