zoukankan      html  css  js  c++  java
  • struts2-权限拦截器、日志拦截器、execAndWait(进度条)拦截器配置

    1.权限拦截器

    package login;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts2.ServletActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    
    public class LoginInterceptor extends AbstractInterceptor {
        private static final long serialVersionUID = 1L;
        @Override
        public String intercept(ActionInvocation ai) throws Exception {
            //取得请求的URL  
            String url = ServletActionContext.getRequest().getRequestURL().toString();  
            HttpServletResponse response=ServletActionContext.getResponse();  
            response.setHeader("Pragma","No-cache");            
            response.setHeader("Cache-Control","no-cache");     
            response.setHeader("Cache-Control", "no-store");     
            response.setDateHeader("Expires",0);  
            System.out.println("execute LoginInterceptor");
            //对登录与注销请求直接放行,不予拦截  
            if (url.indexOf("login.action")!=-1 || url.indexOf("logout.action")!=-1)
                {  
                    return ai.invoke();  
                }  
            else
            {  
                //验证Session是否过期  
                if(!ServletActionContext.getRequest().isRequestedSessionIdValid())
                    {  
                        //session过期,转向session过期提示页,最终跳转至登录页面  
                        return "tologin";  
                    }  
                else
                    {  
                        String systemUser =(String) ServletActionContext.getRequest().getSession().getAttribute("user");  
                        //验证是否已经登录  
                        if (systemUser==null)
                            {  
                                //尚未登录,跳转至登录页面  
                                return "tologin";  
                            }
                        else
                            {                      
                                return ai.invoke();                   
                            }                  
                    }              
            }  
            
        }
    
    }
    LoginInterceptor

    2.日志拦截器

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    import java.util.Set;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    import com.opensymphony.xwork2.interceptor.PreResultListener;
    public class DologInterceptor implements Interceptor {
        private static final long serialVersionUID = 1L;
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
        }
    
        @Override
        public void init() {
            // TODO Auto-generated method stub
        }
         LogDao ld=new LogDao();
        @Override
        public String intercept(ActionInvocation ai) throws Exception {
            ai.addPreResultListener(new PreResultListener() {
                              public void beforeResult(ActionInvocation ai, String arg1) {
                                  try {
                                          boolean param=true;
                                          System.out.println("execute DologIntercepter");
                                          OperateLog log=new OperateLog();
                                          long time=System.currentTimeMillis();
                                          log.setId(time);
                                          SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd H:m:s");
                                            String operatetime=format.format(new Date()).toString();
                                            log.setOperatetime(operatetime);
                                          Map<String, Object> session = ai.getInvocationContext().getSession();
                                          String user = (String) session.get("user");
                                          if (user != null) 
                                              {
                                                  log.setOperator(user);
                                              } 
                                          else 
                                              {
                                                  log.setOperator("operator:can't get form system");
                                              }
                                          String operation="className:" + ai.getAction() + " ";
                                          operation=operation+"methodName:" + ai.getInvocationContext().getName()+ " ";
                                          
                                          Map<String, Object> map = ai.getInvocationContext().getParameters();
                                          Set<String> keys = map.keySet();
                                          if (keys==null||keys.size()==0) 
                                              {
                                                param=false;
                                                System.out.println("parameters null");
                                              }
                                          else
                                              {
                                                  operation=operation+"Parameters:";
                                                  for (String key : keys) 
                                                      {
                                                          operation=operation+key + "=" + ((Object[]) map.get(key))[0]+ "#";
                                                      }
                                              }
                                          operation=operation+" executeResult:" + ai.getResultCode() + " ";
                                          log.setOperation(operation);
                                          if (param) 
                                              {
                                                  ld.save(log);
                                                  System.out.println("print the log object:"+log);
                                              }
                                  } 
                                  
                                  catch (Exception e) {
                                      e.printStackTrace();
                                  }
                  
                              }
                          });
                          return ai.invoke();
                      }
        }
    DologInterceptor

    3.execAndWait为struts2自带拦截器,这里不附源代码

    前台与execAndWait配合的页面代码:

    重点是: <meta http-equiv="refresh" content="3;url=generatePath.action">

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
        <title>My JSP 'indicate_waiting.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">   
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!-- 下面的meta元素才是重点,其他的没什么影响,是IDE自带的  -->
        <meta http-equiv="refresh" content="3;url=generatePath.action">
      <title> 正在查询,请稍等...</title>
    <style type="text/css">
    .query_hint{
        border:5px solid #939393;
        400px;
        height:50px;
        line-height:55px;
        padding:0 20px;
        position:absolute;
        left:40%;
        margin-left:-140px;
        top:30%;
        margin-top:-40px;
        font-size:15px;
        color:#333;
        font-weight:bold;
        text-align:center;
        background-color:#f9f9f9;
    }
    .query_hint img{position:relative;top:10px;left:-8px;}
    </style>
     </head>
    
     <body>
      <div id="query_hint" class="query_hint">
           <img src="images/waiting.gif" />正在执行查询,请稍等...<%-- <s:property value="complete"/> --%>
      </div>
    
    </html>
    indicate_waiting.jsp

    4.在struts.xml中对拦截器的配置

    <package name="generatepath" namespace="/" extends="struts-default">
            <interceptors>
            <!-- 定义权限控制拦截器 -->
            <interceptor name="loginVerify" class="login.LoginInterceptor"></interceptor>
            <!-- 定义日志拦截器 -->
            <interceptor name="dolog" class="dolog.DologInterceptor"></interceptor>
            <!-- 定义一个包含登陆控制和日志管理的拦截器栈 -->   
             <interceptor-stack name="mydefaultStack">
                   <interceptor-ref name="loginVerify"></interceptor-ref>
                   <interceptor-ref name="dolog"></interceptor-ref>
                   <interceptor-ref name="defaultStack"></interceptor-ref>
                  <interceptor-ref name="execAndWait">
                    <param name="delay">1000</param>
                    <param name="delaySleepInterval">1000</param> 
                  </interceptor-ref>
               </interceptor-stack>
            </interceptors>
            <!-- 定义默认拦截器 -->
            <default-interceptor-ref name="mydefaultStack"></default-interceptor-ref>
            <!-- 定义全局处理结果 -->
            <global-results>   
                <result name="tologin" type="redirect">/session.jsp</result>  
            </global-results> 
            <action name="generatePath" class="neo4j.PathIndicationAction" method="doIndicatePath">
                <result name="wait">/work/search/indicate_waiting.jsp</result>
                <result name="indicateResult">/work/search/pathIndication.jsp</result>
            </action>
    </package>
    View Code

    5.后台实现代码略。

  • 相关阅读:
    简直喝血!H.265要被专利费活活玩死
    python异常处理
    开始好好总结所学东西了,马上校招了~~
    pip 安装管理失败解决
    去除空格
    自定义开关(不带有滑动,只具有点击切换开关功能)
    Android-ViewPagerIndicator框架使用——TabPageIndicator以及样式的修改
    Android详细的对话框AlertDialog.Builder使用方法
    Fragment+FragmentTabHost组件实现常见主页面(仿微信新浪)
    Activity生命周期
  • 原文地址:https://www.cnblogs.com/gpdm/p/6000686.html
Copyright © 2011-2022 走看看