java 单点登录
LoginListenner类
/**
*
* @ClassName: LoginListenner
* @Description: 登录监听类-处理同一时间只允许账号,单地点登录
* @date 2017年3月30日13:19:19
*
*/
public class LoginListenner implements HttpSessionAttributeListener {
/**
* 用于存放账号和session对应关系的map
*/
private Map<String, HttpSession> map = new HashMap<String, HttpSession>();
/**
* 当向session中放入数据触发
*/
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
String name = event.getName();
if (name.equals("singleUser")) {
User user = (User) event.getValue();
if (map.get(user.getName()) != null) {
HttpSession session = map.get(user.getName());
session.removeAttribute(user.getName());
session.invalidate();
}
map.put(user.getName(), event.getSession());
}
}
/**
* 当向session中移除数据触发
*/
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
String name = event.getName();
if (name.equals("singleUser")) {
User user = (User) event.getValue();
map.remove(user.getName());
}
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
}
public Map<String, HttpSession> getMap() {
return map;
}
public void setMap(Map<String, HttpSession> map) {
this.map = map;
}
}
web.xml文件
<listener>
<listener-class> cn.com.admin.test.listenner.LoginListenner</listener-class>
</listener>
登录请求方法需要修改的地方:
//把用户对象放入到session中,将会触发LoginListenner中的attributeAdded事件
request.getSession().setAttribute("singleUser", user)