Hello, 我是Shendi, 这次我给大家带来了 JavaWeb登录 限制登录 防踢  挤下线的功能实现

如题,很简单,我们需要编写一个Filter,就叫LoginFilter  实现javax包下的Filter接口,并且 实现方法

public class LoginFilter implements Filter {public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {}
}

在web.xml中配置Filter 过滤器(或者用注解的方式)

filter-class是对应的类 在Eclipse中写好后按Ctrl+鼠标左键能点进此类的话则没问题
<filter><filter-name>LoginFilter</filter-name><filter-class>shendi.filter.LoginFilter</filter-class>
</filter>
这里的filter-name与上面定义的要一致 url-pattern是映射的路径 /是所有,也就代表了这个项目的所有路径都会执行这个filter
<filter-mapping><filter-name>LoginFilter</filter-name><url-pattern>/</url-pattern>
</filter-mapping>

配置好后现在就可以写功能了

首先,我们要限制登录的话则需要判断用户是否登录没,这里就需要用到 session

在用户登录成功后将 account存入 session

req.getSession().setAttribute("account", value);

这样, 我们就能很简单在过滤器中判断 是否有此session 如果没有就代表没有登录

public class LoginFilter implements Filter {public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) response;String account = (String) req.getSession().getAttribute("account");if (account == null) {System.out.println("您没有登录,请登录!");return;}//放行chain.doFilter(request, response);}
}

这样就实现了限制登录

但是 如果想要实现有两个用户用同一个账号登录,先登录的应该被挤下线或者后登陆的登录不上则这样达不到效果

因为用的是session,所以每个用户的session中都会有个sessionid, 要实现踢下线或者防踢的效果则

要实现挤下线的效果:使用一个HashMap<String,String>,利用HashMap的唯一性,登录后将key(账号),value(sessionid)添加进HashMap,然后只需要在LoginFilter中判断此账号对应的sessionid是否相同,不相同则重新登录.

//登陆的类 登录操作 将账号和sessionId保存到map中
String account = 用户的账号;
String sessionId = request.getSession().getId();
map.put(account,sessionId);//LoginFilter中 实现挤下线的代码
private static HashMap<String,String> map = new HashMap<String,String>();
public static HashMap<String,String> getMap() {return map;
}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;//先判断是否登录了String account = (String) req.getSession().getAttribute("account");if (account == null) {System.out.println("您没有登录,请登录!");return;}String mapSessionId = map.get(account);//如果map里没有Sessionid则放行if (mapSessionId == null) {chain.doFilter(request, response);return;}String sessionId = req.getSession().getId();//判断Sessionid是否相同 不同则代表被挤出if (!mapSessionId.equals(sessionId)) {System.out.println("您的账号已被他人登录,请重新登录!");return;}//放行chain.doFilter(request, response);}

 要实现防挤的效果:使用HashMap<String,String>,在用户登录的时候直接判断是list里是否有此账户,有的话则不予登录,不需要在过滤器中进行操作了.因为简单,这里就不列代码了

上面只列出简单的用法的代码,如果 对你有帮助的话,点个赞再走吧~

Java用Filter制作登录限制-踢下线防踢等相关推荐

  1. android 表格xml,【Android】利用表格布局,Android中xml文件与java的交互制作登录界面...

    登录界面是图形编程.网页编程的一个经典而又基础的程序. 在安卓中,如图所示一个基本登录界面: 点击取消按钮就关闭这个程序,点击登录按钮则显示用户输入的用户名与密码. 一.基本布局 这个程序利用到安卓中 ...

  2. 无线黑名单实现(将终端踢下线同时禁止终端再次连接)

    前言 在实际中我们有时候会产生这样一个需求:进制某一台设备接入无线网络,如果已经接入 则让其强制下线.并且,下线后不能再次接入,除非放行该设备 这里产生了两个需求:1.将终端设备踢下线. 2.不能让终 ...

  3. 单人登录-踢下线功能实现

    单人登录-踢下线功能实现 功能描述: 用户在不同会话层登录账号会将之前的账户状态注销,同一时间只有一个用户在线. 实现:servlet+redis, 1.由于session的存储形式类似于key-va ...

  4. java springmvc权限校验_详解Spring MVC使用Filter实现登录及权限验证判断

    登录和权限验证判断在后台管理系统中是最常用的功能,这部分代码是比较固定和独立的,为了减少对业务代码入侵性,一般我会考虑使用Filter来实现,下面我就来详细说一下我的实现思路和代码: 前台页面: St ...

  5. Android单点登录,互踢下线代码实现

    Android单点登录,互踢下线代码实现 分享一个在项目中必然会用到的小功能--单点登录,也就是我们常说的互踢下线. 国际惯例,先上效果图 一.先说逻辑,其实挺简单 ​ 首先,对于监听账号是否在其他设 ...

  6. 【Shiro】7、Shiro实现控制用户并发登录并踢人下线

    在传统的项目中,同一账户是允许多人同时登录在线的,有的使用场景恰恰是不允许多人同时在线的,那么我们可以通过 Shiro 来控制并发登录,并实现后登录的用户,挤掉前面登录的用户 1.并发登录过滤器 pa ...

  7. SpringBoot集成单点登录-“被挤下线”

    SpringBoot配置单点登录 前言 你好,未来!上个周末过的还行,逛街逛到腿发软,生活还是要有仪式感,一生要待自己待你最亲近的人.周一休息,顺便看了看04版天龙八部,塑造了三位英雄人物,共同点:热 ...

  8. java nodefilter类,Java Servlet Filter过滤器概述

    Java Servlet Filter过滤器概述 Filter是Servlet的过滤器,是Servlet 2.3规范中新增加的一个功能,主要用于完成一些通用的操作,如编码的过滤.判断用户的登录状态等. ...

  9. 【JAVA】网页版登录注册系统2.0

    前言 JAVA实现网页的登录与注册2.0版 一.环境的搭建 导入1.0版本的项目Java实现网页版登录注册系统-Java文档类资源-CSDN文库可参考[JAVA]网页版登录注册系统_Lx_Hy_的博客 ...

最新文章

  1. mysql同时购买两种商品_SQL题1——查询所有购入商品为两种或两种以上的购物人记录...
  2. 安装翻译_【现象】面对日益增多的外国人 日本安装远程翻译设施
  3. java exec mvn_maven---常用插件之EXEC
  4. sap 供应商表_SAP系统玩阴的?
  5. php的api数据接口书写实例
  6. [Coci2015]Divljak
  7. 开工利是!循序渐进~
  8. CSS3知识点总结---transitionend
  9. 挨踢部落故事汇(9):女程序媛的开发梦
  10. xp计算机硬盘东西不显示,XP系统中认不到移动硬盘怎么办?XP系统无法识别移动硬盘解决方法...
  11. Shell 脚本:DDNS for aliyun
  12. html文档怎么设置默认浏览器打开,win10系统如何设置HTML文件指定浏览器打开?...
  13. 长春甲骨文华育兴业|大数据社会的十三大具体应用场景
  14. Unity技术手册-编辑器基础入门万字大总结
  15. ios开发 服务器通信协议,iOS开发网络篇—HTTP协议
  16. KB 与 kb 的区别
  17. Apple pencil 无法连接到ipad的解决办法汇总
  18. python 天勤 金叉 编程代码_GitHub - Oscar201106/tqsdk-python: 天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易...
  19. Alax技术实现的基本原理——XMLHttpRequest对象的使用
  20. 家庭NAS服务器(1)服务器的配置与选择

热门文章

  1. 联发科营收复苏,但重回辉煌不容易
  2. excel通用导出工具类
  3. 第三章 安全工程与架构 CISSP备考流水账
  4. AIGC 存储内容安全解决方案
  5. 公众号开发(一) -- 准备工作
  6. 摄像头在线测试_9月19日组织心理咨询专业技能考试系统测试
  7. 离职前,该不该把所有的不满告诉领导?
  8. vue 设置背景颜色及透明度
  9. C语言程序练习,某团购网某自助烤肉店周年庆。正常自助58元一位。周年庆团购,团购人数越多打折越多
  10. 单片机设计_液晶滚动显示(AT89C51、LCD1602)