我已经使用 ldap 和纯文本成功实现了 spring 安全登录。现在我切换到 sha-256 来获取 ldap 中的密码哈希。我在 applicationContext-security.xml 中添加了密码编码器。但是,我无法使用 Spring Security 成功进行身份验证。我收到“您输入了无效的用户名或密码!”
这是我的代码:
applicationContext-security.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<security:http auto-config="true" use-expressions="true" access-denied-page="/user/denied" >
<security:form-login
login-page="/login"
authentication-failure-url="/login?error=true"
default-target-url="/admin/user"/>
<security:logout invalidate-session="true"
logout-success-url="/login"
logout-url="/j_spring_security_logout"/>
</security:http>
<security:authentication-manager>
<security:ldap-authentication-provider user-search-filter="uid={0}" user-search-base="ou=Users">
<security:password-compare>
<security:password-encoder hash="sha-256" />
</security:password-compare>
</security:ldap-authentication-provider>
</security:authentication-manager>
<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<constructor-arg value="ldap://192.168.1.100:389/dc=openLDAP" />
<property name="userDn" value="cn=admin,dc=openLDAP" />
<property name="password" value="password" />
</bean>
</beans>
登录控制器:
@RequestMapping(value="/login", method=RequestMethod.GET)
public String login(@RequestParam(value="error", required=false) boolean error, ModelMap model, HttpServletRequest request) {
HttpSession session = request.getSession();
if(session.getAttribute("SPRING_SECURITY_CONTEXT" != null) {
return "redirect:/home";
}
if(error) {
model.put("error", "you have entered an invalid username or password!");
}
else {
model.put("error", "");
}
return "login";
}
登录视图:
<form action="j_spring_security_check" method="post" >
username: <input id="j_username" name="j_username" type="text" />
password: <input id="j_password" name="j_password" type="password" />
</form>