我们有REST API的应用程序。它基于Spring,也使用了Spring安全性。 例如,我们配置了一些基于角色的限制:
<sec:http auto-config="true" access-decision-manager-ref="accessDecisionManager">
<sec:intercept-url pattern="/auth/authenticate" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<sec:intercept-url pattern="/auth/logout" access="IS_AUTHENTICATED_FULLY"/>
<sec:intercept-url pattern="/users/**" access="USER"/>
</sec:http>
它适用于cookie,但现在我们需要启用将jsessionid作为URL参数而不是cookie传递的可能性。我认为我们不需要在代码中更改任何内容,但出现问题。 我请求/登录方法并从响应中复制jsessionid。之后我尝试请求 / users; jsessionid = * 并获得401状态代码,这意味着应用程序无法识别我。为了使这种方法有效,我们应该改变什么?
答案 0 :(得分:2)
通常,基于cookie的身份验证系统不适用于基于XML的API(如SOAP和REST)。实践是在每个API调用上进行身份验证。
在同一论坛中查看this帖子。引用帖子:
REST服务通常在每个请求上进行身份验证, 通常不会通过会议。
现在的原因是
除了以非标准cookie方式处理此方法之外,还有更好的方法。不确定您使用的是哪个版本的spring-security,HERE是用于保护RESTful应用程序的spring-security 3.1的示例。
编辑:
结帐this link。这迫使tomcat(不确定你是否使用tomcat)不使用cookie处理会话。但是一旦完成,这将不会处理基于cookie的会话。我不是100%肯定它会起作用,你可以尝试。