如果用户通过网络浏览器使用网络应用程序,则用户的 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/