2

認証にSpring Securityを使用するSpring MVCアプリケーションを作成します。ここにspring-security.xmlがあります

<http use-expressions="true">
    <form-login login-page="/homepage.jsp" default-target-url="/homepage.jsp" authentication-failure-url="/homepage.jsp?login-success=false" />
    <logout logout-success-url="/homepage.jsp" />
</http>
<authentication-manager alias="authenticationManager" > 
   <authentication-provider>
    <password-encoder hash="sha" />
    <jdbc-user-service data-source-ref="marketDataSource" 

       users-by-username-query="
          select email_address, password, '1' 
          from user where email_address=?" 

        authorities-by-username-query="
          select email_address, 'ROLE_USER' from user 
          where email_address=?" 
      />
   </authentication-provider>
</authentication-manager>

新しいユーザーが登録しようとすると、彼はから登録を入力して送信を押します。これにより、新しいユーザーが作成されます。登録が正常に完了した場合、この方法を使用して登録ユーザーを認証しようとします:

private void authenticateUserAndSetSession(User user, HttpServletRequest request) {

List<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
grantedAuthorities.add(new GrantedAuthorityImpl("ROLE_USER"));
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
    user.getEmailAddress(), user.getPasswordSha(), grantedAuthorities);

request.getSession();

token.setDetails(new WebAuthenticationDetails(request));
try {
  Authentication authenticatedUser = authenticationManager
      .authenticate(token);
  SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
} catch (Exception e) {
  e.printStackTrace();
}

}

前の方法を作成するために、この投稿「登録が成功した後の自動ログイン」を確認しましたが、それを使用しようとすると、Bad Credential Exception がスローされます。このソリューションの何が問題なのですか?

4

1 に答える 1

0

私は同様の問題に直面していました。従来のコードでは、パスワードは手作業でハッシュされていました。

より良い選択は、User クラスのオブジェクト (プレーン フォーム バインドである可能性があります) をプレーン パスワードと共に格納し、後でクリアすることです。クレデンシャルのクリアも spring-security の責任です (インターフェースorg.springframework.security.core.CredentialsContainer)。不可能な場合は、エンコーダーのタグを削除するか、プレーン テキスト エンコーダーを使用します<password-encoder hash="plaintext"/>

于 2014-01-29T06:31:10.177 に答える