【发布时间】:2015-11-04 03:28:14
【问题描述】:
我正在尝试创建一个 web 应用程序,它将使用 js 前端并在后端调用 Spring WS。假设这是一个购物网站类型的网站。所以,我可以拥有OrderServiceInventoryServiceShippingService 等服务。唯一需要会话的是用户的购物车。现在,对于这个购物车,使用 servlet 容器进行会话管理有意义吗?或者,我应该使用CartService 将会话信息保存到数据库吗?
在使用 WebServices 进行会话管理时,最佳实践是什么?我想,最好的做法确实是保持服务无状态,但是如果我有无状态的 web 服务,我该如何授权用户呢?
使用 servlet 容器只是为了进行会话管理,然后让不同的控制器充当 Web 服务的代理,这完全不是一种好习惯吗?
【问题讨论】:
-
好吧,我猜你可以在 HTTP 请求头中使用一种客户端访问密钥;我的意思是:从浏览器(登录尝试后)客户端访问代码在自定义 http 标头中传递;在 servlet 容器的服务器端,您可以获得此客户端访问令牌并检查它是否是有效令牌;然后您可以使用它来调用 Web 服务
-
那么单个 servlet/filter 是否应该充当所有 Web 服务的授权者?
-
是的,I0d 绝对使用单个 servlet 或过滤器
-
如果我要使用 servlet/过滤器,那么它就可以访问会话,不是吗?如果它可以访问会话并且可以检查用户是否有资格访问 Web 服务,那么我的 WS 不需要任何类型的安全性?这是(使用 servlet 作为安全门)保护 Web 服务免受 ajax 请求影响的最佳实践吗?
-
不……你不会;您必须访问请求并获取包含客户端访问密钥的 http 标头。像 request.getHeader("CUST-KEY");然后检查此密钥是否有效或更少(根据一些明确定义的规则)。这意味着浏览器必须在每次调用中传递这个 http 标头
标签: java spring web-services web-applications architecture