【发布时间】:2019-09-16 04:39:22
【问题描述】:
我正在尝试使 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/**),详见我的安全配置文件。
这个有状态的部分使用了一些 session-scoped 的 bean;我需要以 request-scope 方式使用这些相同的 bean,因此我需要确保永远不会创建 JSESSIONID cookie。
例如尝试在 Tomcat(或浏览器)中禁用 cookie altogheter 来实现这一点,所以我正在尝试一种直接使用 Spring 的方法。
【问题讨论】:
标签: java spring cookies spring-security