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

baubqpgj  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(43)

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

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

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

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与以前一样。
所以,我的问题是:会话属性会发生什么变化,有没有一种方法可以在LogoutLogin中访问它们?

bbuxkriu

bbuxkriu1#

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

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

相关问题