我正在尝试使java Web应用程序真正无状态(尽管仍然使用基本身份验证)但是现在JSESSIONID cookie总是由我们的servlet容器(Tomcat)生成。
我的堆栈:
Java: 1.8
Spring: 4.1.6.RELEASE
Spring Security: 4.0.2.RELEASE
Tomcat: 7.0.93
我们使用XML配置,所以这是我的安全配置文件,我使用STATELESS选项创建会话:
<beans:bean id="requestCache" class="org.springframework.security.web.savedrequest.NullRequestCache" />
<http use-expressions="true" create-session="stateless" pattern="/api/**">
<request-cache ref="requestCache"/>
<csrf disabled="true"/>
<!-- REST ENDPOINTS PATH BASED -->
<intercept-url pattern="...."/>
<intercept-url pattern="...."/>
</http>
正如本response中所记录的,这应该足以确保Spring Security不会创建会话,但我的应用程序的其他部分仍然可以创建一个。
问题是:如何跟踪谁在请求创建会话?
基本上我正在尝试做的是调整有状态java应用程序使用的后端,由其他客户端应用程序以无状态方式使用,这些应用程序只会调用特定路径(/api/**
),如我的安全配置文件中所详述。
这个有状态的部分使用一些会话作用域的bean;我需要以请求范围的方式使用那些相同的bean,因此我需要确保永远不会创建JSESSIONID cookie。
试图在Tomcat(或浏览器)中禁用cookie altogheter实现这一点,所以我正在尝试一种方法直接使用Spring。
如果你想确保没有创建会话,请创建一个过滤器,然后用一个类来包装HttpServletRequest
块/失败/忽略getSession(...)
调用。