Struts2 自定义拦截器(方法拦截器)

一、实现Interceptor接口 
1 public interface Interceptor extends Serializable{
2    public void init();
3    public void destroy();
4    public String intercept(ActionInvocation invocation)();
5 } 

并实现上述方法。

二、继承AbstractInterceptor类,重写intercept()方法即可
此方法更可行,其实AbstractInterceptor类也就是实现了Interceptor接口。
  1. invocation.invoke();表示该方法执行完后执行Action的execute()方法或者执行下一个拦截器。
  2. invocation.getAction(); 可以将该法强制转换为Action的类类型。
三、方法拦截器:继承MethodFilterInterceptor类,重写doIntercept()方法
MethodFilerInterceptor实现方法过滤中用到的两个参数。

execludeMethods:该参数指定拦截器拒绝拦截的方法列表,多个方法用“,”隔开(支持通配符*,例如add*,表示所有以add开头的方法),如果指定了这个参数拦截器不会拦截指定列表中的方法,就是所谓的黑名单。
includeMethods: 该参数指定拦截器需要拦截的方法列表,多个方法用“,”隔开(支持通配符*,例如add*,表示所有以add开头的方法),如果指定了参数,则指定的Action在执行前会被拦截,即白名单。
 
定义好自定义拦截器后,就要使用自定义拦截器,在struts.xml文档中。
一、包内定义拦截器
1 <package....>
2      <interceptors>
3           <interceptor name="myinterceptor" class="....">
4           </interceptor>
5      </interceptors>
6 </package>
二、action内使用拦截器
1 <action .....>
2      <result.....></result>
3      <interceptor-ref name="defaultStack"></interceptor-ref>
4      <interceptor-ref name="myinterceptor"></interceptor-ref>
5 </action> 
主要:可以看出使用了自定义拦截器的action要配置默认拦截器的引用,因为默认拦截器包含了参数的读取、session的管理等功能。
以下是例子:
 1 public class MyMethodInterceptor extends MethodFilterInterceptor{
 2     protected String doIntercept(ActionInvocation invocation) throws Exception {
 3         // TODO Auto-generated method stub
 4         System.out.println("进入MyMethodInterceptor方法拦截器!!!!!!!!!!!!!");
 5         Map session = invocation.getInvocationContext().getSession();
 6         String name = (String) session.get("uname");
 7         if (name != null) {
 8             return invocation.invoke();
 9         }
10         return "input";
11     }
12 } 
struts.xml配置
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5  <struts>
 6
 7      <constant name="struts.i18n.encoding" value="UTF-8"></constant>
 8      <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
 9 <!-- <constant name="struts.action.extension" value="action,abc"></constant>-->
10
11      <package abstract="true" name="pk1" namespace="/" extends="struts-default"></package>
12      <package name="k2" extends="pk1">
13
14         <interceptors>
15              <interceptor name="method1" class="org.interceptors.MyMethodInterceptor">
16                 <param name="excludeMethods">login</param>
17             </interceptor>
18 <!--定义拦截器栈-->
19              <interceptor-stack name="myStack">
20                 <interceptor-ref name="defaultStack"></interceptor-ref>
21                 <interceptor-ref name="method1"></interceptor-ref>
22             </interceptor-stack>
23         </interceptors>
24
25 <!--设置默认拦截器-->
26 <!-- <default-interceptor-ref name="myStack"></default-interceptor-ref>-->
27
28          <action name="login_*_*" class="org.hzy.Actions.LoginAction" method="{1}">
29             <interceptor-ref name="myStack"></interceptor-ref>
30             <result name="success" type="chain">{2}</result>
31             <result name="input">index.jsp</result>
32             <result name="error">/WEB-INF/Jsp/error.jsp</result>
33         </action>
34          <action name="query_*" class="org.hzy.Actions.QueryAction" method="{1}">
35             <result>/WEB-INF/Jsp/show.jsp</result>
36         </action>
37          <action name="upload_*" class="org.hzy.Actions.FileUploadAction" method="{1}">
38             <result>/WEB-INF/Jsp/show.jsp</result>
39         </action>
40     </package>
41 </struts>
 
时间: 2024-10-12 20:25:31

Struts2 自定义拦截器(方法拦截器)的相关文章

Creating Custom Helper Methods 创建自定义辅助器方法----辅助器方法 ------ 精通ASP.NET MVC 5

创建内联的辅助器方法 和 拓展方法 好像类似的功能. 不过写在前台更直观

C# 索引器方法

使用索引操作 [] 访问包含在一个标准数组中的各个子项. 定义:把能使用索引操作符 [] 访问子项的方法称为索引器方法 1.自定义索引器方法(this): public class PeopleCollection : IEnumerable { private ArrayList arPeople= new ArrayList(); // 类的自定义索引器 public Person this [int index] // 除了多个this关键字外,和属性声明很相似 { get{ return

12.Struts2自定义拦截器

12.自定义拦截器 拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, 即在Acton方法执行之前或之后执行,以加强Action方法的功能. 例如,一般情况下,用户在打开某个页面之前,需要先登录,否则是无法对资源进行访问的.这就是权限拦截器. 1.定义拦截器类 自定义的拦截器类需要实现拦截器接口com.opensymphony.xwork2.interceptor.Intercep

Struts2自定义拦截器Interceptor以及拦截器登录实例

1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor{ private static final long serialVersionUID = 1L; public void destroy() { } public void init() {} public String intercept(ActionInvocation arg0) throws

5、Struts2自定义拦截器

一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影)    ActionMapper 传媒公司(包装明星) ActionMapping 明星                        Action 经纪人                     ActionProxy(代理对象) 小工所在单位             ActionInvocation 小工                        Interceptor(拦截器) 递归==99归一

Struts2 自定义拦截器时Action无法接收到参数

问题:自定义拦截器,没有添加defaultStack导致Action无法接受到参数 解决办法: 方法一,添加defaultStack,然后在Action中引用 自定义的stack,其实defaultStack中也有细分如basicStack等 <interceptors> <interceptor name="checkUser" class="com.common.interceptor.UserInfoInterceptor"></

Struts2拦截指定方法的拦截器

作者:禅楼望月 默认情况下,我们为一个Action配置一个拦截器,该拦截器会拦截该Action中的所有方法,但是有时候我们只想拦截指定的方法.为此,需要使用struts2拦截器的方法过滤特性. 要使用struts2拦截器的方法过滤特性其实也很简单,只需让拦截器的实现类继承com.opensymphony.xwork2.interceptor.MethodFilterInterceptor类.该类是AbstractInterceptor的子类.它重写了AbstractInterceptor类的in

Struts2自定义拦截器处理全局异常

今天在整理之前的项目的时候想着有的action层没有做异常处理,于是想着自定义拦截器处理一下未拦截的异常. 代码: package cn.xm.exam.action.safeHat; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope;

struts2 参数注入 方法拦截器

web.xml: <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://java.sun.com/xml/ns/javaee"