我正在使用spring-boot-starter-web创建一个部署在独立tomcat8上的war应用程序。
我有@EnableWebSecurity在每个servlet请求上强制basic-authentication,还可以保护gui。
但其主要目的是提供一个主要以编程方式访问的webservice XML。因此,客户端总是使用basic-auth发送他们的GET请求。
问题: tomcat将为每个请求创建一个新的会话!而且,当客户端以编程方式连接到xml时,会话永远不会注销。并且也不被重用,因为下一个客户端请求将再次传输基本-auth。
因此,这些会话驻留在tomcat中直到超时(例如默认的30分钟)。同时消耗记忆。
问:我如何告诉tomcat或spring,提供基本-auth http头的连接不需要创建会话?只是认证用户,发送响应,而忘记会话信息?
发布于 2017-08-22 18:14:44
可以将会话创建策略设置为SessionCreationPolicy.STATELESS。
Security永远不会创建HttpSession,也不会使用它来获取SecurityContext
在您的WebSecurityConfiguration中设置它,例如:
http.antMatcher("/api/**")
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);发布于 2017-08-23 10:18:40
SessionCreationPolicy.NEVER是这里正确的答案。因为默认情况下它不会创建会话。但是如果请求一个会话(例如由于我的/gui路径中的表单登录),它将被使用。
这样,任何编程请求都不会创建会话。但是,如果在the浏览器中进行测试(从而通过表单登录来提供基本安全保护),则会创建会话。这是想要的行为,因为每次从浏览器中发送请求时,没有人希望输入基本凭证。
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
https://stackoverflow.com/questions/45820443
复制相似问题