如何使用ContainerRequestContext从HTTP请求获取JSESSIONID?

Imr*_*han 2 java rest jax-rs

我在请求中有以下HTTP标头,我想从中提取JSESSIONID它:

Accept=application/json
Accept-Encoding=gzip
deflate,Accept-Language=en-us
Connection=keep-alive
Content-Length=0
Content-Type=application/json
Cookie=JSESSIONID=ss0ox8w99o9142b73rssvc0r
Host=localhost:8080
User-Agent=NFA_QA/34 CFNetwork/720.5.7 Darwin/14.5.0 (x86_64)
Run Code Online (Sandbox Code Playgroud)

我使用ContainerRequestContext如下:

@Override
public void filter(final ContainerRequestContext requestContext) throws IOException {
    System.out.println("***HEADER VALUE**: " + requestContext.getHeaderString("Cookie"));
}
Run Code Online (Sandbox Code Playgroud)

获得结果:

JSESSIONID=zv71od6l2fd41hv6yf0980khy
Run Code Online (Sandbox Code Playgroud)

和:

@Override
public void filter(final ContainerRequestContext requestContext) throws IOException {
    Map<String, javax.ws.rs.core.Cookie> clientCookie = requestContext.getCookies();
    System.out.println("Client Cookie Map: " + clientCookie);
}
Run Code Online (Sandbox Code Playgroud)

获得结果:

Clinet Cookie Map: {JSESSIONID=JSESSIONID=1of1x5u1s1l4hdxfg2azlep42}
Run Code Online (Sandbox Code Playgroud)

JSESSIONID从请求中提取的最佳方法是什么?

cas*_*lin 6

退一步

首先,REST和会话标识符在同一个句子中听起来不太好.

在小号在REST意味着无状态,而不是状态.在REST应用程序中,会话状态必须由客户端管理,而不是由服务器管理.因此,不得有任何会话标识符.

有关更多信息,请查看此处和此处.

从JAX-RS中的cookie获取值

我想你正在寻找以下解决方案:

Cookie cookie = requestContext.getCookies().get("JSESSIONID");
String value = cookie.getValue();
Run Code Online (Sandbox Code Playgroud)

有关更多信息Cookie,请查看文档.