struts2+spring防止用户重复登录(单点登录)


所有人都知道用户登录session是一个很好的选择,而且几乎都是用的session,但是session是不能跨窗口使用的,每打开一个浏览器,系统会赋予一个新的sessionID,而每个sessionID是不同的,也就是说你每次登录用的都是不同的session,而不是你之前登录使用的那个。那么如果你要在全域只能使用一个用户ID,那怎么办呢?

我们可以通过自定义一个sessionListener,用这个sessionListener实现HttpSessionAttributeListener,实现该接口需要实现三个方法,attributeAdded、attributeRemoved、attributeReplaced。在这里我们只需实现前两个方法。首先我们用一个list容器装当前已经登录的用户,接着在其他用户登录的时候判断是否为之前已经登录的用户,如果该用户已经登录,你可以选择友情提示该用户已经登录,你也可以直接将前面已经登录的用户挤出去,用当前登录用户。

具体代码如下:

public class sessionListener implements HttpSessionAttributeListener{
	public static List list = new ArrayList();  

	public void attributeAdded(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub
		if(arg0.getName().equals("user")||arg0.getName().equals("backUser")){
			User user=(User)arg0.getValue();
			list.add(user);
		}

	}

	public void attributeRemoved(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub
		 try {
	            int n = 0;
	            User u = (User) arg0.getValue();
	            for (int i = 0; i < list.size(); i++) {
	                User user = (User) list.get(i);
	                if (u.getId().equals(user.getId())) {
	                    n = i;
	                    break;
	                }
	            }
	            list.remove(n);
	        } catch (Exception e) {
	        }
	}

	public void attributeReplaced(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub

	}

	}

判断用户是否重复登录方法:

 //是否重复登录的封闭方法
    public static boolean getRepeat(Long userId) {
        boolean flag = false;
        List list = sessionListener.list;
        for (int i = 0; i < list.size(); i++) {
            User user = (User) (list.get(i));
            if (userId.equals(user.getId())) {
                flag = true;
            }
        }
        return flag;
    }  
时间: 2024-11-10 08:05:12

struts2+spring防止用户重复登录(单点登录)的相关文章

spring cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: Java代码   /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) pu

Spring Cloud云架构 SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) public Resp

(十三) 整合spring cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) public Resp

整合spring cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) public Resp

Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的登录认证):  上面的图很清楚的描述了当前登录login的流程,现在我们针对于login做成相关的微服务,解析如下: 请求方式:POST服务URL: http://localhost:8080/user/login参数类型:application/jsonHeaders: Content-Type:

整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的登录认证): 上面的图很清楚的描述了当前登录login的流程,现在我们针对于login做成相关的微服务,解析如下:请求方式:POST服务URL: http://localhost:8080/user/login参数类型:application/jsonHeaders: Content-Type: a

整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的登录认证): 上面的图很清楚的描述了当前登录login的流程,现在我们针对于login做成相关的微服务,解析如下: 请求方式:POST服务URL: http://localhost:8080/user/login参数类型:application/json Headers: Content-Type:

统一协同工作平台用户管理、单点登录以及任务集成接口说明

目录 1 概述 西北油田分公司信息化经过长期建设,在各个业务点上,逐步搭建了适应业务管理的信息化系统,为分公司经营管理提供了强大的信息化辅助管理支撑. 但是,分公司前期建设的信息化系统都是基于传统办公自动化OA,目前逐步形成了多个单独业务系统组成的OA,如公文.合同.招投标.预结算等系统,这些系统之间没有统一的技术和数据标准,数据不能自动传递和共享,流程控制和标准多样化,从而形成了一个个彼此隔离的信息孤岛. 在此背景上,西北油田分公司搭建了一套整合分公司各种信息资源库的协同工作平台,形成统一.综

Asp.net中实现同一用户名不能同时登录(单点登录)

Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中: 登录后的用户名放到Session中: 登录后的用户名放到Application中: 登录后的用户名放到Cache中. 一般的这几种方法都是登录了之后,如果没有正常退出,第二次登录将不被允许.这样一般都会存在一个问题:如果用户没有正常退出系统,那么他接下来继续登录的时候,因为Session没有过期等问题,会被拒绝继续登录系统,只能等待Session过期后