gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:59:41 26 4
gpt4 key购买 nike

在我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com