4

私は多くのチュートリアルを読んでいましたが、どれも私のために機能していません...私はSpringSecurityでSpring3.1.xを使用しています。私はたくさんの保護されたURLと多くの保護されていないURLを持っています。ここで、ユーザーがログインしてログアウトしようとしたときに、以前と同じページにとどまるようにしたいので、これを使用します。

<beans:bean id="logoutSuccessHandler" class="org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler">
    <beans:property name="useReferer" value="true"/>
</beans:bean>

これは正常に機能しますが、ユーザーが保護されたページからログアウトすると、ユーザーはログインページにリダイレクトされ、ホームページにリダイレクトしたいと思います。これを実現するにはどうすればよいですか。前もって感謝します!

4

3 に答える 3

7

リダイレクト用のカスタムロジックがあるため、カスタムが必要ですLogoutSuccessHandler。このハンドラーでは、次のロジックを追加する必要があります。

String refererUrl = request.getHeader("Referer");
String normalizedRefererUrl = ...; // "Normalize" (if needed) the URL so it is in the form that you need.

if (requiresAuthentication(normalizedRefererUrl, authentication)) {
    response.sendRedirect(request.getContextPath()); // home page
} else {
    response.sendRedirect(refererUrl); // or normalizedUrl
}

あなたのrequiresAuthentication()方法では、URLが認証を必要とするかどうかを決定するSpringSecurityの一部を使用する必要があります。 そこで参照
を使用できます。WebInvocationPrivilegeEvaluatorクラスごとの自動配線により、Springを通じてそれを取得します(Beanを実装するためWebInvocationPrivilegeEvaluator)。
評価者には、使用できるメソッドがありますisAllowed(uri, authentication)

于 2012-07-12T16:02:06.683 に答える
4
<security:http auto-config="true">
    <security:form-login login-page="/spring/login" 
                         login-processing-url="/spring/loginProcess"
                         default-target-url="/spring/main" 
                         authentication-failure-url="/spring/login?login_error=1" />  
    <security:logout logout-url="/spring/logout" logout-success-url="/spring/logout-success" />
</security:http>

ドキュメントからのlogout-success-urlまたはカスタムsucceshandlerの場合

于 2012-07-12T15:20:40.433 に答える
0

スプリングセキュリティのドキュメントに従って、logout-success-urlを指定しない場合は、/をリダイレクトする必要があります。この構成を確認してください。SimpleRedirectInvalidSessionStrategyを使用できる可能性があります

于 2012-07-12T15:27:29.210 に答える