Bos*_*one 14 spring-security basic-authentication logout
我使用基本的HTTP身份验证通过基本的LDAP授权改进了我的GWT/GXT应用程序.当我启动新浏览器时,它运行良好 - 我得到提示并获得对公司LDAP的授权.我的问题 - 除非我关闭/重新打开浏览器,否则我无法注销.我可以调试并查看如何SecurityContextLogoutHandler#logout调用以及执行以下代码
if (invalidateHttpSession) {
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
}
SecurityContextHolder.clearContext();
Run Code Online (Sandbox Code Playgroud)
然而,它似乎没有影响,因为网站被重新加载,我永远不会得到另一个HTTP身份验证提示,除非我重新启动浏览器(甚至清除缓存/ cookie将无济于事).这是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>
Run Code Online (Sandbox Code Playgroud)
我试图定义自定义LogoutSuccessHandler,做authentication.setAuthenticated(false);,但也没有任何影响
这里有什么东西我在这里不见了?非常感谢您的帮助
Bos*_*one 25
好.花了太多时间后,我觉得我有答案.这很简单 - 使用服务器端技术无法摆脱基本的HTTP身份验证.基本上,授权字符串在HTTP标头中进行base-64解码,当受保护的页面加载到浏览器时,安全令牌会重新填充,因此无论您在服务器上擦除它的频率如何,每次调用页面时它都会被复活.我想可以在浏览器端发挥一些聪明的技巧,但这将是脆弱和不可靠的
对于我的情况,我将切换到基于表单的身份验证,无论如何都可以更好地控制登录/注销过程.
我会坚持接受我自己的回答,支持有人提出可接受的解决方案
| 归档时间: |
|
| 查看次数: |
14965 次 |
| 最近记录: |