文档章节

保证用户唯一登录的思路

mifans
 mifans
发布于 2017/02/17 15:07
字数 318
阅读 141
收藏 1

现在做的一块app 查药专家,需要限制用户唯一登陆,参考了网上的代码,简单实现了一下

实现HttpSessionAttributeListener ,监听addAtrribute事件

package com.kbs.platform.filter;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

import com.kbs.platform.base.MySessionContext;
import com.kbs.platform.vo.LoginedUser;
/**
 * 监听属性新增事件
 * @author kbs
 *
 */
public class SoleLoginListener implements HttpSessionAttributeListener {
	
	@Override
	public void attributeAdded(HttpSessionBindingEvent se) {
		 String name=se.getName();
		 if (name.equals("userInfo")) {
			 LoginedUser loginedUser=(LoginedUser) se.getValue();
			 if (MySessionContext.getUserInfo(loginedUser.getUserId())!=null) {
				//String oldSession= 
			//	MySessionContext.getSession(MySessionContext.getUserInfo(loginedUser.getUserId())).removeAttribute("userInfo");
				//MySessionContext.getSession(MySessionContext.getUserInfo(loginedUser.getUserId())).removeAttribute("userID");
				//MySessionContext.getSession(MySessionContext.getUserInfo(loginedUser.getUserId())).removeAttribute("user");
				MySessionContext.getSession(MySessionContext.getUserInfo(loginedUser.getUserId())).invalidate();
				MySessionContext.DelSession(MySessionContext.getSession(MySessionContext.getUserInfo(loginedUser.getUserId())));
			}
			 MySessionContext.addUserInfo(loginedUser.getUserId(), loginedUser.getSessionId());
		 }

	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent se) {
		 String name=se.getName();
		 if (name.equals("userInfo")) {
			 LoginedUser loginedUser=(LoginedUser) se.getValue();
			 MySessionContext.removeUserInfo(loginedUser.getUserId());
		 }
		
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent se) {
		// TODO Auto-generated method stub
		
	}

	

}

简单的保存信息的上下文

package com.kbs.platform.base;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpSession;

public class MySessionContext {
    private static Map<String, HttpSession> mymap = new HashMap<>();
    private static Map<Integer,String> loginedUser=new HashMap<>();
    public static synchronized void AddSession(HttpSession session) {
        if (session != null) {
            mymap.put(session.getId(), session);
        }
    }

    public static synchronized void DelSession(HttpSession session) {
        if (session != null) {
            mymap.remove(session.getId());
        }
    }

    public static synchronized HttpSession getSession(String session_id) {
        if (session_id == null)
        return null;
        return (HttpSession) mymap.get(session_id);
    }
    public static synchronized String getUserInfo(Integer userId){
    	if (userId==null) {
			return null;
		}
    	return  loginedUser.get(userId);
    };
    public static synchronized void addUserInfo(Integer userId,String sessionId){
    	loginedUser.put(userId, sessionId);
    }
    public static synchronized void removeUserInfo(Integer userId){
    	if (userId!=null) {
    		loginedUser.remove(userId);
		}
    }
  
}

web.xml配置

<listener>
	 <listener-class>
	      com.kbs.platform.filter.SoleLoginListener
	</listener-class>
	</listener>

基本可以实现.

包括上一篇的登录状态的保持,其实都可以在redis中实现.思路基本差不多

© 著作权归作者所有

共有 人打赏支持
mifans
粉丝 10
博文 203
码字总数 102329
作品 0
海淀
程序员
微信扫码登录网页实现原理

扫码登录操作过程 浏览器输入:https://wx.qq.com/?lang=zh_CN 手机登录微信,利用“扫一扫”功能扫描网页上的二维码 手机扫描成功后,提示“登录网页版微信”;网页上显示“成功扫描 请在手...

kisshua
2016/10/14
88
0
【PHP】微信开发 认识几点思路及知识,即可入门

【微信开发的基本知识】 以下几点,为本人自己总结,并不代表微信即使如此! 【首先】申请一个服务号是必须的!订阅号,建议开发者不要申请了。使用权限太少!申请一个服务号,然后认证,认证...

RablePHP
2016/03/16
158
0
安全存储技术 - 老树洞

老树洞(lsdong.com)安全存储技术特征解析 数据的安全存储涉及到三个存储环节:授权登录环境安全不可破解、传输过程安全不可破解、存储文件安全不可破解 老树洞安全存储采用微信二维码授权登录...

zhanghj123
05/16
0
0
环信easeui集成:用户昵称和用户头像总结2018

环信EaseUI 集成,集成不做描述,看文档即可,下面主要谈一些对easeui的个性化需求修改。 一、如何将App用户体系的用户名和用户头像 显示于环信的easeui   这个问题是所有人都想解决的,集...

听着music睡
08/06
0
0
一个账号同时只能在同一个设备上登陆

一个账号同时只能在同一个设备上登陆 redis 我用PHP实现一个账号只能同时在同一个设备登录,注意,不是同一个IP。 之前是在MYSQL的表中加了个显示是否登录了的字段,若登录了设置为1,退出设...

蜗牛奔跑
2016/11/14
25
0

没有更多内容

加载失败,请刷新页面

加载更多

【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
11
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部