﻿{"id":201,"date":"2016-09-21T20:15:30","date_gmt":"2016-09-21T12:15:30","guid":{"rendered":"http:\/\/www.chenweikang.top\/?p=201"},"modified":"2017-09-19T11:42:17","modified_gmt":"2017-09-19T03:42:17","slug":"%e5%ae%9e%e7%8e%b0httpsessionlistener%e5%ae%9e%e7%8e%b0%e5%8d%95%e7%82%b9%e7%99%bb%e5%bd%95","status":"publish","type":"post","link":"https:\/\/www.chenweikang.top\/?p=201","title":{"rendered":"\u5b9e\u73b0HttpSessionListener\u5b9e\u73b0\u5355\u70b9\u767b\u5f55"},"content":{"rendered":"<blockquote><p>\u5b9e\u73b0\u539f\u7406\uff0c\u5229\u7528HttpSessionListener\u7684\u76d1\u89c6\u76d1\u542c\u529f\u80fd\u3002\u7528\u6237\u767b\u5f55\u6210\u529f\u540e\uff0c\u5728HashMap\u4e2d\u653e\u7f6e\u4e00\u7ec4sessionId\u548cuserName\u7684\u7ec4\u961f\uff0c\u5bf9HashMap\u4e2d\u7684\u952e\u503c\u4fe1\u606f\u767b\u5f55\u5b9e\u65f6\u8fdb\u884c\u7ef4\u62a4\uff0c\u5229\u7528HashMap\u6765\u5224\u65ad\u7528\u6237\u662f\u5426\u5df2\u7ecf\u767b\u5f55\uff0c\u5f53\u524d\u662f\u5426\u5728\u7ebf\uff0c\u7136\u540e\u6839\u636e\u9700\u8981\u662f\u5426\u8fdb\u884csession\uff08\u5047session\uff0c\u6307\u7684\u662fhashmap\u4e2d\u4fdd\u5b58\u7684\u952e\u503c\u4fe1\u606f\uff09\u5254\u9664\u3002<\/p><\/blockquote>\n<p>1\u3001\u4ee5\u4e0b\u662f\u7528\u4e8e\u7528\u6237\u767b\u5f55\u76d1\u542c\u7684SessionListener java\u6587\u4ef6\u6e90\u7801\uff1a<br \/>\npublic class SessionListener implements HttpSessionListener {<br \/>\nprivate static final Logger m_logger = Logger.getLogger(LogonAction.class);\/\/\u7528\u4e8elog4j\u8c03\u8bd5<br \/>\nprivate static HashMap hashUserName = new HashMap();\/\/\u4fdd\u5b58sessionID\u548cusername\u7684\u6620\u5c04<br \/>\n\/**\u4ee5\u4e0b\u662f\u5b9e\u73b0HttpSessionListener\u4e2d\u7684\u65b9\u6cd5**\/<br \/>\npublic void sessionCreated(HttpSessionEvent sessionEvent){<br \/>\n}<\/p>\n<p>public void sessionDestroyed(HttpSessionEvent sessionEvent){<br \/>\nhashUserName.remove(sessionEvent.getSession().getId());<br \/>\n}<\/p>\n<p>\/**<br \/>\n* isLogining-\u7528\u4e8e\u5224\u65ad\u7528\u6237\u662f\u5426\u5df2\u7ecf\u767b\u5f55<br \/>\n* @param\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sessionUserName String-\u767b\u5f55\u7684\u7528\u6237\u540d<br \/>\n* @return boolean-\u8be5\u7528\u6237\u662f\u5426\u5df2\u7ecf\u767b\u5f55\u7684\u6807\u5fd7<br \/>\n* *\/<br \/>\npublic static boolean isLogining(String sessionUserName) throws Exception{<br \/>\nreturn hashUserName.containsValue(sessionUserName);<br \/>\n}<\/p>\n<p>\/*<br \/>\n* isOnline-\u7528\u4e8e\u5224\u65ad\u7528\u6237\u662f\u5426\u5728\u7ebf<br \/>\n* @param session HttpSession-\u767b\u5f55\u7684\u7528\u6237\u540d\u79f0<br \/>\n* @return boolean-\u8be5\u7528\u6237\u662f\u5426\u5728\u7ebf\u7684\u6807\u5fd7<br \/>\n*\/<br \/>\npublic static boolean isOnline(HttpSession session) throws Exception{<br \/>\nreturn hashUserName.containsKey(session.getId());<br \/>\n}<\/p>\n<p>\/*<br \/>\n* createUserSession-\u7528\u4e8e\u5efa\u7acb\u7528\u6237session<br \/>\n* @param sessionUserName String-\u767b\u5f55\u7684\u7528\u6237\u540d\u79f0<br \/>\n*\/<br \/>\npublic static void createUserSession(HttpSession session,String sessionUserName) throws Exception {<br \/>\nhashUserName.put(session.getId(),sessionUserName);<\/p>\n<p>if(m_logger.isDebugEnabled()){\/\/log4j\u8c03\u8bd5\u4fe1\u606f<br \/>\nIterator debugIter = hashUserName.entrySet().iterator();<br \/>\nwhile (debugIter.hasNext()){<br \/>\nMap.Entry entry = (Map.Entry)debugIter.next();<br \/>\nObject key = entry.getKey();<br \/>\nObject val = entry.getValue();<br \/>\nm_logger.debug(sessionUserName);<br \/>\nm_logger.debug(key.toString());<br \/>\nm_logger.debug(val.toString());<br \/>\n}<br \/>\n}\/\/log4j\u8c03\u8bd5\u4fe1\u606f\u7ed3\u675f<\/p>\n<p>}<\/p>\n<p>\/*<br \/>\n* createUserSession-\u6839\u636e\u7528\u6237\u540d\u5254\u9664session<br \/>\n* @param sessionUserName String-\u767b\u5f55\u7684\u7528\u6237\u540d\u79f0<br \/>\n*\/<br \/>\npublic static void removeUserSession(String sessionUserName) throws Exception{<br \/>\nIterator iter = hashUserName.entrySet().iterator();<br \/>\nwhile (iter.hasNext()){<br \/>\nMap.Entry entry = (Map.Entry)iter.next();<br \/>\nObject key = entry.getKey();<br \/>\nObject val = entry.getValue();<br \/>\nif(((String)val).equals(sessionUserName)){<br \/>\n<span style=\"color: #0000ff;\">hashUserName.put(key,null);<br \/>\niter.remove();<br \/>\n<\/span><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #3366ff;\">\/\/hashUserName.remove(key);\/\/<span style=\"color: #3366ff;\">\u5f53\u4f7f\u7528 fail-fast iterator \u5bf9 Collection \u6216 Map \u8fdb\u884c\u8fed\u4ee3\u64cd\u4f5c\u8fc7\u7a0b\u4e2d\u5c1d\u8bd5\u76f4\u63a5\u4fee\u6539 Collection \/ Map \u7684\u5185\u5bb9\u65f6\uff0c\u5373\u4f7f\u662f\u5728\u5355\u7ebf\u7a0b\u4e0b\u8fd0\u884c,java.util.ConcurrentModificationException \u5f02\u5e38\u4e5f\u5c06\u88ab\u629b\u51fa\u3002<\/span><br \/>\n<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<br \/>\n}<br \/>\n}<\/p>\n<p>\/*<br \/>\n* replaceUserSession-\u7528\u6237\u5df2\u7ecf\u767b\u5f55\u5219\u8fdb\u884csession\u5254\u9664,\u5426\u5219\u5efa\u7acb\u65b0\u7684session<br \/>\n* @param sUserName String-\u767b\u5f55\u7684\u7528\u6237\u540d\u79f0<br \/>\n*\/<br \/>\npublic static void replaceUserSession(HttpSession session,String sessionUserName) throws Exception {<br \/>\nif(hashUserName.containsValue(sessionUserName)){\/\/\u5982\u679c\u8be5\u7528\u6237\u5df2\u7ecf\u767b\u5f55\u8fc7\uff0c\u5219\u4f7f\u4e0a\u6b21\u767b\u5f55\u7684\u7528\u6237\u6389\u7ebf(\u4f9d\u636e\u4f7f\u7528\u6237\u540d\u662f\u5426\u5728hashUserName\u4e2d)<br \/>\n\/\/\u904d\u5386\u539f\u6765\u7684hashUserName\uff0c\u5220\u9664\u539f\u7528\u6237\u540d\u5bf9\u5e94\u7684sessionID(\u5373\u5220\u9664\u539f\u6765\u7684sessionID\u548cusername)<br \/>\nIterator iter = hashUserName.entrySet().iterator();<br \/>\nwhile (iter.hasNext()){<br \/>\nMap.Entry entry = (Map.Entry)iter.next();<br \/>\nObject key = entry.getKey();<br \/>\nObject val = entry.getValue();<br \/>\nif(((String)val).equals(sessionUserName)){<br \/>\n<span style=\"color: #0000ff;\">hashUserName.put(key,null);<br \/>\niter.remove();<br \/>\n<\/span><span style=\"color: #000000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #3366ff;\">\/\/hashUserName.remove(key);\/\/<span style=\"color: #3366ff;\">\u5f53\u4f7f\u7528 fail-fast iterator \u5bf9 Collection \u6216 Map \u8fdb\u884c\u8fed\u4ee3\u64cd\u4f5c\u8fc7\u7a0b\u4e2d\u5c1d\u8bd5\u76f4\u63a5\u4fee\u6539 Collection \/ Map \u7684\u5185\u5bb9\u65f6\uff0c\u5373\u4f7f\u662f\u5728\u5355\u7ebf\u7a0b\u4e0b\u8fd0\u884c,java.util.ConcurrentModificationException \u5f02\u5e38\u4e5f\u5c06\u88ab\u629b\u51fa\u3002<br \/>\n<\/span><\/span><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span>}<br \/>\n}<br \/>\nhashUserName.put(session.getId(),sessionUserName);\/\/\u6dfb\u52a0\u73b0\u5728\u7684sessionID\u548cusername<br \/>\n}else{\/\/\u5982\u679c\u8be5\u7528\u6237\u6ca1\u767b\u5f55\u8fc7\uff0c\u76f4\u63a5\u6dfb\u52a0\u73b0\u5728\u7684sessionID\u548cusername<br \/>\nhashUserName.put(session.getId(),sessionUserName);<br \/>\n}<\/p>\n<p>if(m_logger.isDebugEnabled()){\/\/log4j\u8c03\u8bd5\u4fe1\u606f<br \/>\nIterator debugIter = hashUserName.entrySet().iterator();<br \/>\nwhile (debugIter.hasNext()){<br \/>\nMap.Entry entry = (Map.Entry)debugIter.next();<br \/>\nObject key = entry.getKey();<br \/>\nObject val = entry.getValue();<br \/>\nm_logger.debug(sessionUserName);<br \/>\nm_logger.debug(key.toString());<br \/>\nm_logger.debug(val.toString());<br \/>\n}<br \/>\n}\/\/log4j\u8c03\u8bd5\u4fe1\u606f\u7ed3\u675f<\/p>\n<p>}<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>2. <span style=\"color: #0000ff;\">\u6ce8\u610f\uff1a\u6700\u540e\u522b\u5fd8\u4e86\u5728web.xml\u6587\u4ef6\u4e2d\u914d\u7f6e\u76d1\u542c\u5668SessionListener:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;listener&gt;<br \/>\n&lt;listener-class&gt;com.projectsSrcPath.SessionListener&lt;\/listener-class&gt;<br \/>\n&lt;\/listener&gt;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>\u8f6c\u8f7d\u8bf7\u6ce8\u660e\uff1a<a href=\"https:\/\/www.chenweikang.top\">\u5de6\u624b\u4ee3\u7801\u53f3\u624b\u8bd7<\/a> &raquo; <a href=\"https:\/\/www.chenweikang.top\/?p=201\">\u5b9e\u73b0HttpSessionListener\u5b9e\u73b0\u5355\u70b9\u767b\u5f55<\/a><\/p><div class=\"__youshang\">\r\n            <div id=\"__youshang_popup\" class=\"wechat popup\" style=\"display: none;\">\r\n                <div class=\"head\">~\u8c22\u8c22\u6253\u8d4f~<\/div>\r\n                <div class=\"qrcode\"><div class=\"qrcode-li wechat\" ><img src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/07\/wexin.png\" \/><\/div><div class=\"qrcode-li alipay\" style=\"display:none;\"><img src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/07\/ali-pay.png\" \/><\/div><div class=\"qrcode-li hongbao\" style=\"display:none;\"><img src=\"https:\/\/www.chenweikang.top\/wp-content\/uploads\/2019\/07\/ali-hongbao.png\" \/><\/div><\/div>\r\n                <ul class=\"platform\"><li class=\"icon-wechat active\" data-bg-color=\"#05af4e\" data-thanks=\"~\u8c22\u8c22\u6253\u8d4f~\"><\/li><li class=\"icon-alipay \" data-bg-color=\"#00a2ea\" data-thanks=\"~\u8c22\u8c22\u6253\u8d4f~\"><\/li><li class=\"icon-hongbao \" data-bg-color=\"#dd5746\" data-thanks=\"<p>\u626b\u7801\u9886\u7ea2\u5305<\/p><p style='margin-top: 24px;'>\uff08\u4f59\u989d\u5b9d\u652f\u4ed8\u65f6\u53ef\u62b5\u73b0\uff09<\/p>\"><\/li><\/ul>\r\n            <\/div>\r\n            <a href=\"javascript:void(0);\" id=\"__youshang_btn\">\u8d4f<\/a>\r\n        <\/div>","protected":false},"excerpt":{"rendered":"<p>\u5b9e\u73b0\u539f\u7406\uff0c\u5229\u7528HttpSessionListener\u7684\u76d1\u89c6\u76d1\u542c\u529f\u80fd\u3002\u7528\u6237\u767b\u5f55\u6210\u529f\u540e\uff0c\u5728HashMap\u4e2d\u653e\u7f6e\u4e00\u7ec4 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":137,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8],"tags":[20],"class_list":["post-201","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-java"],"_links":{"self":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/posts\/201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=201"}],"version-history":[{"count":0,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=\/wp\/v2\/media\/137"}],"wp:attachment":[{"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.chenweikang.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}