【Struts2】自定义拦截器interceptors
下面给一张图片表示Struts2拦截器的处理流程。

通过这个流程图,我们可以看出一个完整的请求大概的过程为:
请求 -->filter 控制器 --> 拦截器 1/ 拦截器 2-->Action-->Result--> 拦截器 2/ 拦截器 1--> 响应输出
可以清楚地看出,当请求到服务器的时候首先会经过拦截器,然后当响应到用户界面的时候又会经过拦截器。
下面我们来实现一个自定义的拦截器
1. 编写拦截器实现类
实现 Interceptor 接口(或者继承 AbstractInterceptor )
如:
MyInterceptor.java 文
package cn.test.interceptor; import java.util.Map; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class MyInterceptor extends AbstractInterceptor{ //如果下面逻辑执行了invoke方法,返回值无效;如果没有执行invoke方法返回String作为result标识符
public String intercept(ActionInvocation ai) throws Exception {
System.out.println("在Action之前调用");
//登录检查
Map<String,Object> session =
ActionContext.getContext().getSession();
String username = (String)session.get("user");
if(username!=null){//登录的用户
ai.invoke();//调用后续拦截器或Action+Result
System.out.println("在Result之后调用");
return null;
}else{//未登录
return "login";//找<result name="login">
} } }
MyInterceptor.java
2. 在 struts.xml 中配置拦截器
<interceptors>
<interceptor name="myinter" class="cn.test.interceptor.MyInterceptor"/>
</interceptors>
3. 使用拦截器
只需要在action对拦截器进行引用即可:
<interceptor-ref name="myinter"/>
一旦使用了自定义的拦截器,那么struts2框架就不会去加载默认的拦截器了,因此有些功能会受损,这时候需要再次引用默认拦截器:
<interceptor-ref name="defaultStack"/>
比如下面的struts.xml案例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <package name="demo" extends="struts-default" namespace="/"> <interceptors>
<interceptor name="myinter" class="cn.test.interceptor.MyInterceptor"/>
</interceptors> <!--这里把result提升到全局是为了,插件也能够调用-->
<global-results>
<result name="login" type="redirectAction">
<!--跳转到/tologin-->
<param name="actionName">tologin</param>
<param name="namespace">/</param>
</result>
</global-results> <action name="delete" class="deleteAction">
<!--显示调用自定义的过滤器和默认的过滤器-->
<interceptor-ref name="myinter"/>
<interceptor-ref name="defaultStack"/> <result name="success" type="redirectAction">
<param name="actionName">list</param>
<param name="namespace">/</param>
</result>
<result name="error" type="dispatcher">/WEB-INF/error.jsp</result>
</action> </package>
</struts>
struts.xml
【Struts2】自定义拦截器interceptors的更多相关文章
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- struts2自定义拦截器 设置session并跳转
实例功能:当用户登陆后,session超时后则返回到登陆页面重新登陆. 为了更好的实现此功能我们先将session失效时间设置的小点,这里我们设置成1分钟 修改web.xml view plainco ...
- 12.Struts2自定义拦截器
12.自定义拦截器 拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- Struts2自定义拦截器
1. 需求 自定义拦截器实现,用户登录的访问控制. 2. 定义拦截器类 public class LoginInterceptor extends AbstractInterceptor { @Ove ...
- struts2自定义拦截器与cookie整合实现用户免重复登入
目的:测试开发时,为了减少用户登入这个繁琐的登入验证,就用struts2做了个简单的struts2拦截器,涉及到了与cookie整合,具体的看代码 结构(两部份)=struts2.xml+自定义拦截器 ...
- 5、Struts2自定义拦截器
一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影) ActionMapper 传媒公司(包装明星) ActionMapping 明星 ...
- Struts2自定义拦截器处理全局异常
今天在整理之前的项目的时候想着有的action层没有做异常处理,于是想着自定义拦截器处理一下未拦截的异常. 代码: package cn.xm.exam.action.safeHat; import ...
- Struts2自定义拦截器——完整实例代码
比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...
随机推荐
- Cognos11中通过URL传参访问动态Report
一.需求: 在浏览器输入一个URL,在URL后面加上参数就可以访问一个有提示值的报表?比如下面的报表 二.解决办法 Cognos Model 查询主题设计层概要 Select * from [UCO ...
- 使用phpqrcode生成二维码
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手.然而,我们可以使用php ...
- oauth2-server-php-docs 集成3
Yii集成 对于Yii集成,请通过Filsh查看Yii OAuth2服务器资源库 CakePHP的 有关CakePHP中集成的这个库的示例,请参阅Qsoomro CakePHP OAuth2 Demo ...
- 国内A股16家上市银行的財务数据与股价的因子分析报告(1)(工具:R)
分析人:BUPT_LX 研究目的 用某些算法对2014年12月份的16家国内A股上市的商业银行当中11项財务数据(资产总计.负债合计.股本.营业收入.流通股A.少数股东权益.净利润.经营活动的现金流量 ...
- Android 关于操作栏 ActionBar 的设计原则【转载+整理】
原文地址 本文内容 操作栏目的 基本布局 适应旋转和不同的屏幕尺寸 副操作栏的布局 操作栏按钮 上下文操作栏 操作栏清单 设计原则就是为你在编写 Android APP 时,尤其是如何安排操作按钮的位 ...
- ArcGIS鼠标滚轮方向之注册表篇
ArcMap鼠标滚轮方向的设置是记录在注册表信息中,那么我们做一个简单的测试.先打开注册表,将ReverseMouseWheel删除,再打开ArcMap进行鼠标滚轮方向设置. 设置完成后,刷新注册表, ...
- springboot结合jwt实现基于restful接口的身份认证
基于restful接口的身份认证,可以采用jwt的方式实现,想了解jwt,可以查询相关资料,这里不做介绍~ 下面直接看如何实现 1.首先添加jwt的jar包,pom.xml中添加依赖包: <de ...
- Spring MVC中使用errors标签
先创建一个实体类,后续的验证都基于这个实体类: public class Goods { private String goodsName; private String city; private ...
- VCAP5-DCA Objective 1.3 – Configure and Manage Complex Multipathing and PSA Plug-ins
http://virtuallyhyper.com/2012/10/vcap5-dca-objective-1-3-configure-and-manage-complex-multipathing- ...
- python 3使用binascii方法的报错解决
环境是python 3 问题: 使用binascii方法一直出现报错TypeError: a bytes-like object is required, not 'str' #coding: utf ...