首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@WebFilter和FacesContext.getCurrentInstance() ->

@WebFilter和FacesContext.getCurrentInstance() ->
EN

Stack Overflow用户
提问于 2013-08-16 09:28:17
回答 1查看 2.2K关注 0票数 4

在我的应用程序中,我有一个WebFilter。这个网络过滤器应该检查一个coockie。但是FacesContext.getCurrentInstance()的使用提供了一个Null指针异常。我怎么才能解决这个问题?

WebFilter:

代码语言:javascript
复制
@Inject
private CookieManager cm;   

[...]

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if(cm.isDoCheck()){
        cm.doCheck();
    }
    chain.doFilter(request, response);
}
[...]

CookieManager,它执行FacesContext.getCurrentInstance():

代码语言:javascript
复制
[...]
private void doCheck(){
    FacesContext context = FacesContext.getCurrentInstance();
    Map<String, Object> cookies = context.getExternalContext().getRequestCookieMap();

    Cookie cookie = (Cookie) cookies.get("frontend");
    if(cookie != null){
        setSessionHash(cookie.getValue());
    }
}
[...]

context.getExternalContext().getRequestCookieMap();给出

代码语言:javascript
复制
StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-16 11:04:29

FacesContext是由FacesServlet创建的。在任何servlet之前调用任何servlet过滤器。因此,FacesContext在任何servlet过滤器中都是不可用的。

至于获取请求cookie的具体功能需求,您似乎也完全忽略了这样一个事实,即FacesContextServletRequestServletResponse等其他方面的立面ExternalContext all的方法在掩护下委托给ServletRequest/ServletResponse方法(在其javadoc中清楚地提到了这一点,例如getRequestCookieMap())。您需要的cookie方法只需通过doFilter()方法的doFilter()参数即可获得。

代码语言:javascript
复制
HttpServletRequest hsr = (HttpServletRequest) request;
Cookie[] cookies = hsr.getCookies();
// Loop over cookies to find the one matching the name.

应该注意的是,有一个黑客/解决办法可以根据ServletRequestServletResponse变量在过滤器中自己创建FacesContext,但是如果这些变量本身很容易获得这些信息,这毕竟是毫无意义的。

我建议先暂停一下JSF,并学习一些基本的Servlet。这基本上就是JSF在封面下使用的内容(您可以看到,它的FacesServlet只是一个servlet)。阅读ExternalContext javadoc中的方法描述也会提示您在基本Servlet中所有这些方法都是从哪里获取它们的信息的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18270094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档