我正在尝试连接到公司的LDAP,并且遇到了很多麻烦。我解决了一个问题,突然间我得到了一个新的问题。 现在,我认为上下文定义良好并且具有连通性,但是它抱怨“空编码的密码”,我不知道该如何面对。 我正在尝试通过服务用户进行身份验证。
现在我正在使用以下代码:
auth.ldapAuthentication()
.userSearchBase("ou=xxxx,ou=yyyy")
.userSearchFilter("SamAccountName={0}")
.contextSource()
.url("ldap://servername:389/dc=aaaa,dc=bbbb,dc=cccc")
.managerDn("CN=serviceUserName,OU=uuuu,OU=yyyy,DC=aaaa,DC=bbbb,DC=cccc")
.managerPassword("serviceUserPass")
.and()
.passwordCompare()
.passwordEncoder(passwordEncoder())
.passwordAttribute("password");
并且:
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
我遇到此错误:
2019-05-13 10:41:37.808 WARN 22928 --- [nio-8080-exec-6] o.s.s.c.bcrypt.BCryptPasswordEncoder:空的编码密码 2019-05-13 10:41:37.926错误22928-[nio-8080-exec-6] w.a.UsernamePasswordAuthenticationFilter:尝试对用户进行身份验证时发生内部错误。
org.springframework.security.authentication.InternalAuthenticationServiceException:[LDAP:错误代码16-00000057:LdapErr:DSID-0C090D70,注释:属性转换操作中的错误,数据0,v1db1
我尝试将PasswordEncoder函数更改为:
@Bean
public PasswordEncoder passwordEncoder() {
return new PasswordEncoder() {
@Override
public String encode(CharSequence rawPassword) {
return BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(4));
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
}
};
}
然后检查“ encodedPassword”变量是否为空(“ rawPassword”是我在登录页面中输入的变量)。该错误是:
java.lang.IllegalArgumentException:salt不能为空
我不知道这是否意味着它无法访问LDAP,密码是否无法编码,找不到用户...
真的很感谢任何帮助。