jsf - @WebFilter and FacesContext.getCurrentInstance() -> Nullpointer -


in application have webfilter. webfilter should check coockie. use of facescontext.getcurrentinstance() gives nullpointer exception. how can solve this?

the webfilter:

@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); } [...] 

the cookiemanager facescontext.getcurrentinstance():

[...] 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(); gives the

standardwrappervalve[faces servlet]: servlet.service() servlet faces servlet threw exception java.lang.nullpointerexception 

the facescontext created facesservlet. servlet filter invoked before servlet. facescontext therefore per definition not available in servlet filter.

as concrete functional requirement of grabbing request cookies, seem have missed fact facescontext facade of among others servletrequest , servletresponse. methods of externalcontext delegate under covers servletrequest/servletresponse methods (this mentioned in javadoc, example getrequestcookiemap()). cookie methods need readily available via servletrequest argument of dofilter() method.

httpservletrequest hsr = (httpservletrequest) request; cookie[] cookies = hsr.getcookies(); // loop on cookies find 1 matching name. 

noted should there hack/workaround available create facescontext in filter based on servletrequest , servletresponse variables, makes after no utter sense if information readily available in variables themselves.

i suggest take little jsf pause , learn basic servlet api well. that's jsf using under covers (you see, facesservlet "just" servlet). reading method descriptions in externalcontext javadoc should hint in basic servlet api methods getting information from.


Comments

Popular posts from this blog

assembly - 8086 TASM: Illegal Indexing Mode -

Java, LWJGL, OpenGL 1.1, decoding BufferedImage to Bytebuffer and binding to OpenGL across classes -

javascript - addthis share facebook and google+ url -