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 {@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception {// 1.得到session中的userUser 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教程(7)--拦截器相关推荐

  1. struts2 过滤器和拦截器的区别和使用

    struts2 过滤器和拦截器的区别和使用 java web 过滤器和拦截器的区别和使用  1.1 什么是拦截器:      拦截器,在AOP(Aspect-Oriented Programming) ...

  2. struts2如何使用拦截器进行用户权限控制

    大多数网站会设置用户权限,如过滤非法用户,用户不登录时不能进行访问,或者设置访问的权限,如部分内容仅对VIP开放等等,这些权限的控制都可以用struts2中的拦截器来实现. 下面通过一个简单的Demo ...

  3. Struts2→拦截器、工作原理、拦截器计算Action执行时间、Struts2自带拦截器、拦截器栈

    工作原理 实现拦截器 样例 Struts2自带拦截器 拦截器栈(先进后出) TOKEN防表单重复提交 文字拦截器 AJAX

  4. Struts2框架之拦截器

    1:拦截器类似web过滤器,在action执行之前或者执行之后去取一些操作 2:拦截器栈就是递归调用 strust2的工作流程: 客户端通过HttpServletRequest向Tomcat容器发送请 ...

  5. struts2控制器及拦截器返回JSON格式数据

    1.     JSON插件 想要使用json必定会用到jquery. 1.1        导入相关的Ajax-jar包-01资料中ajax文件中. commons-beanutils-1.8.0.j ...

  6. Struts2中的拦截器与过滤器学习

    拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法 ,比如动态代理就是拦截器的简单实现,过滤器是在java web中,你传入的request,res ...

  7. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  8. struts2综合例子--------拦截器(登陆检查,日志记录),校验validate,

    列表Action package he.action;import he.dao.UserDAO;import java.sql.SQLException; import java.util.Link ...

  9. Struts2内置拦截器的简要介绍

    http://www.th7.cn/Program/java/201405/195296.shtml 标记有(*)要着重了解: (1)alias(别名拦截器):允许参数在跨越多个请求时使用不同别名,该 ...

  10. Struts2自己定义拦截器实例—登陆权限验证

    版本号:struts2.1.6 此实例实现功能:用户须要指定username登陆,登陆成功进入对应页面运行操作,否则返回到登陆页面进行登陆,当直接訪问操作页面(登陆后才干訪问的页面)时则不同意,须返回 ...

最新文章

  1. 网路游侠:某厂家新发布的数据销毁工具
  2. CONTEST1001 题解
  3. redis php操作日志,php-redis笔记
  4. CentOS 7下安装Logstash ELK Stack 日志管理系统(上)
  5. 微软公布 Visual Studio 2020 上半年路线图
  6. 【报告分享】2021年中国新一代信息技术创投生态研究报告.pdf(附下载链接)...
  7. SQL Server中的数据库文件组和零碎还原
  8. orcale自定义数组并向数组中查询插入数据
  9. 代码安全审计工具推荐
  10. 360 os3.0 android7.1,360OS 3.0系统
  11. 《黄帝内经.生气通天论篇》不生病的智慧节选01
  12. idea创建三种应用程序的方法:springboot,控制台程序,windows服务程序
  13. 【我的前端】网站开发:设计响应式网站的八大因素
  14. python 可视化 ploty 画3dmesh网格图
  15. Project 1:文章抄袭自动检测分析项目
  16. java 学习网站_Java学习必不可少的十大网站
  17. matlab模拟短波天波,短波的天波传播衰减预测模型
  18. 《数据结构(C语言版)》笔记-1.1 什么是数据结构
  19. 洗碗机安装位置和水电预留多少才合适最实用?
  20. C语言基础知识-数组和字符串

热门文章

  1. C++ Primer 5th笔记(10)chapter10 泛型算法 :lambda
  2. 数学建模——线性规划模型详解Python代码
  3. python——迭代器
  4. python_函数相关的各种参数定义和传递
  5. android指纹fingerprint学习总结
  6. Django框架连接MySQL数据库
  7. boost库安装编译指南
  8. 在Linux里使用dosbox运行debug.exe
  9. c++ 11 list转set
  10. 016 Android之NDK开发