1

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>
4

1 に答える 1