无状态Spring应用程序-仍生成JSESSIONID

时间:2019-04-26 16:14:16

标签: java spring cookies spring-security

我正在尝试使Java Web应用程序真正实现无状态(尽管仍在使用基本身份验证),但是从现在起,我们的servlet容器( Tomcat )始终会生成JSESSIONID cookie。

这是我的堆栈:

Java: 1.8
Spring: 4.1.6.RELEASE
Spring Security: 4.0.2.RELEASE
Tomcat: 7.0.93

我们使用XML配置,所以这是我的安全配置文件,在其中我使用无状态选项进行会话创建:

<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,但是使用 request-scope 的方式,因此我需要确保永远不会创建JSESSIONID cookie。

例如,尝试在Tomcat(或在浏览器)中禁用cookie altogheter可以实现此目的,因此我正在尝试一种直接在Spring中进行操作的方法。

1 个答案:

答案 0 :(得分:1)

如果要确保未创建会话,请创建过滤器并使用阻止/失败/忽略HttpServletRequest调用的类包装getSession(...)