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