-
1. Re: inject and outject session scoped object?
lvdberg Aug 16, 2010 2:57 AM (in response to subaochen)Hi,
Being logged in doesn't mean everrything is running in the same session/thread. I normally outject the currentUser directly in the Auheticate method.
Leo
-
2. Re: inject and outject session scoped object?
subaochen Aug 16, 2010 3:47 AM (in response to subaochen)Thanks Leo first!
But I use jpaPermissionStore to authenticate user,so there is no authencate method needed, that is why I observe
org.jboss.seam.security.loginSuccessful
envent.So you mean I should observe another event other than org.jboss.seam.security.loginSuccessful? Which event should I observe to get the current logged in user?
Thanks!
Su Baochen
-
3. Re: inject and outject session scoped object?
lvdberg Aug 16, 2010 6:18 AM (in response to subaochen)Hi,
You're using the newer features of Seam in relation to authentication (you've presumably defined the Users and Roles etc. with annotations). Don't have much experience there because I use the
older
authentication way. The only reason I am sticking to that concept, because I hate adding a Seam-dependency to the domain model.The only way to check this out is to look in your test-method (that's the reason I asked for some code) if it's called from within your own session.
The other one is that the login event is called asybchrounously (just guessing, I am not sure here), which means it doesn't
outject
thereal
current user. Just place a log or system out and you can see what is outjected there.Leo
-
4. Re: inject and outject session scoped object?
subaochen Aug 16, 2010 11:02 PM (in response to subaochen)Hi Leo,
Thanks you first!
I have write a SessionListener to track when currentUser is added to the session and when currentUser removed from the session. The sessionListener is as below:
import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import org.jboss.seam.contexts.Contexts; import org.jboss.seam.web.ServletContexts; public class SessionListener implements HttpSessionListener,HttpSessionAttributeListener { private Map map; public SessionListener() { map = new HashMap(); } public void attributeAdded(HttpSessionBindingEvent e) { Object user = e.getSession().getAttribute("currentUser"); System.out.println("adding currentUser to session:" + user); } public void attributeRemoved(HttpSessionBindingEvent e) { try { System.out.println("before remove from session,source="+e.getSource()); Object u = e.getSession().getAttribute("currentUser"); System.out .println("!!!!!!!!!!!!!!!!!remove currentUser from session:" + u); } catch (java.lang.IllegalStateException ex) { System.out.println("session is invalid!!!!"); } } public void attributeReplaced(HttpSessionBindingEvent e) { Object u = e.getSession().getAttribute("currentUser"); System.out.println("currentUser replaced from session:" + u); } @Override public void sessionCreated(HttpSessionEvent se) { // TODO Auto-generated method stub System.out.println("session created:"+se); } @Override public void sessionDestroyed(HttpSessionEvent se) { // TODO Auto-generated method stub System.out.println("session destroyed:"+se); } }
The strange thing is that, MOST of the time currentUser is there, but suddenly, when I visit some special pages, currentUser is destroyed.
I have tried to looked up the source code of seam to find why and how currentUser is destroyed,but have not get any conclusion.
Also, I have tried visit debug.seam to see what happended related to session context after click one page. From debug.seam I know that when currentUser is destroyed, all other things in session context are just there! only currentUser is destroyed!
I also have tried different version of jboss(5.0.0,5.1.0), all failed in the same situation.
I'd like to track when and why currentUser is destroyed, but I don't know how to debug seam itself:-(,so would you like to tell me how to debug seam itself? Then I can track to find who destroy currentUser,and why and when destroy currentUser.
Thank you very much!
Baochen Su
-
5. Re: inject and outject session scoped object?
lvdberg Aug 17, 2010 2:46 AM (in response to subaochen)Hi,
I am not really an expert in the area of barebones http-programming, but what I can imagine is that there is some interference with Seam which heavily depends on his own Listener. I still don't see where and how you call the test-method and can you be more specific about the
special
pages you visit. Seam creates his own context layer, which provides more control over storage of variables. Do youloose
currentUser in those specific pages only, or can you see it again when you go to another page?Leo
-
6. Re: inject and outject session scoped object?
tausuahmed Aug 17, 2010 9:10 AM (in response to subaochen)Hi Su,
Is your Member class is annotated, if that is the case try using variable name(currentUser) as component name.