package com.huiminSys.web;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.huiminSys.dao.LoginDao;
import com.huiminSys.entity.Login;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class VerifyLoginInterceptor extends AbstractInterceptor {
LoginDao loginDao=null;
Login login=new Login();
@Override
public String intercept(ActionInvocation ai) throws Exception {
// 获取当前正在运行的action的名字
String strActionName = ai.getInvocationContext().getName();
System.out.println(strActionName+"拦截器的动作------"+"开始执行登录Action的时间为:"+new Date());
if (strActionName.equals("Login_getOneLogin") || strActionName.equals("Log_doFilter")) {
// 放行
return ai.invoke();
}
// request对象
HttpServletRequest request = ServletActionContext.getRequest();
// session对象
HttpSession session = request.getSession();
// 验证结果
boolean verifyResult = true;
// 消息
String message = null;
// 验证登录标示
Integer userId = null;
if (verifyResult) {
userId = (Integer) session.getAttribute("cunid");
if (userId == null) {
verifyResult = false;
message = "请先登录。";
}
}
// 验证帐号有效性
if (verifyResult) {
login=loginDao.getOneLogin(userId);
if (login == null) {
verifyResult = false;
message = "无效帐号。";
}
}
// 验证不通过
if (!verifyResult) {
// 保存消息
request.setAttribute("message", message);
// 判断请求类型
String requestType = request.getHeader("X-Requested-With");
if ("XMLHttpRequest".equalsIgnoreCase(requestType)) {
// Ajax请求
// 到登录页面
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
return "dlym";
} else {
// 普通请求
// 到登录页面
System.out.println("cccccccccccccccccccccccccccccccccccc");
return "dlym";
}
}
// 保存当前登录用户对象
request.setAttribute("currentUser", login);
// 放行
System.out.println("bbbbbbbbbbbbbbbbbbbbbbbbb");
return ai.invoke();
}
public LoginDao getLoginDao() {
return loginDao;
}
public void setLoginDao(LoginDao loginDao) {
this.loginDao = loginDao;
}
public Login getLogin() {
return login;
}
public void setLogin(Login login) {
this.login = login;
}
}
//配置文件其他做安全验证的列表都继承这个配置文件的包名
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="all" extends="struts-default">
<interceptors>
<!-- 定义权限控制拦截器 -->
<interceptor name="authority"
class="com.huiminSys.web.VerifyLoginInterceptor" />
<!-- 定义一个包含权限控制的拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器 -->
<default-interceptor-ref name="mydefault" />
<!-- 定义全局处理结果 -->
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="dlym">/login.jsp</result>
</global-results>
</package></struts>