`
minfirefox
  • 浏览: 84380 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

Struts2拦截器的基本用法

阅读更多
方法一:
继承抽象截器(AbstractInterceptor)
拦截器Java代码:
package action;

import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class AuthInterceptor extends AbstractInterceptor {
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		ActionContext ctx = ActionContext.getContext();
		Map session = ctx.getSession();
		Object user = session.get("user");

		if (user == null) {
			ActionSupport action = (ActionSupport) invocation.getAction();
			action.addActionError("请先登录!");
			return Action.LOGIN;
		} else {
			return invocation.invoke();
		}
	}
}


Struts.xml文件:
...
<package name="Node" extends="struts-default" namespace="/Node">
	<interceptors>
		<!-- 定义AuthInterceptor拦截器 -->
		<interceptor name="auth" class="action.AuthInterceptor"/>
		<!-- 定义自己的拦截器栈,在Action的配置中,可以直接引用这个拦截器栈 -->
		<interceptor-stack name="securityStack">
			<interceptor-ref name="defaultStack"/>
			<interceptor-ref name="auth"/>
		</interceptor-stack>
	</interceptors>

	<!--<default-interceptor-ref name="securityStack"/>--> 

	<global-results>
		<result name="login">/login.jsp</result>
	</global-results>

	<action name="show" method="show" class="action.NodeAction">
		<result>show.jsp</result>
		<interceptor-ref name="securityStack"/>
	</action>

	...

</package>
...

在21行,如果直接用自己的拦截器<interceptor-ref name="authStack"/>,而不用拦截器栈时的话,默认拦截器的功能被取消了,有可能出错。
所以需要在<interceptor-ref name="authStack"/>后边加上<interceptor-ref name="defaultStack"/>这一句,再次显式的定义使用默认拦截器栈:
	<action name="show" method="show" class="action.NodeAction">
		<result>show.jsp</result>
		<interceptor-ref name="authStack"/>
		<interceptor-ref name="defaultStack"/>
	</action>



方法二:
继承方法过滤拦截器(MethodFilterInterceptor)
拦截器Java代码:
package action;

import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class AuthInterceptor extends MethodFilterInterceptor{
	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		ActionContext ctx = ActionContext.getContext();
		Map session = ctx.getSession();
		Object user = session.get("user");

		if (user == null) {
			ActionSupport action = (ActionSupport) invocation.getAction();
			action.addActionError("请先登录!");
			return Action.LOGIN;
		} else {
			return invocation.invoke();
		}
	}
}


Struts.xml文件:
...
<package name="Node" extends="struts-default" namespace="/Node">
	<interceptors>
		<!-- 定义LoggerInterceptor拦截器 -->
		<interceptor name="logger" class="action.LoggerInterceptor">
			<param name="includeMethods"></param>
			<param name="excludeMethods"></param>
		</interceptor>
		<!-- 定义AuthInterceptor拦截器 -->
		<interceptor name="auth" class="action.AuthInterceptor">
			<param name="includeMethods">show,edit</param>
			<param name="excludeMethods">login</param>
		</interceptor>
		
		<!-- 定义自己的拦截器栈,在Action的配置中,可以直接引用这个拦截器栈 -->
		<interceptor-stack name="myStack">
			<interceptor-ref name="logger"/>
			<interceptor-ref name="auth"/>
			<interceptor-ref name="defaultStack"/>
		</interceptor-stack>
	</interceptors>
	
	<!-- 默认拦截器 -->
	<default-interceptor-ref name="myStack"/> 

	<global-results>
		<result name="login">/login.jsp</result>
	</global-results>

	<action name="show" method="show" class="action.NodeAction">
		<result>show.jsp</result>
		<!-- 自己的拦截器 -->
	</action>

	...

</package>
...

第26行,配置了默认的拦截器引用,这样在<action中就不用写<interceptor-ref了。
如果需要在<action中单独配置另外的拦截器xxxStack,可以在34行处加入:
<action name="show" method="show" class="action.NodeAction">
	<result>show.jsp</result>
	<interceptor-ref name="xxxStack"/>
	<interceptor-ref name="defaultStack"/>
</action>

引用
NOTE: If method name are available in both includeMethods and excludeMethods, it will still be considered as an included method. In short includeMethods takes precedence over excludeMethods.
分享到:
评论

相关推荐

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

    这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP(面向切面编程)思想的组件,它可以理解为在Action调用前后插入的逻辑处理。在...

    struts2拦截器的使用方法

    ### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 ...通过以上介绍,我们可以了解到Struts2拦截器的基本使用方法及配置方式,这对于理解Struts2框架的工作机制以及优化应用架构具有重要意义。

    详解Struts2拦截器

    本文将深入探讨Struts2拦截器的基本概念、工作原理以及其实现机制,并结合实际应用场景来展示如何利用拦截器提高代码的复用性与可维护性。 #### 二、拦截器的概念与作用 拦截器(Interceptor)是一种设计模式,...

    struts2 拦截器实例

    3. **配置拦截器**:拦截器可以通过Struts2配置文件或注解进行配置,指定在哪些Action上使用哪些拦截器。 ### 二、单个Action配置拦截器实例 1. **创建拦截器**:首先,我们需要创建一个实现了`Interceptor`接口的...

    Struts2 拦截器

    拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...

    Struts2拦截器实现权限控制demo

    在Struts2中,我们可以通过拦截器来检查用户是否具有访问某个Action或方法的权限。以下是一个简单的步骤: 1. 创建权限拦截器:首先,我们需要编写一个实现了`Interceptor`接口的类,例如`AuthorizationInterceptor...

    struts2拦截器应用小例子

    本示例将探讨如何在Struts2中使用拦截器。 首先,我们需要理解Struts2拦截器的工作原理。拦截器是一个实现了`Interceptor`接口的Java类,它们按照指定的顺序组成一个拦截器栈。当请求到达控制器时,Struts2会依次...

    Struts2拦截器原理分析

    2. **拦截**:当一个请求到达Action时,Struts2会根据配置的拦截器栈顺序,先调用每个拦截器的`intercept()`方法,然后才执行Action的业务逻辑。 3. **后处理**:Action执行完毕后,Struts2会逆序遍历拦截器栈,调用...

    Struts2拦截器源程序

    Struts2框架会根据配置创建拦截器实例,然后在每次请求时调用其`intercept()`方法。拦截器实例通常是线程安全的,因此对于多线程环境,Struts2会为每个请求创建新的ActionInvocation实例,但拦截器实例是共享的。 *...

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

    在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合Servlet Filter进一步加强安全性。 首先,让我们理解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念设计的,它们...

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

    在本场景中,我们将探讨如何使用Struts2拦截器来实现对不文明字迹或者敏感词汇的拦截。 首先,我们需要了解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)思想实现的,它通过在Action调用前后插入额外...

    Struts2学习案例(拦截器)

    Struts2是一个强大的Java web应用程序框架,...通过深入学习和实践这个案例,你可以更全面地理解和掌握Struts2框架,特别是拦截器的使用,以及如何结合JPA进行数据访问。这将有助于提升你在Java web开发领域的技能。

    struts2拦截器实现权限控制

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。在Struts2中,拦截器扮演着...通过理解并掌握拦截器的工作原理和使用方法,开发者可以更好地设计和维护安全、可控的Web应用。

    Struts2 拦截器注解(二十七)

    然而,Struts2从2.1版本开始引入了拦截器注解,使得无需在配置文件中显式声明拦截器,就可以直接在Action类或方法上使用注解来应用拦截器。这种方式更简洁,减少了配置工作量,提高了代码可读性。 以下是几种常见的...

    创建自己struts2拦截器

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

    struts2 拦截器的使用(继承抽象拦截器)

    这篇博客文章“struts2 拦截器的使用(继承抽象拦截器)”探讨了如何通过继承Struts2的抽象拦截器来创建自定义拦截器。 首先,让我们理解拦截器的基本概念。在Struts2中,拦截器是基于Java的动态代理机制实现的,...

    struts1.2拦截器使用插件

    使用Struts1.2拦截器的基本步骤如下: 1. **定义拦截器类**:创建一个实现`Interceptor`接口的Java类,通常需要重写`intercept()`方法。在这个方法里,你可以添加你需要的逻辑,如记录日志、性能监控等。 2. **...

    struts2拦截器国际化

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

    Struts2 拦截器过滤方法(二十八)

    在"Struts2 拦截器过滤方法(二十八)"的博文中,可能更具体地讲解了一些高级用法,如条件判断拦截、组合拦截器、拦截器的堆栈管理和自定义参数传递等。 对于项目中的源码部分(src目录),可能包含了自定义拦截器...

Global site tag (gtag.js) - Google Analytics