java异地登录 怎么解决_同一帐号异地登录
在此之前也看了很多同一帐号异地登录的,有的是采用后登录者必须等待前登录者释放后才可以登录,我的项目中要用到想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异地登录 怎么解决_同一帐号异地登录相关推荐
- java异地登录验证_同一帐号异地登录
在此之前也看了很多同一帐号异地登录的,有的是采用后登录者必须等待前登录者释放后才可以登录,我的项目中要用到想qq那样可以踢出,我具体的做法如下: LoginServelt.java 做登录使用 Onl ...
- 你的领英账号总被封?实战总结避免和解决领英帐号被封的最强攻略
领英作为全球最大的职场社交平台,它的属性关键词包括"商业.互动.机遇",这些属性覆盖在全球超过6亿领英用户身上,就决定了领英是一个蕴藏着无限商业成交机会的社交平台,所以才会有越来越 ...
- mysql 同一帐号多次登录_freeradius2.1.3 防止用户帐号重复登录
freeradius2.1.3 防止用户帐号重复登录 一.修改 etc/raddb/sites-enabled 目录中的default 及inner-tunnel 这两个文件中的 # Session ...
- java 504错误怎么解决_求助java.lang.NoClassDefFoundError怎么解决,报错信息如下
求助java.lang.NoClassDefFoundError怎么解决,报错信息如下 四月 14, 2018 11:03:07 上午 org.apache.catalina.startup.Embe ...
- SpringBoot+Shiro+ehcache实现登录失败超次数锁定帐号
文章目录 二.Controller层接收登录请求 三.自定义的Realm 四.密码验证器增加登录次数校验功能 五.ShiroConfig的配置类 六.EhCache 的配置 七.全局异常的配置 ### ...
- 利用Cache防止同一帐号重复登录
需求概要 对于B/S应用系统中客户经常会提出同一帐号不能重复登录的需求,就是说,用某一帐号登录系统后,在系统不超时的情况下,任何人都不能再用目前已登录的帐号登录系统.包括我目前的项目中同样有这一需 ...
- php curl登录,php curl实现第三方帐号登录
今天帮学院写了个小网站,根据要求要用数字沈航帐号登录,还没办法与数字沈航的工作人员交流,无奈想出了个使用curl这个解决方案. 数字沈航(http://i.sau.edu.cn)是我们学校全部数字服务 ...
- Android中实现帐号密码登录及进行内存缓存逻辑(仿QQ)
编写不易,如有转载,请声明出处:http://blog.csdn.net/zxc514257857/article/details/69219113 Demo效果展示如下: 布局代码如下: //(la ...
- springmvc+mybatis+shiro MD5加密匹配登录失败超次数锁定帐号
shiro的身份认证的流程,大致是这样的:当我们调用subject.login(token)的时候,首先这次身份认证会委托给Security Manager,而Security Manager又会委托 ...
最新文章
- 如何打造一流的视觉AI技术
- ajax对象状态0,ajax返回readyState为0?
- 非常漂亮的仿腾讯弹出层效果
- 用python画猫咪怎么画-Python海龟画图工具绘制叮当猫程序
- 漫谈架构师之路的修仙之法
- C++设计模式--简单工厂模式
- 520 页机器学习笔记!图文并茂可能更适合你
- 多值参数-元组和字典的拆包
- 解决Out of memory error (version 1.2-rc4 ‘Carnac‘ (298900 ... by android-jack-team@google.com)).
- 简单的web框架(python)
- Evolution Game DP
- L1-027. 出租-PAT团体程序设计天梯赛GPLT
- 2019计算机调剂困难,2019年研究生调剂困难程度远超想象
- 游戏模型提取工具ninjaripper_游戏模型 | 10巫战ZB围脖毛发制作
- 游戏开发 | 基于 EasyX 库开发经典90坦克大战游戏
- opencv小案例 --- 证件照背景替换
- 快速由WP8升级到WP8.1
- Qt摄像头热插拔实现
- 【opencv】图片拼接
- java开发手机app_java可以开发哪些软件