文档章节

保证用户唯一登录的思路

mifans
 mifans
发布于 2017/02/17 15:07
字数 318
阅读 150
收藏 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
粉丝 11
博文 203
码字总数 102329
作品 0
海淀
程序员
私信 提问
【PHP】微信开发 认识几点思路及知识,即可入门

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

RablePHP
2016/03/16
158
0
微信扫码登录网页实现原理

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

kisshua
2016/10/14
88
0
安全存储技术 - 老树洞

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

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

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

听着music睡
08/06
0
0
关于多标签浏览器中session共享引发的问题

关于多标签浏览器中session共享引发的问题 问题描述: 当在标签a中使用用户A登录后,再打开标签b,进入登录界面使用用户B再次进行登录。那么标签a中的登录信息就变成了用户B的登录信息。这种...

Java编程思想
2014/07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

myeclipse 启动到10分之一左右就挂了

删掉 {workspace}/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi

夜醒者
8分钟前
0
0
Hive on Spark 伪分布式环境搭建过程记录

进入hive cli是,会有如下提示: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) ......

PeakFang-BOK
15分钟前
0
0
用户输入和while 循环

# 用户输入和while循环# 7.1函数input() 的工作原理# 函数input() 让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在一个变量中,以方便你使用。message = inp...

吕湘颖
15分钟前
0
0
开发函数计算的正确姿势 —— 排查超时问题

写不尽的 code,查不完的 bug 通常我们写 bug,哦,不对,写代码时总不会一帆风顺,往往各种 bug 充斥其中,即使测试有较高的代码覆盖率往往也会有漏网之鱼。能写出一些比较隐蔽或者看起来像...

阿里云云栖社区
20分钟前
1
0
Python3新特性

一、类型注解 例子: def add(x:int, y:int) -> int: return x + y 解释: 类型`的形式指定函数的**参数类型**,用`-> 类型`的形式指定函数的**返回值类型 然后特别要强调的是,Pyt...

_Change_
34分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部