如何在Spring Security中从会话管理(超时/并发检查)中排除某些页
我在spring-security.xml中添加了此代码,以启用会话超时检查和并发检查.
但问题是, >我需要从会话检查(超时和并发)中排除一些页面,如login change_password. 我该如何实现呢? 非常感谢. 最佳答案
更新:我在我的一个Spring Security登录页面上测试了我原来的session =“false”答案,但它没有用.请参阅下面的更多解决方案.
原始答案: 添加<%@ page session =“false”%>在JSP文件的顶部应该阻止会话启动但这与Spring Security无关. 下面的URL中有一些非常小的Oracle文档说:
https://docs.oracle.com/cd/A87860_01/doc/java.817/a83726/basics3.htm#1007356 更新的答案:问题可能与启用CSRF的Spring Security有关.它在4.0版中默认启用,这是一件好事,而不是你想要禁用的东西.在早期版本中,可能需要手动操作. CRSF令牌需要一个会话,因此您需要一个解决方案来仅在登录过程中排除CSRF测试. Spring Security Reference中讨论了“Relaxing CSRF”.他们特别提到了SockJS,但原则是普遍的.他们建议类似下面的JavaConfig行:
接受的answer by P.Peter for the SO question “CSRF token expires during login”有一个类似的解决方案,需要更多的努力. 你需要添加一个实现Spring的RequestMatcher类的类并覆盖它的matches()方法:
如果您需要更复杂的匹配逻辑,可以在自定义RequestMatcher类中添加Pattern和RegexRequestMatcher字段,并在matches()方法中使用它们. 然后,您需要在Spring Security配置中添加对新类的引用.在XML中它将是这样的:
在JavaConfig中它将是这样的:
我不确定在登录页面上禁用CSRF测试可能会产生什么样的安全后果,所以你可能想要研究一下. 如果您认为禁用登录页面的CSRF是不可接受的,那么您可以使用AJAX keepalive解决方案来阻止您的登录页面过期,但这有点像我的口味. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |