参考博文: https://blog.csdn.net/shenxiaomo1688/article/details/79644110
Listener逻辑代码如下:
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import java.util.HashMap; import java.util.Map; /** * [ Session监听器:管控登录用户,同一账号只能在一个地方登录 ] * * @author Love丶TG * @version 1.0.0 * @create 2019 年 07 月 02 日 11:04 */ public class MyListener implements HttpSessionAttributeListener { private Map<String, HttpSession> map = new HashMap<String, HttpSession>(); private static final String LOGIN_TAG = "login_user"; @Override public void attributeAdded(HttpSessionBindingEvent event) { String name = event.getName(); if (LOGIN_TAG.equals(name)) { String username = (String) event.getValue(); if (map.get(username) != null) { HttpSession session = map.get(username); session.removeAttribute(username); session.invalidate(); } map.put(username, event.getSession()); } } @Override public void attributeRemoved(HttpSessionBindingEvent event) { String name = event.getName(); if (LOGIN_TAG.equals(name)) { String username = (String) event.getValue(); map.remove(username); } } @Override public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) { } public Map<String, HttpSession> getMap() { return map; } public void setMap(Map<String, HttpSession> map) { this.map = map; } }
Listenner监听类代码编写完成之后,Listenner需要在web.xml中进行配置:
<listener> <listener-class>*.MyListener</listener-class> </listener>
配置完成之后需要在登录成功的地方进行做用户信息的存放记录操作
request.getSession().setAttribute(LOGIN_TAG, userid);
LOGIN_TAG只是一个标识符而已,本人使用的全局常量控制
private static final String LOGIN_TAG = "login_user";
到此,就完成了我想要的效果,也感谢上一楼主。
除了HttpSessionAttributeListener,HttpSessionListener也非常有用,它是监听Session的创建与销毁的。