Struts2---拦截器

来源:互联网 发布:果蔬清洗机有用吗 知乎 编辑:程序博客网 时间:2024/05/19 13:56

拦截器介绍
拦截器 的使用 ,源自Spring AOP(面向切面编程)思想
拦截器 采用 责任链 模式
* 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。
* 责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行

在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )

1、 struts2 所有拦截器 都必须实现 Interceptor 接口
2、 AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现

所有实际开发中,自定义拦截器 只需要 继承 AbstractInterceptor类, 提供 intercept 方法实现

3、 常用struts2 拦截器

    <interceptor-ref name="modelDriven"/> 模型驱动    <interceptor-ref name="fileUpload"/> 文件上传    <interceptor-ref name="params"> 参数解析封装     <interceptor-ref name="conversionError"/> 类型转换错误    <interceptor-ref name="validation"> 请求参数校验    <interceptor-ref name="workflow"> 拦截跳转 input 视图
使用Filter 进行权限控制 ---- 过滤所有web请求 (所有web资源访问)使用拦截器 进行权限控制 ---- 主要拦截对Action访问  (不能拦截JSP)

配置拦截器
方式一

<!-- 注册拦截器 -->        <interceptors>            <interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>        </interceptors>        <action name="book_*" class="cn.itcast.action.BookAction" method="{1}" >            <!-- 使用拦截器 -->            <!-- 当使用自定义拦截器 后,默认拦截器 就会失效  -->            <interceptor-ref name="defaultStack"></interceptor-ref>            <interceptor-ref name="privilege"></interceptor-ref>        </action>
方式二
<!-- 注册拦截器 -->        <interceptors>            <interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>            <!-- 自定义拦截器栈 -->            <interceptor-stack name="privilegeStack">                <interceptor-ref name="defaultStack"></interceptor-ref>                <interceptor-ref name="privilege"></interceptor-ref>            </interceptor-stack>        </interceptors>        <!-- 设置当前包 所有Action 都使用 自定义拦截器栈 -->        <default-interceptor-ref name="privilegeStack"></default-interceptor-ref>
0 0
原创粉丝点击