如何使用basic-auth阻止tomcat中的会话进入servlet?

时间:2017-08-22 14:29:28

标签: java spring tomcat tomcat8

我正在使用spring-boot-starter-web创建部署在独立war上的tomcat8应用。

@EnableWebSecurity强制basic-authentication每个servlet请求,并保护gui。

但主要目的是提供一个主要以编程方式访问的Web服务XML。因此,客户端始终使用 basic-auth 发送GET个请求。

问题:tomcat将为每个请求创建一个新会话!当客户端以编程方式连接到xml servlet时,会话永远不会注销。并且也不会重复使用,因为下一个客户端请求将再次传输basic-auth。

所以这些会话驻留在tomcat中直到超时(例如默认30分钟)。并且同时消耗内存。

问题:如何告诉tomcat或spring-servlets提供basic-auth http header 的连接不需要创建会话?只是验证用户身份,发送响应并忘记会话信息?

2 个答案:

答案 0 :(得分:0)

您可以将会话创建策略设置为SessionCreationPolicy.STATELESS

  

Spring Security永远不会创建HttpSession,它永远不会用它来获取SecurityContext

将其设置在WebSecurityConfiguration中,例如:

http.antMatcher("/api/**")
              .sessionManagement()
              .sessionCreationPolicy(SessionCreationPolicy.STATELESS);

答案 1 :(得分:0)

SessionCreationPolicy.NEVER是正确答案。因为默认情况下它不会创建会话。但是如果请求会话(例如,由于我/ gui路径中的表单登录),将使用它。

这样,所有程序化请求都不会创建会话。但是,如果在webbrowser中进行测试(并因此通过表单登录进行安全以提供basic-auth),则会创建会话。这是所需的行为,因为每次从浏览器发送请求时都没有人想要输入基本身份验证凭据。

http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);