我希望更改为create-session="stateless"在我的Web应用程序中实现无状态Spring Security的目的是结束,但事实并非如此。
create-session="stateless"
进行了此更改后,由于(根据我的假设)Spring安全性在会话中不存储任何内容,并且无法对安全的Web请求进行身份验证,因此Spring安全性似乎无法正常工作。
我如何利用此无状态功能?
我似乎尚未找到任何有关如何为无状态Web应用程序实现无状态Spring安全的示例。
谢谢 !
我有一个基于Spring的webapp,它具有完全无状态的安全性,使其工作的唯一方法是完全禁用会话创建(使用create-session="never")。这会强制对每个请求进行重新身份验证,因此,你还需要将webapp配置为使用HTTP Basic Auth或Digest Auth(当然是通过HTTPS),因为这些不需要特别复杂的协商(相比之下,表单)的登录和OAuth都需要一个会话,因为它们用于建立身份验证上下文的过程要复杂得多。这意味着你将需要在元素<security:http-basic />内部放置一个类似的<security:http>元素。
create-session="never"
<security:http-basic />
<security:http>
(这样做的好处是,它启用了非常简单的客户端库,因为它们不必执行cookie /会话管理。代价是处理上的一些开销-建立用户要参与的角色集的建立可以根据每个请求重新计算-以及可以使用哪种身份验证机制的一些限制。)
Donal的答案基本上是正确的,对于浏览器,你可能不想使用无状态应用程序。
作为参考,create-session="stateless"如果确实有无状态应用程序(例如RESTful客户端),则是更好的选择。Spring Security 3.1中引入了此选项。这将避免增加Spring Security的基础设施的一部分,这使得利用会话(例如HttpSessionSecurityContextRepository,SessionManagementFilter,RequestCacheFilter),所以你得到一个精简的安装。
HttpSessionSecurityContextRepository,SessionManagementFilter,RequestCacheFilter
使用create-session="never",Spring Security将永远不会自己创建会话,但是如果你的应用程序确实会使用一个会话。实际上,许多用户甚至都不知道自己正在创建会话,因此,如果你真的不想会话,那么这stateless是最佳选择。
create-session="never",Spring Security
stateless