JAXWS和会话

Pac*_*ace 2 java session soap web-services jax-ws

我很擅长编写Web服务.我正在使用JAXWS开发SOAP服务.我希望能够让用户登录并在我的服务中知道哪个用户正在发出命令.换句话说,有一些会话处理.

我见过这样做的一种方法是使用cookie并从我的Web服务访问HTTP层.但是,这依赖于使用HTTP作为传输层(我知道HTTP几乎总是传输层,但我是纯粹的).

是否有更好的方法可以使服务层不知道传输层?有没有办法用servlet过滤器实现这个目的?我希望答案尽可能与框架无关.

Pas*_*ent 5

我正在使用JAXWS开发SOAP服务.我希望能够让用户登录并在我的服务中知道哪个用户正在发出命令.换句话说,有一些会话处理.

传统的Web服务本质上是无状态的,Web服务中没有会话处理(这与识别调用者没有任何关系).

如果您要求对您的用户进行身份验证以调用服务,则传统方法是:

  1. 公开返回身份验证令牌的"身份验证"Web服务(传递用户凭据).
  2. 让用户首先调用此身份验证.
  3. 让用户在后续"业务"Web服务调用中在自定义标头中传递令牌.

在服务器端:

  1. 拒绝任何不包含有效令牌的呼叫.
  2. 在一段时间不活动后使令牌失效

您可以为此方法实现自定义解决方案(这是一种高度可互操作的解决方案).或者您可以使用提供类似开箱即用功能的WS-Security/UsernameTokens.WS-Security是一个标准(Metro实现它),它不是"框架"特定的.