Ben*_*Ben 4 java cookies jsf servlets servlet-listeners
我正在使用ServletRequestListener附加新请求,获取ServletRequest对象并从中提取cookie.
我注意到只有HTTPServletRequestcookie但我没有找到这两个对象之间的连接.
可以使用吗?
HttpServletRequest request = ((HttpServletRequest) FacesContext.getCurrentInstance()
.getExternalContext().getRequest());
Run Code Online (Sandbox Code Playgroud)
在RequestInitialized方法中检索请求?(我确实希望在每个请求上运行)
仅供参考 - 这一切都在JSF 1.2应用程序中完成
这是不正确的.该FacesContext不是一个可用的ServletRequestListener本身.将getCurrentInstance()可能会返回null,导致NPE的.
如果您在HTTP Web服务器上运行webapp(例如,而不是某些Portlet Web服务器),您可以将其转换ServletRequest为HttpServletRequest.
public void requestInitialized(ServletRequestEvent event) {
HttpServletRequest request = (HttpServletRequest) event.getServletRequest();
// ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,更常见的做法是使用a 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);
}
Run Code Online (Sandbox Code Playgroud)
当您恰好已经在JSF上下文中(在托管bean,phaselistener或其他任何内容中)时,您可以使用它ExternalContext#getRequestCookieMap()来获取cookie.
Map<String, Object> cookies = externalContext.getRequestCookieMap();
// ...
Run Code Online (Sandbox Code Playgroud)
在Servlet API之上运行JSF时,映射值是类型javax.servlet.http.Cookie.
Cookie cookie = (Cookie) cookies.get("name");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12227 次 |
| 最近记录: |