我在请求中有以下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
的最佳方式是什么?
答案 0 :(得分:6)
首先,REST和会话标识符在同一个句子中听起来不太好。
REST 中的 S 表示无状态而非有状态。在REST应用程序中,会话状态必须由客户端管理,而不是由服务器管理。因此,不得有任何会话标识符。
我认为您正在寻找以下解决方案:
Cookie cookie = requestContext.getCookies().get("JSESSIONID");
String value = cookie.getValue();
有关Cookie
的详细信息,请查看documentation。