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
Post a Comment