springmvc单点登录

原理:

  • 用户A使用账号a在浏览器当中登录,然后用户B在另外一台电脑上的浏览器登录账号a,当用户B登录验证成功时,将会触

发登录监听类,在监听类当中判断出账号a已经被用户A登录,就把用户A的账号a 踢出去,此时当用户A操作页面,页面就会跳转到

登录页面。

代码实现:

  • 在实现过程中,用到LoginListenner监听类、login登录方法以及在web.xml中配置监听类
  • 当登录成功后,向session中放入登录成功的账号对象loginuser,触发LoginListenner中的attributeAdded事件,在这个事件中,

我们判断存放账号和session对应关系的map中是否有当前登录的账号的session,如果有我们就把该session从map中移除,同时注

销该session,然后把刚登录的账号和session放入map。

代码:package com.jk.util;

 

import java.util.HashMap;

import java.util.Map;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionAttributeListener;

import javax.servlet.http.HttpSessionBindingEvent;

 

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

 

import com.jk.entity.CodePw;

import com.sun.xml.bind.v2.runtime.Location;

/**

*

* <pre>项目名称:spring-mybatis

* 类名称:LoginListenner

* 类描述: 登录监听类-处理同一时间只允许账号,单地点登录

* 创建人:

* 创建时间:2016年10月29日 上午10:44:50

* 修改人:

* 修改时间:2016年10月29日 上午10:44:50

* 修改备注:

* @version </pre>

*/

public class LoginListenner implements HttpSessionAttributeListener {

/**

* 用于存放账号和session对应关系的map

*/

private Map<String, HttpSession> map = new HashMap<String, HttpSession>();

/**

* 当向session中放入数据触发

*/

public void attributeAdded(HttpSessionBindingEvent event) {

String name = event.getName();

System.err.println(name);

if (name.equals("adminUser")) {

CodePw user = (CodePw) event.getValue();

if (map.get(user.getUsercode()) != null) {

HttpSession session = map.get(user.getUsercode());

session.removeAttribute(user.getUsercode());

session.invalidate(); // 使得 session 失效

}

map.put(user.getUsercode(), event.getSession());

}

}

/**

* 当向session中移除数据触发

*/

public void attributeRemoved(HttpSessionBindingEvent event) {

String name = event.getName();

if (name.equals("adminUser")) {

CodePw user = (CodePw) event.getValue();

map.remove(user.getUsercode());

}

}

public void attributeReplaced(HttpSessionBindingEvent event) {

}

public Map<String, HttpSession> getMap() {

return map;

}

public void setMap(Map<String, HttpSession> map) {

this.map = map;

}

}

登录方法

120254_B8ca_2987337.png

web.xml

<!--一个用户只能在一个主机登录 -->

<listener>

<listener-class>com.test.util.LoginListenner</listener-class>

</listener>

<!-- 一个用户只能在一个主机登录 end-->

转载于:https://my.oschina.net/yaodongd/blog/777721

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值