【问题标题】:Grails spring-security-ldap plugin change user password for ADGrails spring-security-ldap插件更改AD的用户密码
【发布时间】:2015-10-06 04:31:45
【问题描述】:

我有一个使用 Spring 安全性的 grails 应用程序 (2.5.0),并使用 spring-security-ldap 插件 (2.0-RC2) 针对 Windows AD 域进行身份验证。

这对身份验证非常有效,但现在我要求允许用户更改密码(实际上是要求!)。

尽管搜索了文档,阅读了代码并使用谷歌搜索,我只能找到对 LdapUserDetailsManager.changePassword 的引用,但我找不到如何使用它的单个示例。

我在插件里找到

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

但这没有changePassword,如果有的话我不明白如何调用它。

我已经查看了所有 StackOverflow 问题,例如

how to change password using spring ldap and spring security

但答案似乎是用其他语言写的,并且谈论我没有的东西,比如 xml 文件。

谁能告诉我,最好是一个可以理解的例子,我可以如何结合 grails spring-security-ldap 插件在 Grails 中针对 ldap AD 源实现更改密码功能?无法管理更改密码的身份验证是错误的!

【问题讨论】:

    标签: grails active-directory 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
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 2014-04-01
      • 2016-01-01
      • 2012-04-10
      • 2014-09-13
      • 2016-06-29
      • 2016-04-13
      • 2018-12-14
      • 2013-04-25
      相关资源
      最近更新 更多