Java 如何使用jsessionid URL参数使基于Spring的应用程序工作
我们有一个带有RESTAPI的应用程序。它基于Spring,也使用Spring安全性。 例如,我们配置了一些基于角色的限制:Java 如何使用jsessionid URL参数使基于Spring的应用程序工作,java,spring,session,spring-security,sessionid,Java,Spring,Session,Spring Security,Sessionid,我们有一个带有RESTAPI的应用程序。它基于Spring,也使用Spring安全性。 例如,我们配置了一些基于角色的限制: <sec:http auto-config="true" access-decision-manager-ref="accessDecisionManager"> <sec:intercept-url pattern="/auth/authenticate" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<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。在那之后,我试图请求
/用户;jsessionid=*并获得401状态代码,这意味着应用程序无法识别我。为了使这种方法有效,我们应该改变什么 通常,基于cookies的身份验证系统不适合基于XML的API(如SOAP和REST)。实践是对每个API调用进行身份验证 查看同一论坛中的帖子。引用帖子: REST服务通常在每个请求上都经过身份验证, 通常不是通过会话 现在,原因是
- 这些类型的xml基API的客户机或使用者不是浏览器,而是其他应用程序
- 浏览器了解cookies,事实上cookies是针对基于浏览器的用户,而不是一般的应用程序李>
- 客户端可能理解也可能不理解cookie,并且在大多数情况下都不会理解cookie,因为cookie不是这些类型API的标准身份验证方法李>
退房。这迫使tomcat(不确定是否使用tomcat)不使用cookie处理会话。但一旦完成,这将无法处理基于cookie的会话。我不是100%肯定它会起作用,尽管如此,你还是可以试试 如果禁用浏览器中的Cookie,然后登录会发生什么?我得到了正确的JSON响应,如{“结果”:{“状态”:“成功”,“消息”:“请求成功”,“时间戳”:1329740163355},“数据”:{“电子邮件”:“user@***.com”,“角色”:[“user”]}设置JSSessionID Cookies的头让我总结一下:JSSessionID在浏览器中工作,但在rest客户端中不工作?当然,这个响应是由我们的控制器生成的。由于cookies被禁用,我在尝试访问/公司时获得了401;jsessionid=…不,作为URL参数,它根本不起作用。它只有在cookies中设置的情况下才能工作。我完全同意基于cookies的身份验证系统对REST不好,但这不是我们的决定。目前,我们需要在URL中使用jsessionId而不是Cookies来创建工作机制。这并不容易,而且肯定不是现成的。jsessionid附加的URL是由容器生成的,它知道如何处理它们。对于其余url,它们不会生成,因此服务器不准备处理它们。因此,您的要求是:它应该决定运行时,是否支持cookie,然后使用cookie,否则是否使用url重写?