我正在使用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 的连接不需要创建会话?只是验证用户身份,发送响应并忘记会话信息?
答案 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);