Spring安全性:注销后重定向到上一个url

时间:2011-05-25 06:09:59

标签: spring-security

我有一个使用Spring安全性的网络应用。我想在用户退出之前将用户重定向回他们所在的同一页面。

有一种简单的方法吗?

4 个答案:

答案 0 :(得分:7)

不确定此问题涉及哪个Spring版本 - 但自Spring 3.0以来标准useReferer上有org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler属性。

所以你需要做的就是这样配置,注销会重定向到用户来自的地方:

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

<security:http>
    <security:logout logout-url="/logout" success-handler-ref="logoutSuccessHandler" />
</security:http>

答案 1 :(得分:1)

您可以在spring security的过滤器链中添加新过滤器。该新文件管理器将应用于/logout网址。通过此过滤器时,您可以将当前页面保存在字段变量中。当通过过滤器返回时。您可以将请求重定向到已保存的URL。我认为这可以提供帮助。您可以通过使用获取当前页面URL。 Referer对象中的Request标头。

答案 2 :(得分:1)

您需要的是Simple LogoutSuccessHandler

@Component
  public class CustomLogoutSuccessHandler extends 
  SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {

@Override
 public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse 
     response, Authentication authentication)
        throws IOException, ServletException {
    if (authentication != null) {
        System.out.println(authentication.getName());
    }
    response.setStatus(HttpStatus.OK.value());
    response.sendRedirect(request.getHeader("referer"));
}

然后在你的配置方法中调用它,即

.logout().logoutSuccessHandler(customLogoutSuccessHandler)

这会将您重定向到引用网址。

答案 3 :(得分:0)

只是一个想法:

我们如何保留一堆访问过的网页。可能最多3个条目。并从注销重定向用户。

  • 配置过滤器或扩展spring安全过滤器以在会话中维护有关最后两个访问过的URL的堆栈

  • 注销时,将servlet配置为logout-success-url

  • 现在从会话堆栈中获取URL,现在使会话无效并将用户重定向到该页面

你也可以像Vijay提到的那样使用referrer header