java只允许一个账户在一个地方登录

package com.haikan.exam.web;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

import com.haikan.exam.bean.Account;
import com.haikan.exam.orm.Perclass;
import com.haikan.exam.orm.Percollege;
import com.haikan.exam.orm.Personnel;
import com.haikan.exam.service.LoginService;
import com.haikan.exam.service.UtilService;
import com.haikan.exam.service.impl.LoginServiceImpl;
import com.haikan.exam.util.Password;
import com.haikan.exam.util.Ways;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

 

/**
 * 管理员操作(Admin)
 * @author 蚂蚁国度
 *
 */
public class LoginAction extends ActionSupport implements ModelDriven<Personnel>,ServletRequestAware,ServletResponseAware,HttpSessionListener { 

 private static final long serialVersionUID = -2041553758270910723L;

 private HttpServletRequest request;
 private HttpServletResponse response;
 public void setServletRequest(HttpServletRequest request) {
  this.request = request;
 }
 
 public void setServletResponse(HttpServletResponse response) {
  this.response = response;
 }


 /**
  *  管理员模型
  */
 private Personnel model = new Personnel();
 //密码加密
 private Password passwoerd=new Password();
 //注入loginservice
 private LoginService  loginService;
 private int AdminroleId;
 private static Account  account = new Account();
 private UtilService utilService;
 private Ways ways = new Ways();
 public static List loginUserSave;
 private static String key = "";
 private int message;
 public UtilService getUtilService() {
  return utilService;
 }

 public void setUtilService(UtilService utilService) {
  this.utilService = utilService;
 }

 public int getAdminroleId() {
  return AdminroleId;
 }

 public void setAdminroleId(int adminroleId) {
  AdminroleId = adminroleId;
 }

 public LoginService getLoginService() {
  return loginService;
 }

 public void setLoginService(LoginService loginService) {
  this.loginService = loginService;
 }

 public void setModel(Personnel model) {
  this.model = model;
 }

 public Personnel getModel() {
  // TODO Auto-generated method stub
  return model;
 }
 
 @Override
 public String execute() throws Exception {
  // TODO Auto-generated method stub
  return super.execute();
 }
 
 public String loginActionback() throws Exception {
  
  if(loginUserSave==null){
   loginUserSave = new ArrayList();
  }
  /*// 删除ArrayList中的用户  ⑴
  Personnel p = (Personnel) request.getSession().getAttribute("PersonnelMessage");
     for (int i = 0; i < loginUserSave.size(); i++) {
         Account existAccount = (Account)loginUserSave.get(i);
         if(p.getId()==existAccount.getPersonnelId()){
         loginUserSave.remove(existAccount); 
         }
     }*/
  request.getSession().invalidate();
  return "errorLogin";
 }
 
 /**
  *   通过依赖注入AdminService组件实例
  */
 public String loginAction() throws Exception {
  
  
  System.out.println("管理员开始登录操作用户名 密码"+this.model.getUserName()+this.model.getPassWord()+this.model.getRoleId());
  // 保存到session中
  /*// 设置session不活动时间为10分*/
  /* request.getSession().setMaxInactiveInterval(60*3);*/
  String sessionId = request.getSession().getId().toString();
  /*account.setSessionId(sessionId);*/
  Cookie cookies[]=request.getCookies();
  /*for(int i=0;i<cookies.length-1;i++){    //用一个循环语句遍历刚才建立的Cookie对象数组
   Cookie  sCookie=cookies[i];   //取出数组中的一个Cookie对象
   String sname=sCookie.getName(); //取得这个Cookie的名字
   String svalue=sCookie.getValue(); //取得这个Cookie的内容
       if(sname.equals("cookieName")) {
        sCookie.setValue(sessionId);
       }
   } */
  if(loginUserSave==null) {
   loginUserSave = new ArrayList();
  }
     String  nowsIp = request.getRemoteHost().toString();
  System.out.println("过密保");//191 //
  String password=this.passwoerd.Md5(model.getPassWord());
  model.setPassWord(password);
  String  userName = model.getUserName();
  Integer  roleId = model.getRoleId();
  Personnel p = this.loginService.getOneUser(userName, this.model.getPassWord(), roleId);
  //判断是否已经登录   如果不同用户登录  覆盖前一个
   try {
   if(p.getId()!=null) {
    Personnel pget = (Personnel) request.getSession().getAttribute("PersonnelMessage");
    if(pget!=null) {
     if(!pget.getUserName().equals(model.getUserName())) {
      for (int i = 0; i < loginUserSave.size(); i++) {
             Account existAccount = (Account)loginUserSave.get(i);
             if(pget.getId()==existAccount.getPersonnelId()){
             loginUserSave.remove(existAccount); 
             }
         }
      if(p.getRoleId()!=3) {
         AdminroleId=p.getRoleId();
         request.getSession().setAttribute("PersonnelMessage",p);
         //设置学生session生命周期老师为10分钟
          request.getSession().setMaxInactiveInterval(60*15);
       }else {
          AdminroleId=p.getRoleId();
          request.getSession().setAttribute("PersonnelMessage",p);
          //设置学生session生命周期老师为10分钟
          request.getSession().setMaxInactiveInterval(60*60*24*5);
       }
     }
    }
    }else {
     return "errorLogin";
    }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   return "errorLogin";
  }
  
  Percollege percollege=(Percollege) this.utilService.selectById(Percollege.class, p.getPersonnelCollege());
  if(percollege==null) {
   return "errorLogin";
  }else if (percollege.getState().equals("删除")) {
   return "errorLogin";
  }
  Perclass perclass=(Perclass) this.utilService.selectById(Perclass.class, p.getPersonnelClass());
  if(perclass==null) {
   return "errorLogin";
  }else if(perclass.getState().equals("删除")) {
   return "errorLogin";
  }
  //角色为教师时判断
  else if (p.getRoleId()==1||p.getRoleId()==2) {
            account = new Account();
            account.setPersonnelId(p.getId());
            account.setRoleId(p.getRoleId());
            account.setIpstr(nowsIp);
         // 查看ArrayList中有没有该用户  如果有判断是否同一个人   是的话登录   不是提示不同重复登录
      for (int i = 0; i < loginUserSave.size(); i++) {
       Cookie cookie2 = ways.getcook(cookies);
          Account existAccount = (Account)loginUserSave.get(i);//5533
          if(account.getPersonnelId().equals(existAccount.getPersonnelId())){
           if(!(account.getIpstr().equals(existAccount.getIpstr()))) {
              message = 4;
           return "message";
           }else if (cookie2==null) {
             message = 4;
             return "message";
           }
           else if (!(cookie2.getValue().equals(existAccount.getSessionId()))) {
           message = 4;
           return "message";
           }
           else {
            return SUCCESS;//学院和超级
           }
          }
      }
      
      /*String cookieName="cookieName";
      Cookie cookie=new Cookie(cookieName, "");
      cookie.setMaxAge(60*60);   //存活期为10秒
      response.addCookie(cookie); */
      account.setSessionId(sessionId);
           loginUserSave.add(account);
           Cookie cookie=new Cookie("cookieName",sessionId);
           cookie.setMaxAge(60*60*24*5);   //存活期为11分钟
           response.addCookie(cookie);
           if(p.getRoleId()!=3) {
        AdminroleId=p.getRoleId();
        request.getSession().setAttribute("PersonnelMessage",p);
        //设置学生session生命周期老师为10分钟
         request.getSession().setMaxInactiveInterval(60*15);
      }else {
         AdminroleId=p.getRoleId();
         request.getSession().setAttribute("PersonnelMessage",p);
         //设置学生session生命周期老师为10分钟
         request.getSession().setMaxInactiveInterval(60*60*24*5);
      }
     return SUCCESS;//学院和超级
    }else {
      /*account = new Account();
      account.setPersonnelId(p.getId());
            account.setRoleId(p.getRoleId());
            account.setIpstr(nowsIp);
     for (int i = 0; i < loginUserSave.size(); i++) {
      Cookie cookie = ways.getcook(cookies);
          Account existAccount = (Account)loginUserSave.get(i);//5533
          if(account.getPersonnelId().equals(existAccount.getPersonnelId())){
           if(!(account.getIpstr().toString().trim().equals(existAccount.getIpstr().toString().trim()))) {
           if(!(cookie.getValue().equals(existAccount.getSessionId()))){
              message = 4;
           return "message";
           }else if (cookie==null) {
             message = 4;
             return "message";
           }
           
           else if (!(cookie.getValue().equals(existAccount.getSessionId()))) {
           message = 4;
           return "message";
           }
           else {
             return "StudentMain";//学生
           }
          }
      }
     account.setSessionId(sessionId);
           loginUserSave.add(account);
           Cookie cookie=new Cookie("cookieName",sessionId);
           cookie.setMaxAge(60*60*24*5);   //存活期为11分钟
           response.addCookie(cookie);*/
     if(p.getRoleId()!=3) {
        AdminroleId=p.getRoleId();
        request.getSession().setAttribute("PersonnelMessage",p);
        //设置学生session生命周期老师为10分钟
         request.getSession().setMaxInactiveInterval(60*15);
      }else {
         AdminroleId=p.getRoleId();
         request.getSession().setAttribute("PersonnelMessage",p);
         //设置学生session生命周期老师为10分钟
         request.getSession().setMaxInactiveInterval(60*60*24*5);
      }
          return "StudentMain";//学生
   }
 }

 public void sessionCreated(HttpSessionEvent arg0) {
  // TODO Auto-generated method stub
  
 }

 public void sessionDestroyed(HttpSessionEvent event) {
  Personnel p = (Personnel) event.getSession().getAttribute("PersonnelMessage");
  if(!(p==null)) {
    for (int i = 0; i < loginUserSave.size(); i++) {
          Account existAccount = (Account)loginUserSave.get(i);
          if(p.getId()==existAccount.getPersonnelId()){
           loginUserSave.remove(existAccount); 
          }
      }
  }
   
   
 }

 public void refurbish() {
  System.out.println("刷新");
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值