jsf - Failed to retrieve Session from FacesContext inside a Servlet Filter -


after autheticating user, want put reference in session current logged in user.

here how in setcurrentuser method :

facescontext facescontext = facescontext.getcurrentinstance(); httpsession session = (httpsession) facescontext.getexternalcontext().getsession(true); session.setattribute("current_user", currentuser); 

unfortunately, session reference null !

alternatively, tried sessionmap

facescontext facescontext = facescontext.getcurrentinstance(); map<string, object> sessionmap = facescontext.getexternalcontext().getsessionmap(); sessionmap.put("current_user", currentuser); 

it miserably failed exception :

java.lang.unsupportedoperationexception     @ java.util.abstractmap.put(abstractmap.java:186)     (...) 

what doing wrong ?

the full code of controller

usercontroller.java

public class usercontroller implements filter {     private filterconfig fc;     private static final string current_user = "current_user";      public void init(filterconfig filterconfig) throws servletexception {         fc = filterconfig;         log(">> filter initialized");     }      public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception {         // authenticate user         // ...          // save refernce in session         setcurrentuser(currentuser);          //(...)     }      public static void setcurrentuser(user u) {         facescontext facescontext = facescontext.getcurrentinstance();         httpsession session = (httpsession) facescontext.getexternalcontext().getsession(true);         session.setattribute(current_user, u);// session null     }      public static user getcurrentuser() {         facescontext facescontext = facescontext.getcurrentinstance();         httpsession session = (httpsession) facescontext.getexternalcontext().getsession(true);                return (user)session.getattribute(current_user);     }      //...    } 

jsf 2.0
jboss 5.1.0.ga

the facescontext not available in filter filter invoked before facesservlet.

you should getting session request argument instead.

httpsession session = ((httpservletrequest) request).getsession(); session.setattribute("user", currentuser); // ... 

once you're in jsf context (e.g. inside jsf managed bean or jsf view), available getsessionmap() on same attribute name

user user = (user) externalcontext.getsessionmap().get("user"); 

or #{user} in el:

@managedproperty("#{user}") private user user; 

Comments

Popular posts from this blog

django - How can I change user group without delete record -

java - Need to add SOAP security token -

java - EclipseLink JPA Object is not a known entity type -