拦截器后台安全验证

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>

 

posted on 2017-06-19 15:40  栀骨辞  阅读(342)  评论(0编辑  收藏  举报

导航