jsf - How to properly logout other users -


in web app trying achieve functionality, admin able logout other logged in users.

what have done far:

  • i created pojo store significant user information, including referrence users http session.
  • this pojo implementing httpsessionbindinglistener
  • during login process put instance of pojo sessionmap. via valuebound method putting static map, stores such logged-in-userinformation (on unbound-event removing again
  • in seperated admin section able access httpsession of specific user , invalidate it
  • the logged-out user gets informed via websocket has been logged-out

invalidating httpsession works fine , mentioned unbound method called. however, problem if in way logged out user still able ajax requests. new instance of hte viewscoped bean created , assigned client , request goes against new instance.

what expect (or achieve) sth viewexpiredexception thrown instead , redirecting user login page instead.
or missing important part in concept?

would enough set proper security-constraints in web.xml or hide conceptual problem?

(if it's important, bean not jsf bean cdi viewscoped bean.)

application running on glassfish 4.1,, mojarra 2.2.12


sessionbindinglistener:

@requiredargsconstructor @equalsandhashcode(of = {"user"}) public class usersessioninfo implements httpsessionbindinglistener {      @getter private static final map<usersessioninfo, usersessioninfo> sessions           = new hashmap<>(10);      @getter private final string user;     @getter private httpsession session;      @override     public void valuebound(httpsessionbindingevent event) {         usersessioninfo usi = sessions.remove(this);         if (usi != null) {             httpsession hs = usi.session;             if (hs != null) {                 hs.invalidate();             }         }         this.session = event.getsession();         sessions.put(this, this);     }      @override     public void valueunbound(httpsessionbindingevent event) {         sessions.remove(this);     }  } 

login-method

public string login() {         facescontext context = facescontext.getcurrentinstance();                 httpservletrequest request =             (httpservletrequest) context.getexternalcontext().getrequest();         try {             request.login(username, password);             context                 .getexternalcontext()                 .getsessionmap().put(username, new usersessioninfo(/* ...*/)));             // ..         }          // ....         return "/index?faces-redirect=true";     } 

admin-method logging out other user:

public void logoff(usersessioninfo usr) {     eventbus eventbus = eventbusfactory.getdefault().eventbus();             eventbus.publish(channel, new dialogmessage(/*...*/));             usr.getsession().invalidate();            } 

if session of user invalidated, requests should fail, ajax or not.

in 1 of app, have :

  • security restrictions, through roles in web.xml
  • session tracking httpsessionlistener , filter (the filter way detect new sessions created tomcat on login, avoid session fixation)
  • the possibility "kill" session, using session.invalidate

if session recreated "in back", must because have unrestricted area being access. require auth all, rule such :

<security-constraint>     <display-name>authenticated users</display-name>     <web-resource-collection>         <web-resource-name>authenticated users</web-resource-name>         <url-pattern>/*</url-pattern>         <http-method>get</http-method>         <http-method>post</http-method>     </web-resource-collection>     <auth-constraint>         <role-name>*</role-name>     </auth-constraint>     <user-data-constraint>         <transport-guarantee>confidential</transport-guarantee>     </user-data-constraint> </security-constraint> 

in web.xml, , should ok.


Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -