[java]Struts2防止用户重新登陆的实现
来源:互联网 发布:腾讯何时优化吃鸡 编辑:程序博客网 时间:2024/04/30 19:34
防止重复登陆的思路就是:判断session中用户的值(比如;用户名、用户id等)是否存在,如果存在,则提示用户此账户已登陆,类似QQ的重复登陆功能。
实现如下:(此类已经在项目中运行,代码拷贝至实际的项目,稍微修改即可)
①SessionListener,该listener实现 HttpSessionListener接口
import javax.servlet.http.*; import java.util.*; public class SessionListener implements HttpSessionListener{ @SuppressWarnings("unchecked") private static java.util.Hashtable hUserName = new Hashtable(); public void sessionCreated(HttpSessionEvent se){ System.out.println( "客户端已连接服务器 --会话号为: " + se); } public void sessionDestroyed(HttpSessionEvent se){ hUserName.remove(se.getSession()); System.out.println( "用户会话已失效session -- " + se); } @SuppressWarnings("unchecked") public synchronized static boolean isLogined(HttpSession session,String user_id1,String user_name){//(踢掉先登陆者再抢)是否该帐户已经在使用Action调用 boolean flag = false; if(hUserName.containsKey(user_id1)){ flag = true; HttpSession vsession = (HttpSession)hUserName.get(user_id1); try { vsession.invalidate();//踢掉先登陆者 System.out.println("用户 - " + user_name + " || 已存在 - " +session); System.out.println("用户 - " + user_name + " || 被挤掉了"); } catch (Exception ex){} } else{ flag = false; } hUserName.remove(user_id1); hUserName.remove(user_name); if(flag==false){//如果没有登陆则在哈西表中记录 hUserName.put(user_id1,session); System.out.println("用户已经登陆: - " + user_name + " || 会话号为: - " +session); } return flag; } }
②登陆Action调用如下:
public String userLogin() { String username = ""; String realname = ""; try { listAllUser = userService.userLogin(user.getUsername(), Password .createPassword(getPassword())); } catch (Exception e) { e.printStackTrace(); } Iterator<OrderUser> rs = listAllUser.iterator(); HttpSession session = ServletActionContext.getRequest().getSession(); if (listAllUser.size() != 0) { while (rs.hasNext()) { OrderUser user = rs.next(); session.setAttribute("username", user.getUsername().toString() .trim()); session.setAttribute("realname", user.getName().toString() .trim()); session.setAttribute("id", user.getId().toString().trim()); Timestamp d = new Timestamp(System.currentTimeMillis()); user.setLoginTime(d); userService.update(user); System.out.println("MD5验证4" + Password.authenticatePassword(user.getPassword(), getPassword())); username = user.getUsername().toString().trim(); realname = user.getName().toString().trim(); // 判断是否冻结账户 if (user.getStatus().equals("冻结")) { return "dongjie"; } // }else{ // return SUCCESS; // } } boolean flag = SessionListener.isLogined(session, username, realname); if (flag == true) { return "isloged"; } else { System.out.println("用户正常登陆"); } return SUCCESS; } else { return INPUT; } }
③web.xml配置部分如下:
<listener> <listener-class>com.yaxing.util.SessionListener</listener-class> </listener>
④struts.xml配置部分如下:http://jiaxingbailing.com sducc1122
<action name="userLogin" class="userBean" method="userLogin"> <result name="success">/web/Index.html</result> <result name="input">/web/loginFailure.jsp</result> <result name="dongjie">/web/dongjie.jsp</result> <result name="isloged">/web/loged.jsp</result> </action>
⑤提示js 如下:
<body> <script type="text/javascript"> alert("你的账号已经登录!"); </script> <% response.setHeader("refresh","0;URL = ../web/Index.html"); %> </body>
- [java]Struts2防止用户重新登陆的实现
- Struts2防止用户重新登陆的实现
- 防止用户重复登陆的验证方法
- 防止用户重复登陆
- Struts2+Jquery+Json实现用户登陆
- Hibernate+Struts2+Ajax实现用户登陆验证
- Struts2 + Hibernate实现用户登陆功能
- struts2+Hibernate实现用户登陆功能
- Struts2+jQuery+Json 实现用户登陆
- 利用临时表实现用户重新登陆【转】
- ASP.NET(c#)实现防止同一用户同时登陆
- ASP.NET2.0实现防止同一用户同时登陆
- ASP.NET 2.0实现防止同一用户同时登陆
- 使用asp.net实现防止用户多点登陆
- java基础实现简单的用户登陆功能
- 实现用户登陆的Servlet
- WebWork实现用户的登陆
- Android登陆用户的实现
- SOM自组织神经网络
- Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.解决方法
- 批处理关机命令
- mysql 实现远程访问,phpmyadmin实现远程连接mysql
- [TED] 在用户空间Debug kernel
- [java]Struts2防止用户重新登陆的实现
- BO3.1Script
- Android webkit image的加载过程解析(二)
- 交流群里遇到的一个小问题
- 解决“Unable to get debug signature key”的办法
- EPOLLIN和EPOLLOUT究竟什么时候触发?
- C++父类定义虚函数其派生类的同名函数使用virtual关键字吗?
- [JAVA]Hibernate 有选择性的更新--控制insert和update语句
- C#版二维码生成器附皮肤下载