zoukankan      html  css  js  c++  java
  • Struts2拦截器

    简单了解拦截器 

     拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

    拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。 拦截器链,也被称为拦截器栈。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。

    Struts 2已经提供丰富多样的,功能齐全的拦截器实现。具体可以到struts2-core-2.3.16.jar包的struts-default.xml查看关于默认的拦截器与拦截器链的配置。

    如果想要使用struts2自带拦截器,只需要在应用程序struts.xml文件中将package中继承其中的struts-default,然后在action配置中,使用“<interceptor-ref name="xx" />”引用拦截器或拦截器栈。

    需要注意: 一旦package继承了struts-default,该package中所有的action都会调用拦截器栈 ——defaultStack。但是,如果在action配置中加入“<interceptor-ref name=”xx“ />”,默认的defaultStack拦截器栈将不起作用。

    这里测试记录登录日志的拦截器(使用方法一)----自定义拦截器使用

    自定义拦截器的三个方法:

    方法一:实现Interceptor接口

    方法二:继承AbstractInterceptor类

    方法三:继承MethodFilterInterceptor类

    LoginInterceptor.java
     1 package com.cy.interceptor;
     2 
     3 import java.util.Date;
     4 
     5 import org.apache.struts2.ServletActionContext;
     6 
     7 import com.cy.action.LoginAction;
     8 import com.cy.entity.User;
     9 import com.opensymphony.xwork2.ActionInvocation;
    10 import com.opensymphony.xwork2.interceptor.Interceptor;
    11 /**
    12  * 登录日志拦截
    13  * @author acer
    14  *
    15  */
    16 public class LoginInterceptor implements Interceptor {
    17 
    18     
    19     private static final long serialVersionUID = 1L;
    20 
    21     @Override
    22     public void destroy() {
    23     }
    24 
    25     @Override
    26     public void init() {
    27     }
    28 
    29     @Override
    30     public String intercept(ActionInvocation invocation) throws Exception {
    31         
    32         //获取目标对象
    33         LoginAction login=(LoginAction) invocation.getAction();
    34         System.out.println("拦截前:"+ new Date().getTime());
    35         String str= login.execute();//在该拦截器后没有其他拦截器的情况下调用
    36 //        invocation.invoke();//在该拦截器后有其他拦截器的情况下调用
    37         User user= (User) ServletActionContext.getRequest().getAttribute("user");
    38         if(user!=null){
    39             //记录登录日志
    40         }        
    41         System.out.println("拦截后:"+ new Date().getTime());
    42         return str;
    43     }
    44 
    45 }

    在struts.xml里的设置

     1  <!--定义拦截器 放在package里 并要求继承 struts-default -->
     2     <interceptors>
     3             <interceptor name="loginInterceptor" class="com.cy.interceptor.LoginInterceptor"></interceptor>
     4       <!--  <interceptor name="exitInterceptor" class="com.cy.interceptor.ExitInterceptor"></interceptor> -->
     5        
     6        <!-- 定义一个拦截器栈 -->
     7        <interceptor-stack name="logStack">
     8                 <interceptor-ref name="loginInterceptor"></interceptor-ref>
     9           <!--  <interceptor-ref name="exitInterceptor"></interceptor-ref>  -->
    10        </interceptor-stack>
    11     </interceptors>
    12     
    1  <action name="login" class="com.cy.action.LoginAction">
    2              <!-- 显示配置引用Struts2默认的拦截器 defaultStack -->
    3             <interceptor-ref name="defaultStack"></interceptor-ref>
    4             <!--自定义拦截器  -->
    5             <interceptor-ref name="loginInterceptor"></interceptor-ref>
    6         </action>

    LoginAction.java 部分代码;

     1 public String execute(){
     2         System.out.println("++"+user.getUserName());
     3         System.out.println("=="+user.getPassword());
     4     
     5         if(user.getUserName().equals("kitty")&&user.getPassword().equals("hello")){    
     6             ServletActionContext.getRequest().getSession().getAttribute("user");
     7             return SUCCESS;
     8         }
     9         else {
    10             return ERROR;
    11         }
    12         
    13     }

    显示结果:

  • 相关阅读:
    systemtap没找到函数变量
    systemtap get var of the tracepoing
    如何在tracepoint上注册函数
    stap中的entry函数
    stap用法
    在submit_bio处使用stapn
    巴达努斯
    perf事件的切换
    perf原理再看
    内存回收的阈值
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/5087439.html
Copyright © 2011-2022 走看看