`
SIHAIloveYAN
  • 浏览: 119945 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

struts2教程(7)--拦截器

 
阅读更多

Struts2拦截器

一、拦截器介绍

拦截器 的使用 ,源自Spring AOP(面向切面编程)思想

拦截器 采用 责任链 模式

在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。

责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行

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

1struts2 所有拦截器 都必须实现 Interceptor 接口

package com.sihai.intercept;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class _MyInterceptor implements Interceptor {

	public void destroy() {

	}

	public void init() {
		System.out.println("my interceptor init");
	}

	public String intercept(ActionInvocation ai) throws Exception {

		System.out.println("my interceptor 拦截。。。。。");

		//return ai.invoke(); // 放行
	
		return Action.LOGIN;  //"login"
	}

}


2AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现

package com.sihai.intercept;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class MyInterceptor extends MethodFilterInterceptor {

	public void destroy() {

	}

	public void init() {
		System.out.println("my interceptor init");
	}

	public String doIntercept(ActionInvocation ai) throws Exception {

		System.out.println("my interceptor 拦截。。。。。");

		//return ai.invoke(); // 放行
	
		return Action.LOGIN;  //"login"
	}

}

所有实际开发中,自定义拦截器 只需要 继承 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 视图

二、自定义拦截器案例

案例 登陆,对其它Action访问 通过自定义拦截器 进行权限控制

导入jar包 (struts2 jarc3p0dbutilsmysql驱动)

web.xml

struts.xml

JDBCUtils 工具类

第一步 编写index.jsp 提供 图书增删改查 四个功能

编写BookAction ,提供四个业务方法

第二步 完成登陆功能

第三步 :必须要登陆 才能进行图书管理

使用Filter 进行权限控制 ---- 过滤所有web请求 (所有web资源访问)

使用拦截器 进行权限控制 ---- 主要拦截对Action访问 (不能拦截JSP

package com.sihai.intercept;

import org.apache.struts2.ServletActionContext;

import com.sihai.action.BookAction;
import com.sihai.domain.User;

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

public class BookInterceptor extends MethodFilterInterceptor {

	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {

		// 1.得到session中的user
		User user = (User) ServletActionContext.getRequest().getSession()
				.getAttribute("user");

		if (user == null) {
			BookAction action = (BookAction) invocation.getAction(); // 得到当前拦截的action对象。

			action.addActionError("权限不足,请先登录");// 存储错误信息

			return Action.LOGIN;
		}

		return invocation.invoke();
	}

}

定义拦截器 继承AbstractInterceptor

配置拦截器

1、方式一

	<!-- 注册拦截器 -->

<interceptors>

<interceptor name="privilege" class="com.sihai.interceptor.PrivilegeInterceptor"></interceptor>

</interceptors>

<action name="book_*" class="com.sihai.action.BookAction" method="{1}" >

<!-- 使用拦截器 -->

<!-- 当使用自定义拦截器 后,默认拦截器 就会失效  -->

<interceptor-ref name="defaultStack"></interceptor-ref>

<interceptor-ref name="privilege"></interceptor-ref>

</action>


2、方式二

	<!-- 注册拦截器 -->

<interceptors>

<interceptor name="privilege" class="com.sihai.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>



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>
	<package name="default" namespace="/" extends="struts-default">
		

		<interceptors>

			<interceptor name="my" class="com.sihai.intercept.MyInterceptor">
			</interceptor>

			<interceptor name="bookInterceptor" class="com.sihai.intercept.BookInterceptor">
				<param name="includeMethods">add,update,delete</param>
			</interceptor>

			<interceptor-stack name="myStack">
				<interceptor-ref name="bookInterceptor"></interceptor-ref>
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
		</interceptors>
		
		<global-results>
			<result name="login">/login.jsp</result>
		</global-results>

		<action name="demo1" class="com.sihai.action.Demo1Action">
			<result name="login">/login.jsp</result>
			<!-- <interceptor-ref name="my" /> <interceptor-ref name="defaultStack"/> -->
			<interceptor-ref name="myStack" />
		</action>


		<action name="login" class="com.sihai.action.LoginAction">
			<result name="input">/login.jsp</result>

			<result>/book.jsp</result>
		</action>

		<action name="book_*" class="com.sihai.action.BookAction"
			method="{1}">
			<interceptor-ref name="myStack" />

		</action>
	</package>
</struts>



分享到:
评论

相关推荐

    struts2-tags-文档.rar

    "struts2.chm"可能是Struts2的基础教程,涵盖了框架的基本概念、配置、动作、拦截器等核心组件。在这个文档中,你可以了解到如何设置Struts2的配置文件,如何创建Action类,以及如何使用拦截器进行业务逻辑处理。...

    struts2-core-2.3.32和xwork-core-2.3.32

    XWork则是Struts2的基础框架,提供了一系列底层功能支持,如类型转换、拦截器机制等。 标题提到的"struts2-core-2.3.32"和"xwork-core-2.3.32"是Struts2框架的重要组成部分。"struts2-core-2.3.32.jar"包含了Struts...

    struts2学习之九---拦截器

    Struts2是一个强大的Java EE应用程序框架,主要用于构建Web应用程序。拦截器是Struts2的核心特性之一,它在MVC设计模式中...在学习过程中,可以参考官方文档、博客文章以及相关教程,加深对Struts2拦截器的理解和实践。

    Struts2视频教程

    - **拦截器**:拦截器是Struts2的一个重要特性,可以在请求到达Action之前或之后执行特定的操作,如验证用户登录状态、日志记录等。 #### 四、Struts2进阶技巧 - **ModelDriven模式**:该模式允许Action实例共享同...

    STRUTS2 教程 --希望能够对大家有所帮助

    6. **Interceptor(拦截器)**:拦截器是Struts2的一大特色,可以实现如日志、权限检查、事务管理等功能。通过`&lt;interceptor&gt;`和`&lt;interceptor-stack&gt;`标签进行配置。 7. **OGNL(Object-Graph Navigation Language...

    Struts2技术手册-Struts2精华教程-电子书

    .....XWork拦截器 .....XWork转换器 .....XWork校验器_使用 .....XWork校验器_定义 .....标签库_简介与OGNL .....标签库_主题与模板 .....标签库_非表单标签 .....标签库_表单标签 .....国际化 .....token令牌 ........

    struts2-2.0.14

    此外,还包括了Interceptor(拦截器)机制,这是一种AOP(面向切面编程)的实现,允许在Action执行前后插入自定义代码,用于日志记录、权限验证等通用功能。Struts2核心库还支持OGNL(Object-Graph Navigation ...

    struts2学习--helloword

    通过以上步骤,你将能够掌握Struts2的基础配置和SiteMesh的使用,这对于进一步学习Struts2的高级特性,如拦截器、结果类型、动态方法调用等,以及理解MVC模式在实际项目中的应用具有重要意义。不断地实践和探索,你...

    struts-2.0.11-all.zip

    - **拦截器**:Struts2的拦截器是处理请求的关键部分,它们在动作调用前后执行,可以实现如日志、权限验证、事务管理等附加功能。 - **OGNL**:Object-Graph Navigation Language用于在视图和控制器之间传递数据,...

    struts2.X 拦截器源码

    Struts2.X 拦截器是Apache Struts框架的核心组件之一,它是基于拦截器模式实现的,使得开发者能够方便地扩展和定制应用程序的行为。在Struts2中,拦截器扮演着中间件的角色,它在Action执行前后进行处理,可以进行如...

    Struts---------教程.rar

    1. **拦截器**:Struts2使用拦截器链来处理请求,拦截器可以实现AOP(面向切面编程)功能,如日志、事务管理等。 2. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为表达式语言,简化了模型数据...

    MYECLIPS--STRUtS教程--PDF

    同时,它也会介绍Struts的拦截器(Interceptor),这些可插拔的组件可以增强Action的执行流程,比如添加日志记录、事务控制等功能。 最后,教程可能会覆盖Struts 2的一些新特性,如更灵活的配置方式、表达式语言...

    Struts2入门教程-162页.pdf

    在这一章,你将深入学习Struts2的高级特性,如拦截器(Interceptors)、结果类型(Result Types)以及动态方法调用(Dynamic Method Invocation)。这些特性使得Struts2具有高度的灵活性和可扩展性,可以满足更复杂...

    Struts2入门教程-分析及讲解

    Struts2采用了拦截器(Interceptor)机制,提供了更强大的控制层,使得业务逻辑和表现层分离更加彻底。 2. **核心组件** - **Action**:负责处理用户的请求,实现业务逻辑。 - **Interceptor**:拦截器是Struts2...

    struts2-help-document.rar_Help!_struts2 document

    在Struts2框架中,Controller由一系列拦截器(Interceptor)组成,这些拦截器负责处理请求,执行业务逻辑,并决定如何将控制权传递给下一个组件。 1. **Action类**:在Struts2中,Action类是处理用户请求的核心。每...

    struts2-portlet-2.0.11

    4. **Struts2框架的核心特性**: Struts2的核心特性包括强大的动作映射、拦截器、结果类型、OGNL表达式语言、国际化支持、异常处理等。它通过拦截器模型增强了可扩展性和灵活性,允许开发者添加自定义行为到请求处理...

    java-ee-struts2-study-master.zip

    通过这个项目,你可以学习到如何在Java EE环境中搭建Struts2框架,如何组织项目的目录结构,如何编写Action,以及如何利用Struts2的特性如拦截器、国际化、动态方法调用等。同时,这也是一个了解和实践MVC设计模式的...

    struts2 用拦截器 实现用户权限登录

    本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它通过观察者模式实现,当一个请求到达时,会按照配置的顺序依次执行...

    Struts2返回json -- demo

    3. **处理请求参数**:如果需要从请求中获取参数,Struts2提供了`params`拦截器,它可以自动将请求参数绑定到Action类的属性上。 4. **JSON插件配置**:在`struts.properties`或`struts.xml`中启用JSON插件: ```...

    struts2.3.1.2-all

    1. 用户指南:介绍如何配置Struts2,创建Action类,使用结果类型和拦截器等。 2. API参考:列出了所有可用的类、接口和方法,方便开发者查阅具体功能的实现细节。 3. 示例代码:提供了一系列工作示例,展示了如何在...

Global site tag (gtag.js) - Google Analytics