加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Spring Security中从会话管理(超时/并发检查)中排除某些页

发布时间:2020-12-15 01:36:08 所属栏目:大数据 来源:网络整理
导读:我在spring-security.xml中添加了此代码,以启用会话超时检查和并发检查.

我在spring-security.xml中添加了此代码,以启用会话超时检查和并发检查.

但问题是,

>我需要从会话检查(超时和并发)中排除一些页面,如login change_password.
>如果我有一个可供登录用户或未登录用户访问的页面.但是我只需要在用户登录时进行会话超时和并发检查.

我该如何实现呢?

非常感谢.

最佳答案
更新:我在我的一个Spring Security登录页面上测试了我原来的session =“false”答案,但它没有用.请参阅下面的更多解决方案.

原始答案:

添加<%@ page session =“false”%>在JSP文件的顶部应该阻止会话启动但这与Spring Security无关.

下面的URL中有一些非常小的Oracle文档说:

JSP Default Session Requests

Generally speaking,servlets do not request an HTTP session by
default. However,JSP page implementation classes do request an HTTP
session by default. You can override this by setting the session
parameter to false in a JSP page directive,as follows:

<%@ page … session=”false” %

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行:

http.csrf().ignoringAntMatchers("/login")

接受的answer by P.Peter for the SO question “CSRF token expires during login”有一个类似的解决方案,需要更多的努力.

你需要添加一个实现Spring的RequestMatcher类的类并覆盖它的matches()方法:

class CsrfSecurityRequestMatcher implements RequestMatcher {
    @Override
    public boolean matches(HttpServletRequest request) {
        return !request.getServletPath().equals("/login");
    }
}

如果您需要更复杂的匹配逻辑,可以在自定义RequestMatcher类中添加Pattern和RegexRequestMatcher字段,并在matches()方法中使用它们.

然后,您需要在Spring Security配置中添加对新类的引用.在XML中它将是这样的:

在JavaConfig中它将是这样的:

http.csrf().requireCsrfProtectionMatcher(new CsrfSecurityRequestMatcher());

我不确定在登录页面上禁用CSRF测试可能会产生什么样的安全后果,所以你可能想要研究一下.

如果您认为禁用登录页面的CSRF是不可接受的,那么您可以使用AJAX keepalive解决方案来阻止您的登录页面过期,但这有点像我的口味.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读