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

时间:2016-01-25 09:49:04

标签: 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)

我正在使用ContainerRequestContext,如下所示:

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

获得结果:

JSESSIONID=zv71od6l2fd41hv6yf0980khy

@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);
}

获得结果:

Clinet Cookie Map: {JSESSIONID=JSESSIONID=1of1x5u1s1l4hdxfg2azlep42}

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

1 个答案:

答案 0 :(得分:6)

后退

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

REST 中的 S 表示无状态而非有状态。在REST应用程序中,会话状态必须由客户端管理,而不是由服务器管理。因此,不得有任何会话标识符。

有关详细信息,请查看herehere

从JAX-RS中的cookie获取值

我认为您正在寻找以下解决方案:

Cookie cookie = requestContext.getCookies().get("JSESSIONID");
String value = cookie.getValue();

有关Cookie的详细信息,请查看documentation