我正在尝试使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中进行操作的方法。
答案 0 :(得分:1)
如果要确保未创建会话,请创建过滤器并使用阻止/失败/忽略HttpServletRequest
调用的类包装getSession(...)
。