ログインに成功してページにリダイレクトするという奇妙な問題があります。
以下は私の春のセキュリティ構成です。
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/login.hst**" access="anonymous or authenticated" />
<intercept-url pattern="/**/*.hst" access="authenticated" />
<form-login login-page="/login.hst"
authentication-failure-url="/login.hst?error=true"
authentication-success-handler-ref="loginSucessHandler" />
<logout invalidate-session="true" logout-success-url="/home.hst"
logout-url="/logout.hst" />
<remember-me key="jbcpHaverERP" authentication-success-handler-ref="loginSucessHandler"/>
<session-management>
<concurrency-control max-sessions="1" />
</session-management>
</http>
LoginSuessHandler クラス:
@Service
public class LoginSucessHandler extends
SavedRequestAwareAuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws ServletException, IOException {
...
super.setUseReferer(true);
super.onAuthenticationSuccess(request, response, authentication);
}
}
成功時に要求されたページにリダイレクトされる問題が発生しました。安全なURLを直接参照すると、Springがログインページにリダイレクトし、ログインに成功すると元の要求されたリンクにリダイレクトします。ただし、ユーザーが以前に「remember-me」を選択し、ブラウザを閉じて直接 URL を要求している場合、これは機能しません。ユーザーは適切に認証されていますが、要求されたページにリダイレクトする代わりに、Spring が / にリダイレクトします。ログといくつかのスプリング ソース コードを確認したところ、ターゲット URL を特定できないことがわかりました。
refer を設定しようとしましたが、referer の値が null です。しかし、奇妙なことに、春のセキュリティ構成で、remember-me 構成から authentication-success-handler を削除すると、機能することに気付きました。
<remember-me key="jbcpHaverERP" authentication-success-handler-ref="loginSucessHandler"/>
問題を把握できません。authentication-success-handler の実装はフォームログインとremember-meで異なる必要がありますか?