java - JAXWS 和 session

标签 java web-services soap session jax-ws

我对编写网络服务相当陌生。我正在使用 JAXWS 开发 SOAP 服务。我希望能够让用户登录并在我的服务中知道哪个用户正在发出命令。换句话说,进行一些 session 处理。

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

是否有更好的方法使服务层不知道传输层?有什么方法可以使用 servlet 过滤器来完成此任务吗?我希望答案尽可能与框架无关。

最佳答案

I'm working on a SOAP service using JAXWS. I'd like to be able to have users log-in and in my service know which user is issuing a command. In other words, have some session handling.

传统的 Web 服务本质上是无状态的,Web 服务中没有 session 处理(这与识别调用者无关)。

如果您希望要求用户经过身份验证才能调用服务,传统方法是:

  1. 公开返回身份验证 token 的“身份验证”Web 服务(传递用户凭据)。
  2. 让用户首先调用此身份验证。
  3. 让用户在后续调用“业务”网络服务时在自定义 header 中传递 token 。

在服务器端:

  1. 拒绝任何不包含有效 token 的调用。
  2. 一段时间不活动后使 token 失效

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

关于java - JAXWS 和 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2751949/

相关文章:

web-services - Web 服务的安全性(REST 和 SOAP)

java - HTTPS - Spring Web Security - 如何确保服务器安全

apache-flex - 在 Flex 4 中使用 HTTPS Web 服务

java - SugarCRM、WSDL 和 RPC

web-services - ColdFusion 中应该使用什么来映射到 SOAP 类型 tns :ArrayOfString?

java - 如何使用Android获取xml中的根元素?

java - 在 flink 流中使用 grok

java - Netbeans JavaSE 项目在执行时工作正常,但构建的 .jar 却不行

java - Apache Beam 没有将无限数据保存到文本文件

php - 连接过多 由于 sleep 连接过多而导致错误