gpt4 book ai didi

java - 从 ServletRequest 获取 Cookie

转载 作者:搜寻专家 更新时间:2023-11-01 02:32:36 33 4
gpt4 key购买 nike

我正在使用 ServletRequestListener 附加到新请求,获取 ServletRequest 对象并从中提取 cookie。

我注意到只有 HTTPServletRequest 有 cookie,但我还没有发现这两个对象之间的联系。

可以用吗

HttpServletRequest request = ((HttpServletRequest) FacesContext.getCurrentInstance()
.getExternalContext().getRequest());

RequestInitialized 方法中检索请求? (我确实想在每个请求上运行)

仅供引用 - 这都是在 JSF 1.2 应用程序中完成的

最佳答案

这是不正确的。 FacesContextServletRequestListener 中不可用本身。 getCurrentInstance() 可能会返回 null,从而导致 NPE。

如果您在 HTTP 网络服务器(因此不是某些 Portlet 网络服务器)上运行网络应用程序,您可以将 ServletRequest 转换为 HttpServletRequest

public void requestInitialized(ServletRequestEvent event) {
HttpServletRequest request = (HttpServletRequest) event.getServletRequest();
// ...
}

请注意,更常见的做法是使用 Filter为此,您可以将其映射到固定的 URL 模式,如 *.jsf,甚至映射到特定的 servlet,以便它仅在 FacesServlet 运行时运行。例如,您可能希望跳过对 CSS/JS/图像等静态资源的 cookie 检查。

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
HttpServletRequest request = (HttpServletRequest) req;
// ...
chain.doFilter(req, res);
}

当您碰巧已经在 J​​SF 上下文中(在托管 bean、phaselistener 或其他任何东西中)时,您可以只使用 ExternalContext#getRequestCookieMap()获取 cookie。

Map<String, Object> cookies = externalContext.getRequestCookieMap();
// ...

在 Servlet API 之上运行 JSF 时,映射值的类型为 javax.servlet.http.Cookie .

Cookie cookie = (Cookie) cookies.get("name");

关于java - 从 ServletRequest 获取 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5417492/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com