java - 使用 Web 服务时如何管理用户 session ?

标签 java web-services session soap

如果用户通过网络浏览器使用网络应用程序,则用户的 session 由应用程序服务器管理。它负责 session 创建、验证、超时、处置等。

据我所知,在另一种情况下没有这样的机制,如果用户通过远程客户端使用应用程序并使用 SOAP Web 服务。

那么问题来了,我们如何在 Web 服务的情况下管理用户的 session ,并实现与 session 管理相同的机制,例如失效、延长、处置?

最佳答案

假设您使用 JAX-WS 和 SOAP/HTTP,也可以使用容器管理的安全性(例如 session cookie)。你只需要注入(inject) WebServiceContext在您的服务中。它允许访问所有 HTTP 环境变量:

@Resource
WebServiceContext wsContext;

详细示例可用here .当然,您的客户也必须支持这一点(如果它们是基于 JAX-WS 的,它就可以工作)。然而,根据经验,Web 服务根本不应该保持任何状态,它们应该表现得无状态。参见 this on SO .

编辑:您可以通过以下方式访问 ServletRequest:

@WebMethod
public void foo() {
    final MessageContext mc = this.wsContext.getMessageContext();
    final ServletRequest sr = mc.get(MessageContext.SERVLET_REQUEST);

    /* works if this is a HTTP(s) request */
    if (sr != null && sr instanceof HttpServletRequest) {
        final HttpServletRequest hsr = (HttpServletRequest) sr;
        hsr.getSession(true);

        /* ... */

    } else {
        /* do some exceptional stuff */
    }

}

上面创建的 session 应该以与“标准”网络 session 完全相同的方式运行。您必须确保您的客户也理解这一点。他们必须在每个后续调用中提交 session 标识符 (cookie)。

关于java - 使用 Web 服务时如何管理用户 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8036827/

相关文章:

android - 解析 SOAP 响应时出现非法属性错误

php - 数据同步如何工作以及如何在服务器-客户端应用程序中使用它?

symfony - 无法在 RPC 中获取 session 参数

codeigniter - session 空代码点火器

java - 是否可以在多个阶段注册 CXF 拦截器?

java - 尝试从文本文件读取 jdbc 程序的参数但出现数字格式异常?

java - WSDL 包含中的 XSD 文件路径错误

php - session 提前结束

java - 解析/扫描/分词 "raw XML"

Java:对于UML图中仅存在于父类(super class)中的抽象方法应该做什么?