`
退役的龙弟弟
  • 浏览: 453687 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2拦截器机制

 
阅读更多

一、inperceptor配置使用过程

1.配置拦截器

2.使用拦截器

通过下图可以知道,拦截器需要先在<interceptors></interceptors>中配置,然后通过<interceptor-ref name=""></interceptor-ref>使用。

二、配置默认拦截器

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="tags" namespace="/" extends="struts-default">

       
        <!-- 配置拦截器 -->
        
        <interceptors>
        	<interceptor name="" class=""></interceptor>
        	<interceptor name="" class=""></interceptor>
        	<interceptor-stack name="">
        		<interceptor-ref name=""></interceptor-ref>
        	</interceptor-stack>
        </interceptors>
        
        <!-- 配置默认拦截器 ,默认拦截器需要指定name属性,这个name属性值是一个已经定义好的拦截器(栈)的名字-->
        <!-- 当action没有显式应用拦截器时,该action所在包的默认拦截器才会生效 -->
        <default-interceptor-ref name=""></default-interceptor-ref>
        
        
         <action name="tags" class="com.ru.action.tagAction">
         <!-- 使用拦截器 -->
        	<interceptor-ref name=""></interceptor-ref>
            <result name="ok"  >
                /WEB-INF/jsp/tags.jsp
            </result>
        </action>
       
    </package>

   

</struts>

 

三、实现拦截器类

1..Struts2规定用户自定义拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。

该接口声明了3个方法:

void init();
void destroy();
String intercept(ActionInvocation invocation) throws Exception;

其中,init和destroy方法会在程序开始和结束时各执行一遍,不管使用了该拦截器与否,只要在struts.xml中声明了该Struts2拦截器就会被执行。
intercept方法就是拦截的主体了,每次拦截器生效时都会执行其中的逻辑。


2..不过,struts中又提供了几个抽象类来简化这一步骤。

 

1、public abstract class AbstractInterceptor implements Interceptor;(普通拦截器类)
2、public abstract class MethodFilterInterceptor extends AbstractInterceptor;(拦截方法的拦截器类)

 

(1)其中AbstractInterceptor提供了init()和destroy()的空实现,使用时只需要覆盖intercept()方法;

(2)而MethodFilterInterceptor则提供了includeMethods和excludeMethods两个属性,用来过滤执行该过滤器的action的方法。可以通过param来加入或者排除需要过滤的方法。

下面是通过继承AbstractInterceptor()方法实现自定义拦截器类

package com.ru.interceptor;

import java.util.Date;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.ru.action.InterceptorAction;

public class SimpleInterceptor extends AbstractInterceptor {
	//通过配置过滤器传递过滤器的name参数
	private String name;
	

	public void setName(String name) {
		this.name = name;
	}

//ActionInvocation这个参数可以获取被拦截的action实例
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		//通过ActionInvocation参数得到InterceptorAction对象
		InterceptorAction action=(InterceptorAction)invocation.getAction();
		System.out.println(name+"拦截器被执行----------"+"开始执行action的时间是:"+new Date());
		long startTime=System.currentTimeMillis();
		//执行下一个拦截器
		//如果没有下一个拦截器,执行action的excute()方法
		String result=invocation.invoke();
		System.out.println(name+"拦截器结束动作-------开始执行action的excute()方法");
		long endTime=System.currentTimeMillis();
		//返回result
		return result;
	}

}


struts.xml配置和使用拦截器

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="tags" namespace="/" extends="struts-default">

       
        <!-- 配置拦截器 -->
        
        <interceptors>
        	<interceptor name="SimpleInterceptor" class="com.ru.interceptor.SimpleInterceptor">
        		<param name="name">simpleIn</param>
        	</interceptor>
        	
        </interceptors>
        
        <!-- 配置默认拦截器 ,默认拦截器需要指定name属性,这个name属性值是一个已经定义好的拦截器(栈)的名字-->
        <!-- 当action没有显式应用拦截器时,该action所在包的默认拦截器才会生效 -->
      
        
        
         <action name="interceptor" class="com.ru.action.InterceptorAction">
         <!-- 使用拦截器 -->
        	<interceptor-ref name="SimpleInterceptor"></interceptor-ref>
            <result name="sucess">
                /WEB-INF/jsp/interceptor.jsp
            </result>
        </action>
       
    </package>

   

</struts>

 

四、拦截方法的拦截器

 

在Action中使用拦截器,默认情况下回拦截Action中所有的方法,但是在某些情况下,可能只需要拦截Action中的一个或多个方法,有时候也希望不拦截某个方法,这个在Struts2中是怎么实现的呢 ?

 

拦截器方法过滤:让拦截器有选择的拦截Action中的某个方法!

Struts2中提供了一个MethodFilterInterceptor类,开发者自定义的拦截器只需要继承该类就可以使用这个方法过滤的功能,来拦截Action中特定的方法!

 

MethodFilerInterceptor实现方法过滤中用到的两个参数

 

execludeMethods:该参数指定拦截器拒绝拦截的方法列表,多个方法用“,”隔开,指定了这个参数,拦截器不会拦截指定列表中的方法,就是所谓的黑名单
includeMethods:该参数指定拦截器需要拦截的方法列表,如果指定了参数,则指定的Action在执行前会被拦截,即白名单。

主要方法:

①protectedabstractStringdoIntercept(ActionInvocationinvocation)throwsException; 必须重写此方法,实现拦截。

②String interceptor(ActionInvocation invocation):继承自AbstractInterceptor类,方法不需要强制重写

③void setExcludeMethods(String excludeMethods):设置拦截器黑名单,参数为Action一方法名。拦截器不拦截该方法

 

④void setIncludeMethods(String includeMethods):设置拦截器白名单,参数为Action一方法名。拦截器会拦截该方法

 

⑤Set<String>getExcludeMethodsSet():获得拦截器的黑名单

⑥Set<String>getIncludeMethodsSet():获得拦截器的白名单

实例:

(1)方法过滤拦截器(与普通拦截器不同点只有一点,继承的类不同

 

package com.ru.interceptor;

import java.util.Date;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import com.ru.action.InterceptorAction;

public class MethodFInterceptor extends MethodFilterInterceptor {
private String name;
	

	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		//通过ActionInvocation参数得到InterceptorAction对象
				InterceptorAction action=(InterceptorAction)invocation.getAction();
				System.out.println(name+"拦截器被执行----------"+"开始执行action的时间是:"+new Date());
				long startTime=System.currentTimeMillis();
				//执行下一个拦截器
				//如果没有下一个拦截器,执行action的excute()方法
				String result=invocation.invoke();
				System.out.println(name+"拦截器结束动作-------开始执行action的excute()方法--当前时间是:"+new Date());
				long endTime=System.currentTimeMillis();
				//返回result
				return result;
	}

	
}


 

(2)struts.xml

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="tags" namespace="/" extends="struts-default">

       
        <!-- 配置拦截器 -->
        
        <interceptors>
        	
        	<!-- 这个就是方法拦截器 -->
        	<interceptor name="MethodFInterceptor" class="com.ru.interceptor.MethodFInterceptor">
        		<param name="name">MethodFilterInterceptor</param>
        	</interceptor>
        </interceptors>        
      
        <action name="my*" class="com.ru.action.InterceptorAction" method="{1}">
         <!-- 使用方法拦截器 -->
        	<interceptor-ref name="MethodFInterceptor">
        	<!-- 配置不过滤的方法 -->
        		<param name="excludeMethods">execute</param>
        	<!-- 配置过滤的方法 ,如果多个方法可以使用","分割-->
        	    <param name="includeMethods">function,function2</param>
        	</interceptor-ref>
          
            <result name="ok">
                /WEB-INF/jsp/ok.jsp
            </result>
        </action>
        
       
    </package>

   

</struts>



 

分享到:
评论

相关推荐

    详解Struts2拦截器机制

    Struts2拦截器机制详解 Struts2拦截器机制是Struts2框架的核心组件之一,它主要负责拦截和处理Action请求。拦截器机制的作用是相当大的,在Struts2中几乎70%的工作都是由拦截器完成的。拦截器机制可以实现各种功能...

    Struts2拦截器及其用法详细说明

    总结,Struts2拦截器是其核心机制之一,它允许开发者以模块化的方式添加额外的功能,提高代码的可复用性和可维护性。通过自定义拦截器和合理配置,我们可以实现诸如日志记录、事务管理、权限验证等多种业务需求,...

    struts2 拦截器

    总之,Struts2的拦截器机制极大地增强了框架的功能性和灵活性,使得开发者可以轻松地添加自定义逻辑,提高代码的可维护性和可扩展性。在实际项目中,合理利用拦截器可以解决许多常见的问题,提高Web应用程序的质量。

    详解Struts2拦截器

    在Struts2中,拦截器机制正是为了遵循DRY原则而设计的。通过使用拦截器,可以在多个Action之间共享相同的代码逻辑,避免每个Action都需要单独实现这些逻辑。 #### 四、拦截器的工作原理 - **目标对象**:被代理...

    struts2 拦截器实例

    现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截器基础 1. **拦截器的概念**:拦截器是基于Java的动态代理机制实现的,它在Action调用前后进行处理,形成一个拦截链。每个拦截器都可以...

    struts2拦截器

    标题“struts2拦截器”指的是Struts2框架中的拦截器机制,这是一个关键的组件,可以让我们在不修改实际业务代码的情况下,实现对请求处理流程的扩展和定制。 描述中提到的“基于struts2的拦截器测试,实现了页面的...

    Struts2拦截器实现权限控制demo

    在Struts2中,拦截器是实现业务逻辑控制和增强功能的重要机制,它们扮演着类似于AOP(面向切面编程)的角色,允许在动作执行前后插入自定义逻辑。在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何...

    Struts2 拦截器

    在Struts2中,拦截器是基于Java的动态代理机制实现的。当你定义一个拦截器时,实际上创建了一个实现了`Interceptor`接口的类。这个接口有一个关键方法`intercept()`,它是执行拦截逻辑的地方。通过在`struts.xml`或`...

    struts2拦截器应用小例子

    总结来说,Struts2的拦截器机制提供了强大的功能,允许开发者以声明式的方式控制请求的处理流程。通过这个小例子,你可以深入理解拦截器的工作原理,并学会如何将其应用于实际项目,提升代码的可维护性和复用性。

    struts2拦截器的使用方法

    Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活地控制程序流程,提高代码的复用性。 #### 二、Struts2拦截器...

    Struts2拦截器源程序

    分析这个文件或目录可以帮助我们更深入地理解Struts2拦截器的内部工作机制,包括它如何与ActionInvocation交互,以及如何处理请求和响应。 总结来说,Struts2拦截器是框架的核心部分,它们提供了一种灵活的方式,以...

    Struts2拦截器原理分析

    拦截器是Struts2框架的核心组成部分,它们在请求处理流程中起到了关键的作用。在本文中,我们将深入探讨Struts2拦截器的工作原理。 ### 一、拦截器概念 拦截器是基于Java的动态代理机制实现的,它允许我们在Action...

    struts2拦截器实现拦截不文明字迹

    拦截器是Struts2框架的一个重要组成部分,能够帮助开发者实现一些在请求处理前后执行的通用逻辑,如日志记录、权限验证、数据校验等。在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的...

    Struts2拦截器源码

    首先,理解拦截器的定义:拦截器是AOP(面向切面编程)的一个概念,在Struts2中,拦截器是基于Java的动态代理机制实现的。它们是一系列实现了`Interceptor`接口的类,可以在Action执行前后插入额外的行为。这些行为...

    使用struts2拦截器对登陆权限验证

    结合使用Struts2拦截器和Servlet Filter,我们可以构建出强大的权限验证机制。拦截器适用于Action级别的控制,而Filter则可以全局拦截所有请求,两者相辅相成,确保只有已登录用户才能访问受保护的资源。 在提供的`...

    struts2拦截器实现权限控制

    这篇博客文章“struts2拦截器实现权限控制”深入探讨了如何利用Struts2的拦截机制来执行用户访问权限的验证。 在Struts2中,拦截器是基于AOP(面向切面编程)的概念设计的,它们在Action调用前后执行,可以添加额外...

    创建自己struts2拦截器

    Struts2是一个强大的MVC框架,它通过使用拦截器(Interceptor)来实现业务逻辑与表现层的解耦,提供了一种灵活的扩展机制。在Struts2中,拦截器是AOP(面向切面编程)的一种实现,它可以监控、修改或增强方法调用的...

    Struts2 拦截器的执行顺序(二十九)

    这篇博客“Struts2 拦截器的执行顺序(二十九)”可能探讨了Struts2拦截器链的工作原理和它们的执行顺序,这对于理解Struts2的内部机制至关重要。 首先,让我们深入理解Struts2的拦截器。拦截器是在Action调用前后...

    struts2拦截器国际化

    在Struts2中,拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要机制,而国际化(Internationalization,简称i18n)则能帮助我们构建支持多语言的Web应用。下面将详细解释这两个知识点以及它们如何在Struts2...

    struts2拦截器原理

    总的来说,Struts2的拦截器机制极大地增强了框架的灵活性和可扩展性,使得开发者可以在不修改Action代码的情况下,实现对业务流程的扩展和控制。通过合理的拦截器配置和自定义拦截器实现,可以构建出高效且易于维护...

Global site tag (gtag.js) - Google Analytics