在Spring MVC应用程序中,我正在尝试实现自定义注销成功处理程序。此处理程序应访问会话属性并根据其值进行一些查询和记录。
实施的相关部分:
<http ...>
<logout success-handler-ref="logoutSuccessHandler"/>
</http>
<beans:bean id="logoutSuccessHandler" class="some.package.LogoutSuccessHandler">
<beans:constructor-arg value="/login" />
</beans:bean>
public class LogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
@Autowired
private SomeService someService;
public LogoutSuccessHandler(String defaultTargetUrl) {
this.setDefaultTargetUrl(defaultTargetUrl);
}
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
String sessionAttribute = request.getSession().getAttribute("someAttribute").toString();
someService.doSomething(sessionAttribute);
super.onLogoutSuccess(request, response, authentication);
}
}
我在用户登录时向会话添加一些属性。它们在不同的控制器请求期间可见。问题是,当我尝试在注销期间访问会话属性时,它们都消失了。这是否意味着到那时已经发生了注销并且会话信息被清除了?我可以看到SessionId
和以前一样。
所以,我的问题是:会话属性会发生什么,有没有办法在LogoutSuccessHandler中访问它们?
答案 0 :(得分:2)
<logout success-handler-ref="logoutSuccessHandler" invalidate-session="false"/>
默认值invalidate-session
为true,因此您将在处理程序中获得新会话。
当您将此值设置为false
时,您可以获得旧会话,并且在完成业务后不要忘记使会话无效。