java - Spring中注销失败如何处理?

标签 java spring session spring-security

在我的 Spring Security 中,我不会立即使 session 无效,但我在 LogoutSuccessHandler 中执行此操作(需要保留一些信息以供注销后调查) 这让我明白了:如果注销出错,我应该如何使 session 无效?

Http安全:

        http.authorizeRequests()
                ...
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessHandler(myLogoutSuccessHandler())
                .invalidateHttpSession(false) // session invalidated by logoutSuccessHandler.

和 myLogutSuccessHandler() :

public class MyLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {

    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {

        ....

        // Invalidation of an old session
        HttpSession session = request.getSession(false);
        if (session != null) {
            logger.debug("Invalidating session: " + session.getId());
            session.invalidate();
        }

        ...

        super.onLogoutSuccess(request, response, authentication);
    }
}

这让我明白了:如果注销出错,我应该如何使 session 无效?

谢谢

最佳答案

来自 Javadoc:

LogoutHandler implementations expect to be invoked to perform necessary cleanup, so should not throw exceptions.

因此您的 LogoutSuccessHandler 将始终被调用。只要在实际使 session 无效(或只要捕获 session )之前 onLogoutSuccess(..) 方法中没有抛出异常,您的代码就会始终运行。

也许方法的名称 onLogoutSuccess() 不是很直观(可能更像 afterLogout())。没有 LogoutFailureHandler 因为注销将总是成功,因此 LogoutSuccessHandleronLogoutSuccess() 将始终是调用。

关于java - Spring中注销失败如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55729411/

相关文章:

java - 如何在 Java 中将 MultiPartfile 提供给 Reader?

java - 你如何处理业务层的 Hibernate Session?

web-applications - MVP - Presenter 应该使用 Session 吗?

java - EJB 3.2/CDI 是否具有与 Spring 4 元注释等效的功能?

java - 在 application.yml 中设置根日志级别

java - 自动保存期间的Jpa OneToMany关系处理关系

java - 如何在bean方法中注入(inject)字段?

php - 在 MySQL 和 PHP 中使用聚合字符串函数

.net - ASP.NET iFrame session 变量

java - 使用 String.valueOf(intVar) 动态设置 TextView 截断部分 intVar