拦截器interceptor

这个是过滤器的升级版,也是struts2中提供的最为强大的功能之一.
运行过程也是有web.xml触发,然后进入struts.xml中,分成了俩种,一种是执行默认的额拦截器,一种是执行用户自定义的过滤器和默认拦截器.然后action接受请求,并且返回响应,然后倒叙执行拦截器,最后返回页面.

默认拦截器的功能有:
工具类拦截器:
timer:记录ActionInvocation余下部分执行的时间,并且作为日志记录输出.
logger:在日志信息中输出哟啊执行的action信息.

属性拦截器:
params:收集请求中的函数.
static-params:把struts.xml中配置文件里定义的action参数,设置到对应的action实例中.
component:为action提供ioc框架的支持,为action设置他所以来的组件实例.
chain:讲前一个执行结束的action属性设置到当前的action中,他被使用在resultType中,分发到下一个action中.
conversionError:欧诺个来处理框架进行类型转化,所报出的错误信息,可以把错误栈显示出来.
servlet-config:提供action直接对servlet api的访问.
fileUpload:文件上传下载.

工作流拦截器:
workflow: workfol默认的工作流,如果action实现了validateable接口,那么interceptor会调用action的validate方法;如果validationAware接口,那么interceptor会使用hasEoor()检测是否包含错误信息,如果包含错误信息,那么会报出input错误,那么在struts.xml中配置.
validation:调用验证框架读取*-validation.xml文件.

自定义interceptor:
首先记住一个原则:interceptor必须是无状态的,并且不能够使用任何ActionInvocation提供范围以外的API(当然基本的Java的API是可以用的,主要是不能使用业务的API)。
原因在于interceptor实质上是AOP的Advice,所以设计的时候必须要能够满足AOP设计的正交性。无状态的意思就是要保证Interceptor的线程安全性。

//拦截器可以实现interceptor接口,或则继承acstractInterceptor
public class LoginInterceptor extends AbstractInterceptor{

@Override
public String intercept(ActionInvocation invocation) throws Exception {
    // TODO Auto-generated method stub
    //如果请求时直接到登陆页面的时候,直接放行
    System.out.println("---------------");
    if(invocation.getAction().getClass().equals(LoginAction.class)){
        return invocation.invoke();
    }else{
        //是否登陆
        Map<String,Object> session=invocation.getInvocationContext().getSession();
        String value=(String) session.get("login");
        if(null!=value&&!"".equals(value)){
            return invocation.invoke();
        }
        return "login";
        }
    }
}

在struts.xml中的配置:

  <interceptors>
     <interceptor name="loginInterceptor" 
     class="com.javakc.dbac.module.login.util.LoginInterceptor">
     </interceptor>            
     <interceptor-stack name="MyStack">
        <interceptor-ref name="loginInterceptor"/>
        <interceptor-ref name="defaultStack"/>
     </interceptor-stack>
  </interceptors>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值