Jay*_*Jay 6 java architecture spring web-services web-applications
我正在尝试创建一个web应用程序,它将使用js前端并在后端调用Spring WS.假设这是一个购物网站类型的网站.所以,我可以有类似的服务OrderService InventoryService ShippingService等等.唯一需要会话的是用户的购物车.现在,就这个购物车而言,使用servlet容器进行会话管理是否有意义?或者,我是否应该将会话CartService信息持久保存到数据库中?
使用WebServices进行会话管理时,最佳做法是什么?我想,最好的做法是保持服务无状态,但如果我有无状态的web服务,如何授权用户呢?
使用servlet容器进行会话管理然后让不同的控制器充当web服务的代理是一种很好的做法吗?
如果我有无状态的Web服务,如何授权用户?
如果所有ws都是您交付的一部分,您肯定可以使用spring-security.
一种非常常见的方法是将(apache)http服务器作为代理,例如ldap,用于身份验证和授权.
使用servlet容器进行会话管理然后让不同的控制器充当web服务的代理是一种很好的做法吗?
我认为不是.如此处所述,您只能从保持Web服务无状态中受益,如果需要在请求之间维护状态,请使用cookie.
如果状态(购物车)应该在注销后继续存在,那么像CartService这样的东西听起来对我来说是一个好主意.
如果webservice是无状态的,我如何知道ajax请求是否被授权?我如何知道ajax请求来自webapp1的user1,谁被授权了?而不是来自 webapp2 的 user2,谁无权访问该服务?
好问题。快速回答是:
对于基本身份验证:用户名:密码采用 base64 编码并存储在客户端发送的每个请求的授权http 标头中。请参阅此维基条目。标题看起来像这样:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
使用spring security,配置可以是这样的:
<http pattern="/api/**" create-session="stateless">
<intercept-url pattern='/**' access="hasRole('REMOTE')" />
<http-basic />
</http>
Run Code Online (Sandbox Code Playgroud)
对于基于表单的 WS身份验证,请查看这篇文章。
首先,您向/j_spring_security_check发送了一个发布请求。此请求将返回 Cookie,随后针对 Web 服务的任何后续请求将使用该 Cookie。他们将其存储在文本文件中:
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 security 配置可以如下所示:
<http pattern="/api/**" create-session="stateless">
<intercept-url pattern='/**' access="hasRole('REMOTE')" />
<form-login />
</http>
Run Code Online (Sandbox Code Playgroud)