LDAPとプレーンテキストを使用して、春のセキュリティログインを正常に実装しました。現在、ldap のパスワード ハッシュを sha-256 に切り替えています。applicationContext-security.xml に password-encoder を追加しました。ただし、春のセキュリティで正常に認証できませんでした。「無効なユーザー名またはパスワードを入力しました!」というメッセージが表示されます。
ここに私のコードがあります:
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>