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("刷新");
}
}