Struts2拦截器(Interceptor)原理详解
1.1. 什么是拦截器:
2. 拦截器的配置
Struts 2已经为您提供丰富多样的,功能齐全的拦截器实现。大家可以至struts2的jar包内的struts-default.xml查看关于默认的拦截器与拦截器链的配置。
<interceptors>
<!-- 定义拦截器 -->
<interceptor name="拦截器名" class="拦截器实现类"/>
<!-- 定义拦截器栈 -->
<interceptor-stack name="拦截器栈名">
<interceptor-ref name="拦截器一"/>
<interceptor-ref name="拦截器二"/>
</interceptor-stack>
</interceptors>
......
</package>
一旦定义了拦截器和拦截器栈后,就可以使用这个拦截器或拦截器栈来拦截Action了。拦截器的拦截行为将会在Action的exceute方法执行之前被执行。
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
<!-- 使用拦截器,一般配置在result之后, -->
<!-- 引用系统默认的拦截器 -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="拦截器名或拦截器栈名"/>
</action>
作为“框架(framework)”,可扩展性是不可或缺的。虽然,Struts 2为我们提供如此丰富的拦截器实现,但是这并不意味我们失去创建自定义拦截器的能力,恰恰相反,在Struts 2自定义拦截器是相当容易的一件事。
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* 权限检查拦截器
*
* @author qiujy
* @version 1.0
*/
public class AuthorizationInterceptor extends AbstractInterceptor {
/*
* 拦截Action处理的拦截方法
*
*/
public String intercept(ActionInvocation invocation) throws Exception {
Map session = invocation.getInvocationContext().getSession();
String userName = (String) session.get("userName");
if (null != userName && userName.equals("test")) {
System.out.println("拦截器:合法用户登录---");
return invocation.invoke();
} else {
System.out.println("拦截器:用户未登录---");
return Action.LOGIN;
}
}
}
5.3. 配置权限控制拦截器:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="my" extends="struts-default">
<interceptors>
<!-- 定义权限控制拦截器 -->
<interceptor name="authority" class="org.qiujy.common.AuthorizationInterceptor"/>
</interceptors>
<!-- 定义全局处理结果 -->
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
<action name="listall" class="org.qiujy.web.struts2.action.UserAction" method="listAllUser">
<result name="success">/listall.jsp</result>
<!-- 使用拦截器 -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="authority"/>
</action>
<action name="userOpt" class="org.qiujy.web.struts2.action.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
登录后:
再访问http://localhost:8080/AuthorityInterceptorDemo/listall.action这个链接:
如果为了简化struts.xml文件的配置,避免在每个Action重复配置该拦截器,可以将拦截器配置成了一个默认拦截器栈。如下:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="my" extends="struts-default">
<interceptors>
<!-- 定义权限控制拦截器 -->
<interceptor name="authority"
class="org.qiujy.common.AuthorizationInterceptor" />
<!-- 定义一个包含权限控制的拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器 -->
<default-interceptor-ref name="mydefault" />
<!-- 定义全局处理结果 -->
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
<action name="listall"
class="org.qiujy.web.struts2.action.UserAction"
method="listAllUser">
<result name="success">/listall.jsp</result>
</action>
</package>
<package name="font" extends="struts-default">
<action name="userOpt" class="org.qiujy.web.struts2.action.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qjyong/archive/2007/10/14/1824607.aspx
转载于:https://blog.51cto.com/myoraclex/413697
Struts2拦截器(Interceptor)原理详解相关推荐
- Struts2拦截器的使用 (详解)
Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...
- Struts2拦截器Interceptor的使用
一.拦截器的使用: 只有用户登录时才可以查看商品,否则点击查看商品时会跳回login登录页面. struts2.xml中拦截器Interceptor的配置: <interceptors>& ...
- JavaEE基础(05):过滤器、监听器、拦截器,应用详解
本文源码:GitHub·点这里 || GitEE·点这里 一.Listener监听器 1.概念简介 JavaWeb三大组件:Servlet,Listener,Filter.监听器就是指在应用程序中监听 ...
- 拦截器与过滤器详解,使用方式与注意事项,使用场景以及区别与联系
过滤器Filter 定义 对Servlet容器调用Servlet的过程进行拦截,基于函数回调实现 常见使用场景 统一设置编码 过滤敏感字符 登录校验 URL级别的访问权限控制 数据压缩 使用方式 这了 ...
- SpringMVC拦截器-快速入门详解(应用)
拦截器在预处理后什么情况下会执行目标资源,什么情况下不执行目标资源,以及在有多个拦截器的情况下拦截器的执行顺序是什么? 再编写一个拦截器2, public class MyInterceptor2 i ...
- struts2 拦截器Interceptor中取得request、response
如何在Struts2中的拦截器中获取 request response 等对象呢? ActionContext actionContext = invocation.getInvocationCont ...
- springboot拦截器与过滤器详解
前言 不管是传统的ssm项目,还是springboot项目,拦截器和过滤器在项目开发中都离不开,比如说对于ssm框架类的项目来说,许多登录逻辑的前置校验,黑白名单的检查,以及部分请求的数据分析等依然需 ...
- 在拦截器里放入参数 controller_干货|SpringMVC拦截器的使用详解
一.拦截器简介 Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信 ...
- Javaweb入门到实战(三)过滤器、拦截器、jdbc详解
9.JavaBean 实体类 JavaBean有特定的写法: 必须要有一个无参构造 属性必须私有化 必须有对应的get/set方法: 一般用来和数据库的字段做映射 ORM ORM:对象关系映射 表–& ...
最新文章
- eplise怎么连接数据库_基于手机信令的大数据分析教程(一)数据导入数据库
- 【版本工具】Git-浅谈git命令
- 列表数据提交_Mybatis-实现数据的增删改查
- Spring 注入集合的成员变量属性
- MapXtreme 2005 学习心得 缩放比例下不显示图层(十一)
- Java AIO初探(异步网络IO)
- json格式校验并显示错误_使用postman做自动化接口校验
- 怎样更换UC浏览器的字体?更换UC浏览器的字体的方法
- 分布式光伏贷款欲破冰 多家银行推出相关业务
- C结构中包含自己的嵌套定义
- paip.提升性能--- mysql 建立索引 删除索引 很慢的解决.
- ipad上的电子阅读器们
- Hyperledger Fabric Service Discovery CLI(服务发现命令行工具)学习笔记
- MATLA 2009B 中安装Sedumi
- matlab画平面风羽图(彩色)
- 单芯片快速以太网MAC控制器DM9000介绍续
- mysql wating for_MySQL:关于Wating for Slave workers to free pending events等待
- Spring笔记(基于狂神视频+自己理解)
- 外星世界,真实呈现,外星版Pokemon Go是如何做到的?
- 公用计算机配置文件,配置公用和专用计算机文件访问
热门文章
- MindCon极客周 · 点亮城市接力活动正式启动!来为你的城市打Call,还有多重好礼相送!...
- 新款iPhone,比绿更绿
- 对付审稿人“强迫引用”,新方法来了,Nature都说好
- 世道变了!这个AI竞赛不再要刷榜成绩,直接看商业落地计划书
- 任正非说到做到:华为正与美企谈判,授权转让5G技术
- Django View(视图系统)
- iOS:MBProgressHUD的基本使用
- 如何在linux下检测内存泄漏
- 用wget做站点镜像
- 转: mysql create view 创建视图