Struts2拦截器
一、拦截器介绍
拦截器 的使用
,源自Spring AOP(面向切面编程)思想
拦截器 采用
责任链 模式
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。
责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行
在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )
1、 struts2
所有拦截器 都必须实现 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"
}
}
2、 AbstractInterceptor
类实现了 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 jar、c3p0、
dbutils、
mysql驱动)
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.chm"可能是Struts2的基础教程,涵盖了框架的基本概念、配置、动作、拦截器等核心组件。在这个文档中,你可以了解到如何设置Struts2的配置文件,如何创建Action类,以及如何使用拦截器进行业务逻辑处理。...
XWork则是Struts2的基础框架,提供了一系列底层功能支持,如类型转换、拦截器机制等。 标题提到的"struts2-core-2.3.32"和"xwork-core-2.3.32"是Struts2框架的重要组成部分。"struts2-core-2.3.32.jar"包含了Struts...
Struts2是一个强大的Java EE应用程序框架,主要用于构建Web应用程序。拦截器是Struts2的核心特性之一,它在MVC设计模式中...在学习过程中,可以参考官方文档、博客文章以及相关教程,加深对Struts2拦截器的理解和实践。
- **拦截器**:拦截器是Struts2的一个重要特性,可以在请求到达Action之前或之后执行特定的操作,如验证用户登录状态、日志记录等。 #### 四、Struts2进阶技巧 - **ModelDriven模式**:该模式允许Action实例共享同...
6. **Interceptor(拦截器)**:拦截器是Struts2的一大特色,可以实现如日志、权限检查、事务管理等功能。通过`<interceptor>`和`<interceptor-stack>`标签进行配置。 7. **OGNL(Object-Graph Navigation Language...
.....XWork拦截器 .....XWork转换器 .....XWork校验器_使用 .....XWork校验器_定义 .....标签库_简介与OGNL .....标签库_主题与模板 .....标签库_非表单标签 .....标签库_表单标签 .....国际化 .....token令牌 ........
此外,还包括了Interceptor(拦截器)机制,这是一种AOP(面向切面编程)的实现,允许在Action执行前后插入自定义代码,用于日志记录、权限验证等通用功能。Struts2核心库还支持OGNL(Object-Graph Navigation ...
通过以上步骤,你将能够掌握Struts2的基础配置和SiteMesh的使用,这对于进一步学习Struts2的高级特性,如拦截器、结果类型、动态方法调用等,以及理解MVC模式在实际项目中的应用具有重要意义。不断地实践和探索,你...
- **拦截器**:Struts2的拦截器是处理请求的关键部分,它们在动作调用前后执行,可以实现如日志、权限验证、事务管理等附加功能。 - **OGNL**:Object-Graph Navigation Language用于在视图和控制器之间传递数据,...
Struts2.X 拦截器是Apache Struts框架的核心组件之一,它是基于拦截器模式实现的,使得开发者能够方便地扩展和定制应用程序的行为。在Struts2中,拦截器扮演着中间件的角色,它在Action执行前后进行处理,可以进行如...
1. **拦截器**:Struts2使用拦截器链来处理请求,拦截器可以实现AOP(面向切面编程)功能,如日志、事务管理等。 2. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为表达式语言,简化了模型数据...
同时,它也会介绍Struts的拦截器(Interceptor),这些可插拔的组件可以增强Action的执行流程,比如添加日志记录、事务控制等功能。 最后,教程可能会覆盖Struts 2的一些新特性,如更灵活的配置方式、表达式语言...
在这一章,你将深入学习Struts2的高级特性,如拦截器(Interceptors)、结果类型(Result Types)以及动态方法调用(Dynamic Method Invocation)。这些特性使得Struts2具有高度的灵活性和可扩展性,可以满足更复杂...
Struts2采用了拦截器(Interceptor)机制,提供了更强大的控制层,使得业务逻辑和表现层分离更加彻底。 2. **核心组件** - **Action**:负责处理用户的请求,实现业务逻辑。 - **Interceptor**:拦截器是Struts2...
在Struts2框架中,Controller由一系列拦截器(Interceptor)组成,这些拦截器负责处理请求,执行业务逻辑,并决定如何将控制权传递给下一个组件。 1. **Action类**:在Struts2中,Action类是处理用户请求的核心。每...
4. **Struts2框架的核心特性**: Struts2的核心特性包括强大的动作映射、拦截器、结果类型、OGNL表达式语言、国际化支持、异常处理等。它通过拦截器模型增强了可扩展性和灵活性,允许开发者添加自定义行为到请求处理...
通过这个项目,你可以学习到如何在Java EE环境中搭建Struts2框架,如何组织项目的目录结构,如何编写Action,以及如何利用Struts2的特性如拦截器、国际化、动态方法调用等。同时,这也是一个了解和实践MVC设计模式的...
本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它通过观察者模式实现,当一个请求到达时,会按照配置的顺序依次执行...
3. **处理请求参数**:如果需要从请求中获取参数,Struts2提供了`params`拦截器,它可以自动将请求参数绑定到Action类的属性上。 4. **JSON插件配置**:在`struts.properties`或`struts.xml`中启用JSON插件: ```...
1. 用户指南:介绍如何配置Struts2,创建Action类,使用结果类型和拦截器等。 2. API参考:列出了所有可用的类、接口和方法,方便开发者查阅具体功能的实现细节。 3. 示例代码:提供了一系列工作示例,展示了如何在...