Подключаемый модуль Grails spring-security-ldap меняет пароль пользователя для AD

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

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

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

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

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

но у этого нет changePassword, и я не понимаю, как его вызвать, если он есть.

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

как изменить пароль с помощью spring ldap и spring security

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

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


person Cry    schedule 16.07.2015    source источник


Ответы (1)


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

гсп:

<!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
            }
        }
    }
}
person Mike W    schedule 26.05.2017