java 实现登录超时,Java-实现异地登陆和超时登陆

一、原理

1. 异地登陆

同一个账号,在不同的电脑(也可以不同的浏览器)登陆系统,前一个已经登陆的账号session被销毁,用户进行下一步操作时跳转错误页面。

2. 超时登陆

登陆后无操作*分钟后自动销毁session,用户进行下一步操作时跳转错误页面。

3. 区分

异地登陆和超时登陆起效时跳转的错误页面不相同。

二、实现

1. 超时登陆

由系统控制,在web.xml中配置,或者由监听器控制,利用session.setMaxInactiveInterval(interval);方法控制,本次主要展示在web.xml中配置的方法,如下:

30

2. 异地登陆

首先在Controller中判断登陆用户的账号密码是否正确,通过以后判断session是不是异地登陆(过程在监听器中判断,此处判断监听器处理后的返回值),如果是,session销毁,如下:

@RequestMapping("/loginCheck")

@ResponseBody

public Map loginCheck(HttpServletRequest request, String userLoginNumber, String userLoginPasswd) {

Map ret = new HashMap(2);// 存储错误信息的Map容器

String errorMsg = "";// 错误信息

HttpSession session = request.getSession();

/*

代码块,判断账号,并给errorMsg赋值或不赋值(正确)

*/

if (/* 账户判断成功,没有错误信息 */) {

/*

监听器实现HttpSessionListener和HttpSessionAttributeListener接口。

监听器private static一个Map类型的变量。

当监听到对Attribute操作时(登陆验证成功向session添加用户数据,一般都会用到),进入

HttpSessionAttributeListener.attributeAdded()方法,向公共map变量放入数据。

当监听到session销毁操作时,进入HttpSessionListener.sessionDestroyed()方法,将公共map

里的值移除。

LoginListenner.isLogonUser()就是得到map中存储的值

*/

HttpSession isLoginSession = LoginListenner.isLogonUser(userLoginNumber);

if (null != isLoginSession) {// 如果没有,则当前session是一个新的session,之前的session已经销毁

// 异地登陆: 在监听器中区分超时和异地登陆, 在拦截器中判断

isLoginSession.setAttribute("sessionDestroyedStatus", "busy");

isLoginSession.invalidate();// 表示异地登陆,销毁session

}

ret.put("result", "1");

}

return ret;

}

监听器实现(原理在上面),包括区分异地登陆和超时登陆需要跳转不同页面的处理,过程如下:

import java.util.HashMap;

import java.util.Map;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionAttributeListener;

import javax.servlet.ht

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值