Spring security 如何使用SpringLDAP和SpringSecurity更改密码

Spring security 如何使用SpringLDAP和SpringSecurity更改密码,spring-security,spring-ldap,spring-security-ldap,Spring Security,Spring Ldap,Spring Security Ldap,我正在使用SpringLDAP和SpringSecurity的最新版本。另外,我使用的是基于注释的配置,没有XML配置文件 我试图实现的是非常基本的,我希望能够允许用户从我的web应用程序更改他们的密码 我发现我可以通过DirContext.modifyAttributes执行该请求。这个方法需要两个属性,第一个是当前的userDn,我不知道如何轻松地通过Spring获得它。我很确定有一个功能可以实现它 然后使用密码属性作为第二个参数的修改项。现在,我如何知道需要应用于用户提供的密码的密码编码

我正在使用SpringLDAP和SpringSecurity的最新版本。另外,我使用的是基于注释的配置,没有XML配置文件

我试图实现的是非常基本的,我希望能够允许用户从我的web应用程序更改他们的密码

我发现我可以通过DirContext.modifyAttributes执行该请求。这个方法需要两个属性,第一个是当前的userDn,我不知道如何轻松地通过Spring获得它。我很确定有一个功能可以实现它

然后使用密码属性作为第二个参数的修改项。现在,我如何知道需要应用于用户提供的密码的密码编码

我从来没有使用过SpringLDAP/Security,一个简单的小例子会很棒。现在,我正在测试内存中的ldap,但我必须在本周末切换到真正的ldap


谢谢

您需要使用
org.springframework.security.ldap.userdetails.LdapUserDetailsManager
的实例,它实现
UserDetailsManager
,并具有更改用户密码的方法。要在非XML配置中实例化它,请执行以下操作:

@Bean
public UserDetailsService getUserDetailsService() {
    return new LdapUserDetailsManager(); // TODO give it whatever constructor params it needs
}

如何获取需要提供的上下文?@ChristianGoudreau-请澄清您所说的覆盖
@Override protected userdetails服务userdetails服务()
。就构造函数所需的
ContextSource
而言,它是
SpringSecurityContextSource
的一个实例,您应该能够将它作为参数自动连接到
getUserDetailsService()
。嗯,到目前为止,我得到了一个ContextSource的NosuchBeAndDefinitionException,通过SecurityContextHolder获取ContextSource不起作用,因为它无法转换为正确的类型。在保持设置简单的同时:@Inject public void registerGlobalAuthentication(AuthenticationManagerBuilder auth)引发异常{auth.ldapaAuthentication().userDnPatterns(“uid={0},ou=people”).groupSearchBase(“ou=groups”);}这将使用一个嵌入式广告。我会挂到真正的一个之后,但我想为本地开发的目的,因为广告是外部的环境,我们正在使用和背后的防火墙嵌入式设置