注销后Spring Security 3.1重定向

时间:2012-07-12 15:01:44

标签: spring redirect spring-security

我正在阅读很多教程,但没有一个能为我工作...... 我在Spring Security中使用Spring 3.1.x.我有一堆安全网址,许多没有安全保护。现在,当用户登录并尝试注销时,我希望他保持与以前相同的页面,所以我使用它:

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

这很好用,但是当用户从安全页面注销时,它会将其重定向到登录页面,我想重定向到主页..我怎样才能实现这一点? 提前谢谢!

3 个答案:

答案 0 :(得分: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()方法中,您需要使用Spring Security的某些部分来确定URL是否需要身份验证。
您可以在那里使用WebInvocationPrivilegeEvaluator引用。你可以通过Spring通过类自动装配来获取它(因为将会有一个实现WebInvocationPrivilegeEvaluator的bean)。
评估者有一个您可以使用的方法isAllowed(uri, authentication)

答案 1 :(得分: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 from the docscustom succeshandler

答案 2 :(得分:0)

根据spring security的文档,如果你没有指定logout-success-url那么它应该重定向/。检查此配置,您可以使用SimpleRedirectInvalidSessionStrategy