在此之前也看了很多同一帐号异地登录的,有的是采用后登录者必须等待前登录者释放后才可以登录,我的项目中要用到想qq那样可以踢出,我具体的做法如下:

LoginServelt.java 做登录使用

OnlineUserListener.java 做session超时清理工作

LogValidata.java 做权限验证

logout.jsp做退出

LoginServelt.java public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

HttpSession session=request.getSession();

String username=request.getParameter("username");

String password=request.getParameter("password");

ServletContext sc=this.getServletContext();

String sessionId=session.getId();

String path= request.getContextPath();

Map onlineUserMap=(Map)sc.getAttribute("onlineUserMap");

//如果是首个用户登录,onlineUserMap为空,new一个

if(onlineUserMap==null){

onlineUserMap=new HashMap();

}

if(username!=null || password!=null){

onlineUserMap.put(username.trim(), sessionId);

sc.setAttribute("onlineUserMap",onlineUserMap);

//设置username,因为这个唯一的,作为key

session.setAttribute("username", username);

response.sendRedirect(path+"/success.jsp");

}else{

response.sendRedirect(path+"/index.jsp");

}

}

OnlineUserListener.java

public class OnlineUserListener implements HttpSessionListener {

public void sessionCreated(HttpSessionEvent event) {

}

public void sessionDestroyed(HttpSessionEvent event) {

HttpSession session = event.getSession();

Map onlineUserMap=(Map)session.getServletContext().getAttribute("onlineUserMap");

if(onlineUserMap!=null){

onlineUserMap.remove(session.getId());

session.getServletContext().setAttribute("onlineUserMap", onlineUserMap);

}

}

}

LogValidata.java

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {

HttpServletRequest request=(HttpServletRequest)arg0;

HttpServletResponse response=(HttpServletResponse)arg1;

ServletContext sc=request.getSession().getServletContext();

String username=(String)request.getSession().getAttribute("username"); Map onlineUserMap=(Map) sc.getAttribute("onlineUserMap");

String sessionId=request.getSession().getId();

String path= request.getContextPath();

//onlineUserMap==null 说明还没有用户登录过

//username==null 说明该用户超时或未登录

if(onlineUserMap!=null && username!=null ){

//获取sessionId String id=(String) onlineUserMap.get(username);

if(id!=null && id.trim().equals(sessionId)){

//取得sessionId与当前相等,说明此用户在使用状态 arg2.doFilter(request,response);

}else{

//说明已经被提出

response.setCharacterEncoding("gb2312");

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("");

out.flush();

out.close();

} }else{

//说明未登录

response.setCharacterEncoding("gb2312");

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("");

out.flush();

out.close();

}

}

logout.jsp

String username=(String)request.getSession().getAttribute("username");

Map onlineUserMap=(Map) application.getAttribute("onlineUserMap");

if(onlineUserMap!=null && username!=null){

onlineUserMap.remove(username);

}

session.invalidate();

%>

location.href="login.jsp";

posted on 2009-06-10 23:40 e寒-modify 阅读(236) 评论(0)  编辑  收藏

java异地登录 怎么解决_同一帐号异地登录相关推荐

  1. java异地登录验证_同一帐号异地登录

    在此之前也看了很多同一帐号异地登录的,有的是采用后登录者必须等待前登录者释放后才可以登录,我的项目中要用到想qq那样可以踢出,我具体的做法如下: LoginServelt.java 做登录使用 Onl ...

  2. 你的领英账号总被封?实战总结避免和解决领英帐号被封的最强攻略

    领英作为全球最大的职场社交平台,它的属性关键词包括"商业.互动.机遇",这些属性覆盖在全球超过6亿领英用户身上,就决定了领英是一个蕴藏着无限商业成交机会的社交平台,所以才会有越来越 ...

  3. mysql 同一帐号多次登录_freeradius2.1.3 防止用户帐号重复登录

    freeradius2.1.3 防止用户帐号重复登录 一.修改 etc/raddb/sites-enabled 目录中的default 及inner-tunnel 这两个文件中的 #  Session ...

  4. java 504错误怎么解决_求助java.lang.NoClassDefFoundError怎么解决,报错信息如下

    求助java.lang.NoClassDefFoundError怎么解决,报错信息如下 四月 14, 2018 11:03:07 上午 org.apache.catalina.startup.Embe ...

  5. SpringBoot+Shiro+ehcache实现登录失败超次数锁定帐号

    文章目录 二.Controller层接收登录请求 三.自定义的Realm 四.密码验证器增加登录次数校验功能 五.ShiroConfig的配置类 六.EhCache 的配置 七.全局异常的配置 ### ...

  6. 利用Cache防止同一帐号重复登录

      需求概要 对于B/S应用系统中客户经常会提出同一帐号不能重复登录的需求,就是说,用某一帐号登录系统后,在系统不超时的情况下,任何人都不能再用目前已登录的帐号登录系统.包括我目前的项目中同样有这一需 ...

  7. php curl登录,php curl实现第三方帐号登录

    今天帮学院写了个小网站,根据要求要用数字沈航帐号登录,还没办法与数字沈航的工作人员交流,无奈想出了个使用curl这个解决方案. 数字沈航(http://i.sau.edu.cn)是我们学校全部数字服务 ...

  8. Android中实现帐号密码登录及进行内存缓存逻辑(仿QQ)

    编写不易,如有转载,请声明出处:http://blog.csdn.net/zxc514257857/article/details/69219113 Demo效果展示如下: 布局代码如下: //(la ...

  9. springmvc+mybatis+shiro MD5加密匹配登录失败超次数锁定帐号

    shiro的身份认证的流程,大致是这样的:当我们调用subject.login(token)的时候,首先这次身份认证会委托给Security Manager,而Security Manager又会委托 ...

最新文章

  1. 如何打造一流的视觉AI技术
  2. ajax对象状态0,ajax返回readyState为0?
  3. 非常漂亮的仿腾讯弹出层效果
  4. 用python画猫咪怎么画-Python海龟画图工具绘制叮当猫程序
  5. 漫谈架构师之路的修仙之法
  6. C++设计模式--简单工厂模式
  7. 520 页机器学习笔记!图文并茂可能更适合你
  8. 多值参数-元组和字典的拆包
  9. 解决Out of memory error (version 1.2-rc4 ‘Carnac‘ (298900 ... by android-jack-team@google.com)).
  10. 简单的web框架(python)
  11. Evolution Game DP
  12. L1-027. 出租-PAT团体程序设计天梯赛GPLT
  13. 2019计算机调剂困难,2019年研究生调剂困难程度远超想象
  14. 游戏模型提取工具ninjaripper_游戏模型 | 10巫战ZB围脖毛发制作
  15. 游戏开发 | 基于 EasyX 库开发经典90坦克大战游戏
  16. opencv小案例 --- 证件照背景替换
  17. 快速由WP8升级到WP8.1
  18. Qt摄像头热插拔实现
  19. 【opencv】图片拼接
  20. java开发手机app_java可以开发哪些软件

热门文章

  1. 3D游戏建模好学吗?
  2. 第四课 DedeCMS仿站修改模板内容
  3. IdeasToComeTrue
  4. Latex 文献引用不显示的问题
  5. Linux touch命令
  6. 南邮计算机控制系统性能分析实验报告,南京邮电大学计算机组成原理考前复习...
  7. (PC+WAP)织梦模板大理石瓷砖建材类网站
  8. 《刀剑封魔录》原创全攻略 二
  9. MATLAB:对于状态空间方程的系统辨识
  10. IDEA断点调试技巧,多张动图包教包会。