使用WebServices进行会话管理时,最佳做法是什么?我想,最好的做法是保持服务无状态,但如果我有无状态的web服务,如何授权用户呢?
使用servlet容器进行会话管理然后让不同的控制器充当web服务的代理是一种很好的做法吗?
我附上一张图片,让你更好地理解背景.
解决方法
If webservice is stateless,how do I know that an ajax request is authorized? How do I know that ajax request is coming from user1 of webapp1,who is authorized? and not from user2 of webapp2,who is not authorized to access the service?
好问题.快速回答是:
>对于基本身份验证:用户名:密码为base64编码,并存储在客户端发送的每个请求的Authorization http标头中.见this wiki entry.标题如下所示:
授权:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ ==
使用spring security,配置可以是这样的:
<http pattern="/api/**" create-session="stateless"> <intercept-url pattern='/**' access="hasRole('REMOTE')" /> <http-basic /> </http>
>对于WS的基于表单的身份验证,请查看this article.
>首先,您向/ j_spring_security_check发送了一个帖子请求.此请求将返回Cookie,然后将由任何后续请求对Web服务使用.在这里,他们将其存储在文本文件中:
curl -i -X POST -d j_username = user -d j_password = userPass -c /tmp/cookies.txt
http://localhost:8080/app/j_spring_security_check
>然后,您可以使用文件中的cookie进行进一步的身份验证请求:
curl -i –header“Accept:application / json”-X GET -b /tmp/cookies.txt
http://localhost:8080/app/api/foos
xml spring安全配置可能如下所示:
<http pattern="/api/**" create-session="stateless"> <intercept-url pattern='/**' access="hasRole('REMOTE')" /> <form-login /> </http>