27

ユーザーがSpringSecurityを使用して電子メール内のリンクをクリックしたときに、自動ログインを実行しようとしています。

次のようなプログラムによるログインを実行する例をたくさん見てきました。

UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
try {
    Authentication auth = authenticationManager.authenticate(token);
    SecurityContextHolder.getContext().setAuthentication(auth);
    repository.saveContext(SecurityContextHolder.getContext(), request, response);
    rememberMeServices.loginSuccess(request, response, auth);
 ....

私が見ている問題は、元のパスワードがないため、UsernamePasswordAuthenticationTokenを作成できないことです。プレーンテキストのパスワードを持っていない場合(エンコードされているパスワードを持っている場合)、ユーザーにログインする他の方法はありますか?

前もって感謝します。

4

1 に答える 1

58

電子メール内のリンクからのログインを許可するという点で、自分が何をしているのかを知っていることに注意してください。SMTPは安全なプロトコルではないため、通常、認証の形式として電子メールを持っている人に依存することはできません。

認証されていることがすでにわかっている場合は、AuthenticationManagerを使用する必要はありません。代わりに、以下に示すように認証を直接設定できます。

Authentication authentication = new UsernamePasswordAuthenticationToken(user, null,
    AuthorityUtils.createAuthorityList("ROLE_USER"));
SecurityContextHolder.getContext().setAuthentication(authentication);

完全な例が必要な場合は、Spring Security 3.1入門(プレゼンテーションのInfoQビデオ)の基礎となった安全なメールアプリケーションのSignupControllerを参照できます。

于 2012-07-03T15:35:52.603 に答える