spring 如何访问LogoutSuccessHandler中的会话属性?

baubqpgj  于 2024-01-05  发布在  Spring
关注(0)|答案(1)|浏览(123)

在一个Spring MVC应用程序中,我试图实现一个自定义的注销成功处理程序。这个处理程序应该访问一个session属性,并根据它的值进行一些查询和日志记录。
实施的相关部分:
1.安全配置:
第一个月

  1. <beans:bean id="logoutSuccessHandler" class="some.package.LogoutSuccessHandler">
  2. <beans:constructor-arg value="/login" />
  3. </beans:bean>

字符串
1.处理程序本身:

  1. public class LogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
  2. @Autowired
  3. private SomeService someService;
  4. public LogoutSuccessHandler(String defaultTargetUrl) {
  5. this.setDefaultTargetUrl(defaultTargetUrl);
  6. }
  7. @Override
  8. public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
  9. throws IOException, ServletException {
  10. String sessionAttribute = request.getSession().getAttribute("someAttribute").toString();
  11. someService.doSomething(sessionAttribute);
  12. super.onLogoutSuccess(request, response, authentication);
  13. }
  14. }


当用户登录时,我正在向会话添加一些属性。它们在不同的控制器请求期间都是可见的。问题是,当我在注销期间尝试访问会话属性时,它们都消失了。这是否意味着到那时注销已经发生并且会话信息被清除了?我可以看到SessionId与以前一样。
所以,我的问题是:会话属性会发生什么变化,有没有一种方法可以在LogoutLogin中访问它们?

bbuxkriu

bbuxkriu1#

  1. <logout success-handler-ref="logoutSuccessHandler" invalidate-session="false"/>

字符串
invalidate-session的默认值为true,因此您将在处理程序中获得一个新的会话。
当您将此值设置为false时,您可以获取旧会话,并且在完成业务后不要忘记使会话无效。

相关问题