java中的sessionAttribute监听器

private static final String LOGIN_USER=“username”;
public void attributeAdded(HttpSessionBindingEvent hs) {
//属性监听器在使用session.setAttribute()时触发,判断用户时候重复登陆,或者异地登陆,需要过去用户名,这个时候用它是适合的
// // TODO Auto-generated method stub
String att=hs.getName();//获取属性名。当属性名为 用户名的时候,执行以下:
if(LOGIN_USER.equals(att)) {
String username=(String)hs.getValue();//获取属性值
HttpSession session=hs.getSession();//获取setAttribute 方法的 session对象
String sessionID=session.getId();
System.out.println(session.getId());

	String sessionID2=LoginCache.getInstance().getSessionIdByUserName(username);//自定义LoginCache 类,用于保存数据,代码在下面:
	
		if(null==sessionID2) {
			System.out.println("第一次登陆");
		}else {
		
		我们需要通过从表单中传过来的用户名来获取session,但是,我们我们需要通过sessionId是否存在这个属性来判断是否是同一个用户,如果在异地登陆的时候,通过用户名,可能判断是否为重复登陆,只需要看session是否为空即可,但是想要剔除之前的登陆,需要通过sessionID来获取之前的登陆,因为不同的浏览器 同一个账号sessionid不同,我们需要根据这个属性来区分当前登录和先前的登陆,从而剔除先前的session,而不是全部剔除。即通过用户名直接获取,会得到两个session
		
		这种方法可以剔除先前的登陆,清除之前的session,结合过滤器,可以将对方挤下线。
			System.out.println("第二次登陆");
			HttpSession session2 = LoginCache.getInstance().getSessionBySessionId(sessionID2);//获取前次该用户登录对应的session对象
			System.out.println(session2.getId());
			session2.invalidate();//清除之前的登陆session
			
		}
		
		LoginCache.getInstance().setSessionIdByUserName(username, sessionID);
		LoginCache.getInstance().setSessionBySessionId(sessionID, session);
		}

//Logincahe类代码
public class LoginCache {
private static LoginCache instance=new LoginCache() ;

public static LoginCache getInstance(){
	return instance;
}
public LoginCache() {
	
}
private Map<String,String> loginUserSessionId=new HashMap<String,String>();
private Map<String,HttpSession> loginSession=new HashMap<String,HttpSession>();



public String getSessionIdByUserName(String usename) {
	return loginUserSessionId.get(usename);
}

public 	HttpSession getSessionBySessionId(String sessionId) {
	return loginSession.get(sessionId);
}

public void setSessionIdByUserName(String username,String sessionId) {
	loginUserSessionId.put(username,sessionId);
}
public void setSessionBySessionId(String sessionId, HttpSession session) {
	loginSession.put(sessionId,session );
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值