gpt4 book ai didi

spring-security - Spring security - 无法注销

转载 作者:行者123 更新时间:2023-12-03 21:15:08 25 4
gpt4 key购买 nike

我使用基本 HTTP 身份验证通过基本 LDAP 授权改造了我的 GWT/GXT 应用程序。当我启动新浏览器时它运行良好 - 我收到提示并获得针对公司 LDAP 的授权。我的问题 - 除非关闭/重新打开浏览器,否则我无法注销。我可以调试看看如何SecurityContextLogoutHandler#logout被调用并执行以下代码

    if (invalidateHttpSession) {
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
}

SecurityContextHolder.clearContext();

然而,它似乎没有影响,因为站点被重新加载,除非我重新启动浏览器(即使清除缓存/cookies 也无济于事),否则我永远不会收到另一个 HTTP 身份验证提示。这是 applicationContext.xml 的相关部分
<security:http auto-config='true'>
<security:intercept-url pattern="/reports/**" access="ROLE_USER" />
<security:http-basic />
<security:logout logout-url="/reports/logout"
logout-success-url="/reports/Application.html" />
</security:http>

我试图定义自定义 LogoutSuccessHandler并做 authentication.setAuthenticated(false);但这也没有效果

这里有什么我在这里想念的吗?您的帮助将不胜感激

最佳答案

好的。在花了太多时间之后,我想我有答案了。这很简单 - 使用服务器端技术无法摆脱基本的 HTTP 身份验证。基本上,授权字符串在 HTTP header 中以 base-64 解码,当 protected 页面加载到浏览器时,安全 token 会重新填充,因此无论您在服务器上多久删除它,每次调用页面时它都会重新生成。我想可以在浏览器方面玩一些聪明的技巧,但这会很脆弱而且不可靠

对于我的情况,我将切换到基于表单的身份验证,无论如何它可以更好地控制登录/注销过程。

我会坚持接受我自己的答案,赞成有人提出可接受的解决方案

关于spring-security - Spring security - 无法注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5023951/

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