拦截器介绍 拦截器 的使用 ,源自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>新闻热点
疑难解答