【问题标题】:Spring security stateless configurationSpring 安全无状态配置
【发布时间】:2013-07-07 14:38:58
【问题描述】:

我正在尝试通过遵循文档http://static.springsource.org/spring-security/site/docs/3.1.x/reference/security-filter-chain.html#filter-chains-with-ns来实现Spring的无状态身份验证

所以在我的 spring-security.xml 中,我有

<!-- Stateless RESTful service using Basic authentication -->  
<http pattern="/restful/**" create-session="stateless">  
  <intercept-url pattern='/**' access='ROLE_REMOTE' />  
  <http-basic />  
</http>

当我使用浏览器测试它时,第一个请求需要经过身份验证。但后面不是。据我了解,我应该看到用户登录提示。我有什么遗漏吗?

【问题讨论】:

    标签: java spring spring-security


    【解决方案1】:

    没有。在基本身份验证的情况下,浏览器会记住您输入的凭据并自动将它们与后续请求一起发送。

    为了确保您的配置确实是无状态的,您可以尝试使用命令行工具(wgetcurl)发出一些请求(有和没有身份验证)。

    【讨论】:

    • 我尝试使用 curl 测试身份验证功能,curl --user myname:mypswd http://localhost:8080/Spring-Http-Basic-Auth/restful/welcome 即使我没有 create-session="stateless",我也必须为每个请求提供用户名和密码。跨度>
    • 我想我现在知道它是如何工作的了。当不使用 create-session="stateless" 时,我将能够使用 curl 选项 --cookie-jar cookie.txt 将会话保存在 cookie 中,然后使用 curl 选项 --cookie cookies.txt 使用保存在 cookie 中的会话通过身份验证。但是当使用 create-session="stateless" 时,会话将不起作用,我必须为每个请求提供用户名和密码。
    • @DinoTw,不使用 create-session="stateless" 是创建无状态配置的方法,该配置实际上将身份验证“会话”信息存储在浏览器 cookie 中,但在服务器端是无状态的,对吗?跨度>
    • @curious1,是的,无状态的是在服务器端。您将不得不使用 curl 来验证行为。当服务器设置为无状态时,您必须为每个请求发送用户名和密码。但是服务器仍然会生成会话,但对于后续请求将无效。
    • @DinoTw,只是想在我问题的第一部分与您再次核对。不使用 create-session="stateless" 会创建一个 Spring 安全配置,用户信息存储在浏览器 cookie 中,随后在每次从浏览器访问网站时使用(用于身份验证)。对吗?
    猜你喜欢
    • 2013-10-22
    • 2013-12-06
    • 2012-06-26
    • 2020-09-05
    • 2019-04-03
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多