我有一个使用Spring安全性的网络应用。我想在用户退出之前将用户重定向回他们所在的同一页面。
有一种简单的方法吗?
答案 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