Spring security 如何使用SpringLDAP和SpringSecurity更改密码
我正在使用SpringLDAP和SpringSecurity的最新版本。另外,我使用的是基于注释的配置,没有XML配置文件 我试图实现的是非常基本的,我希望能够允许用户从我的web应用程序更改他们的密码 我发现我可以通过DirContext.modifyAttributes执行该请求。这个方法需要两个属性,第一个是当前的userDn,我不知道如何轻松地通过Spring获得它。我很确定有一个功能可以实现它 然后使用密码属性作为第二个参数的修改项。现在,我如何知道需要应用于用户提供的密码的密码编码 我从来没有使用过SpringLDAP/Security,一个简单的小例子会很棒。现在,我正在测试内存中的ldap,但我必须在本周末切换到真正的ldapSpring 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获得它。我很确定有一个功能可以实现它 然后使用密码属性作为第二个参数的修改项。现在,我如何知道需要应用于用户提供的密码的密码编码
谢谢 您需要使用
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”);}这将使用一个嵌入式广告。我会挂到真正的一个之后,但我想为本地开发的目的,因为广告是外部的环境,我们正在使用和背后的防火墙嵌入式设置