struts2教程(7)--拦截器
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)--拦截器相关推荐
- struts2 过滤器和拦截器的区别和使用
struts2 过滤器和拦截器的区别和使用 java web 过滤器和拦截器的区别和使用 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming) ...
- struts2如何使用拦截器进行用户权限控制
大多数网站会设置用户权限,如过滤非法用户,用户不登录时不能进行访问,或者设置访问的权限,如部分内容仅对VIP开放等等,这些权限的控制都可以用struts2中的拦截器来实现. 下面通过一个简单的Demo ...
- Struts2→拦截器、工作原理、拦截器计算Action执行时间、Struts2自带拦截器、拦截器栈
工作原理 实现拦截器 样例 Struts2自带拦截器 拦截器栈(先进后出) TOKEN防表单重复提交 文字拦截器 AJAX
- Struts2框架之拦截器
1:拦截器类似web过滤器,在action执行之前或者执行之后去取一些操作 2:拦截器栈就是递归调用 strust2的工作流程: 客户端通过HttpServletRequest向Tomcat容器发送请 ...
- struts2控制器及拦截器返回JSON格式数据
1. JSON插件 想要使用json必定会用到jquery. 1.1 导入相关的Ajax-jar包-01资料中ajax文件中. commons-beanutils-1.8.0.j ...
- Struts2中的拦截器与过滤器学习
拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法 ,比如动态代理就是拦截器的简单实现,过滤器是在java web中,你传入的request,res ...
- struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...
- struts2综合例子--------拦截器(登陆检查,日志记录),校验validate,
列表Action package he.action;import he.dao.UserDAO;import java.sql.SQLException; import java.util.Link ...
- Struts2内置拦截器的简要介绍
http://www.th7.cn/Program/java/201405/195296.shtml 标记有(*)要着重了解: (1)alias(别名拦截器):允许参数在跨越多个请求时使用不同别名,该 ...
- Struts2自己定义拦截器实例—登陆权限验证
版本号:struts2.1.6 此实例实现功能:用户须要指定username登陆,登陆成功进入对应页面运行操作,否则返回到登陆页面进行登陆,当直接訪问操作页面(登陆后才干訪问的页面)时则不同意,须返回 ...
最新文章
- 网路游侠:某厂家新发布的数据销毁工具
- CONTEST1001 题解
- redis php操作日志,php-redis笔记
- CentOS 7下安装Logstash ELK Stack 日志管理系统(上)
- 微软公布 Visual Studio 2020 上半年路线图
- 【报告分享】2021年中国新一代信息技术创投生态研究报告.pdf(附下载链接)...
- SQL Server中的数据库文件组和零碎还原
- orcale自定义数组并向数组中查询插入数据
- 代码安全审计工具推荐
- 360 os3.0 android7.1,360OS 3.0系统
- 《黄帝内经.生气通天论篇》不生病的智慧节选01
- idea创建三种应用程序的方法:springboot,控制台程序,windows服务程序
- 【我的前端】网站开发:设计响应式网站的八大因素
- python 可视化 ploty 画3dmesh网格图
- Project 1:文章抄袭自动检测分析项目
- java 学习网站_Java学习必不可少的十大网站
- matlab模拟短波天波,短波的天波传播衰减预测模型
- 《数据结构(C语言版)》笔记-1.1 什么是数据结构
- 洗碗机安装位置和水电预留多少才合适最实用?
- C语言基础知识-数组和字符串