Listener instance:
Package Com.gwssi.listener;import Javax.servlet.http.httpsession;import javax.servlet.http.HttpSessionEvent; Import Javax.servlet.http.httpsessionlistener;public class Sessionlistener implements Httpsessionlistener {@ overridepublic void sessioncreated (Httpsessionevent event) {HttpSession session = Event.getsession (); Sessionbean Sessionbean = Sessionfactory.getinstance (). Getsessionbean (); System.out.println ("sessioncreated session:" + (Session.getid ())); System.out.println ("sessioncreated accesscount:" + (Sessionbean.getaccesscount ()));// Number of visits Sessionbean.setaccesscount (Sessionbean.getaccesscount () + 1);//Online Statistics sessionbean.getonline (). Put ( Session.getid (), null);} @Overridepublic void Sessiondestroyed (Httpsessionevent event) {HttpSession session = Event.getsession (); Sessionfactory factory = Sessionfactory.getinstance (); Sessionbean Sessionbean = Factory.getsessionbean (); System.out.println ("sessiondestroyed session:" + (Session.getid ())); System.out.println ("sessiondestroyed accesscount:" + (Sessionbean.getaccesscount ())); Factory.removelogin (session);}}
Package Com.gwssi.listener;import Javax.servlet.http.httpsession;public class Sessionfactory {private SessionBean Sessionbean = new Sessionbean ();p rivate static sessionfactory factory;private sessionfactory () {}static {factory = new Ses Sionfactory ();} Public synchronized static Sessionfactory getinstance () {if (factory = = null) {factory = new sessionfactory ();} return factory;} public void Addlogin (HttpSession session, String user) {This.getsessionbean (). Getonline (). Put (Session.getid (), user); This.getsessionbean (). GetLogin (). Add (user); public void Removelogin (HttpSession session) {This.getsessionbean (). GetLogin (). Remove (This.getsessionbean (). Getonline (). Get (Session.getid ())), This.getsessionbean (). Getonline (). Remove (Session.getid ()); public boolean isOnline (String user) {return This.getsessionbean (). GetLogin (). Contains (user); Public Sessionbean Getsessionbean () {return sessionbean;} public void Setsessionbean (Sessionbean sessionbean) {This.sessionbean = Sessionbean;}}
Package Com.gwssi.listener;import Java.util.hashmap;import Java.util.hashset;import java.util.map;import Java.util.set;public class Sessionbean {private map<string, string> online = new hashmap<string, string> (); private int accesscount = 0;private set<string> login = new hashset<string> ();/** * * return current system online number * * @ return int */public int Getonlinecount () {return this.online.size ();} /** * Returns the current number of system logins * * @return int */public int Getlogincount () {return This.getlogin (). Size (); Public map<string, String> Getonline () {return online;} public void Setonline (map<string, string> online) {this.online = online;} public int Getaccesscount () {return accesscount;} public void Setaccesscount (int accesscount) {this.accesscount = Accesscount;} Public set<string> GetLogin () {return login;} public void Setlogin (set<string> login) {this.login = login;}}
Added in Web. xml
<session-config> <session-timeout>10</session-timeout> </session-config> <listener> <listener-class>com.gwssi.listener.SessionListener</listener-class> </ Listener>
When you log on
Add entry to Sessionfactory for recording whether online sessionfactory.getinstance (). Addlogin (Session, Userinfo.getuserid ());
Page Call:
Import= "Com.oddel.listener.SessionFactory;
Sessionfactory.getinstance (). IsOnline (UserID)
Returns true to indicate that the user is currently online.
Returns false to indicate that the user is currently not online.
Filter:
Package Com.gwssi.filter;import Java.io.ioexception;import Javax.servlet.filter;import javax.servlet.FilterChain; Import Javax.servlet.filterconfig;import Javax.servlet.servletexception;import javax.servlet.ServletRequest; Import Javax.servlet.servletresponse;import Javax.servlet.http.httpservletrequest;import Javax.servlet.http.httpservletresponse;import Javax.servlet.http.httpsession;import Cn.gwssi.csdb.fbk.util.stringutil;public class Sessioncheckfilter implements Filter {@Overridepublic void Destroy () {} @Overridepublic void DoFilter (ServletRequest req, servletresponse res,filterchain chain) throws IOException, servletexception {httpservletrequest request = (httpservletrequest) req; String UserID = request.getparameter ("userid");//system.out.println (Request.getservletpath () + "= = = sessioncheckfilter==== + userid); if (Stringutil.isempty (userid) | | "null". Equals (UserID) {//) Chain.dofilter (req, res) is judged by the background when there is no UserID parameter in the request;} else {HttpSession session = Request.getsession (); UserInfo UseriNFO = (UserInfo) session.getattribute ("UserInfo"); HttpServletResponse response = (httpservletresponse) res;if (userInfo = null) {//session expires redirect (request, response);} else {System.out.println (Userinfo.getuserid () + "========" + userid), if (Userid.equals (Userinfo.getuserid ())) { Chain.dofilter (req, res);} else {//Login inconsistent redirect (request, Response);}}}} private void Redirect (HttpServletRequest request,httpservletresponse response) throws IOException {String RequestType = Request.getheader ("X-requested-with"); if (RequestType! = null && requesttype.equals ("XMLHttpRequest")) { Response.setstatus (Httpservletresponse.sc_forbidden);} else {String href = Request.getcontextpath () + "/pages/sessiontimeout.jsp"; response.sendredirect (HREF);}} @Overridepublic void init (filterconfig config) throws servletexception {}}
In Web. xml
<filter> <filter-name>sessionCheckFilter</filter-name> <filter-class> com.gwssi.csdb.fbk.authority.sessioncheckfilter</filter-class> </filter> < filter-mapping> <filter-name>sessionCheckFilter</filter-name> <url-pattern>*.do </url-pattern> </filter-mapping>
Listener "Listener" and "filter" in the Web