我们有一个基于portlet的应用程序,它检索某个cookie进行验证,然后发送一个动作请求。
但是,我们发现HttpServletRequest返回cookie的空列表的问题 - 尽管我可以100%确认有cookie。实际上,有时代码可以工作并显示cookie(尽管这很少见)。
我们注意到IE似乎比FF和Chrome更频繁地工作,但同样,确实没有一致性或模式来确定导致它运行的原因。
始终获取请求 - 这里从来没有空指针的问题。此时唯一的问题是cookie列表为空。
返回HttpServletRequest的静态类中的方法
FacesContext context = FacesContext.getCurrentInstance();
Map<String, Object> requests = context.getExternalContext().getRequestMap();
for (String requestName : requests.keySet()) {
if (requests.get(requestName) instanceof HttpServletRequest) {
return ((HttpServletRequest) requests.get(requestName));
}
}
return null;
从其他类调用上面的静态方法:
Cookie[] cookies = StaticClass.getHttpRequest().getCookies();
System.out.println("Cookies = " + cookies);
答案 0 :(得分:0)
HttpServletRequest方法getCookies()应该返回客户端在请求中发送的cookie数组。如果返回的数组为null,则表示客户端发送的请求不包含cookie。您是否在同一域或子域内调用addCookie(yourCookie)方法(我问您不能跨不同域访问cookie)?
即:
Cookie yourCookie = new Cookie(name, value);
response.addCookie(yourCookie);
如果cookie未添加到先前的响应中,则它不会出现在请求中。
答案 1 :(得分:0)
其他一些线索:
一般情况下,如果您可以捕获http请求消息并在此处发布它也会有所帮助。
更新:在Firefox中,您可以右键单击页面,然后选择“查看页面信息”,然后选择“安全”选项卡,单击“查看cookie”按钮查看所有cookie。您还可以在弹出窗口中更改域名,以查看其他域下的cookie。