下面给一张图片表示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的更多相关文章

  1. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  2. struts2自定义拦截器 设置session并跳转

    实例功能:当用户登陆后,session超时后则返回到登陆页面重新登陆. 为了更好的实现此功能我们先将session失效时间设置的小点,这里我们设置成1分钟 修改web.xml view plainco ...

  3. 12.Struts2自定义拦截器

    12.自定义拦截器        拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...

  4. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  5. Struts2自定义拦截器

    1. 需求 自定义拦截器实现,用户登录的访问控制. 2. 定义拦截器类 public class LoginInterceptor extends AbstractInterceptor { @Ove ...

  6. struts2自定义拦截器与cookie整合实现用户免重复登入

    目的:测试开发时,为了减少用户登入这个繁琐的登入验证,就用struts2做了个简单的struts2拦截器,涉及到了与cookie整合,具体的看代码 结构(两部份)=struts2.xml+自定义拦截器 ...

  7. 5、Struts2自定义拦截器

    一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影)    ActionMapper 传媒公司(包装明星) ActionMapping 明星           ...

  8. Struts2自定义拦截器处理全局异常

    今天在整理之前的项目的时候想着有的action层没有做异常处理,于是想着自定义拦截器处理一下未拦截的异常. 代码: package cn.xm.exam.action.safeHat; import ...

  9. Struts2自定义拦截器——完整实例代码

    比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...

随机推荐

  1. rpcserver不可用

    今天用打印机.电脑一直弹出rpcserver不可用.如图: 解决的方法:将例如以下服务启动就可以解决,如图:

  2. Window.sessionStorage

      The sessionStorage property allows you to access a session Storage object for the current origin. ...

  3. AOP在大规模软件开发项目中的应用(图)

    AOP在大规模软件开发项目中的应用(图) 本文的写作源于一个真实的大型软件开发项目,我们努力尝试在这个项目中推广应用AOP.在此我们将对曾经面临过的一些实际问题与困难进行分析,试图引发关于面向方面软件 ...

  4. Android版-微信APP支付

    首发地址: Android版-微信APP支付 欢迎留言.转发 微信极速开发系列文章(微信支付.授权获取用户信息等):点击这里 目录 1.注册账号.开发者认证 2.添加应用 3.申请微信支付 4.技术开 ...

  5. OpenGL ES 3.0顶点着色器(二)

    #version es uniform mat4 u_mvpMatrix; in vec4 a_position; in vec4 a_color;out vec4 v_color;void main ...

  6. linux curl工具

    http://www.linuxidc.com/Linux/2008-01/10891.htm http://www.cnblogs.com/-clq/archive/2012/01/29/23308 ...

  7. Oracle数据库imp

    创建表空间 create tablespace ICITY datafile 'D:\Oracle\oradata\orcl\ICITY.DBF' size 400M autoextend on ne ...

  8. docker toolbox在win7下的安装

    1.下载安装docker toolbox docker toolbox的下载地址: http://mirrors.aliyun.com/docker-toolbox/windows/docker-to ...

  9. JMX入门开发

    什么是JMX?或者是JMX是做什么的?我的理解是:可以远程管理/编辑JAVA对象.如图: 上面的SchemaName属性就是可以动态修改的,那么是如何做到的哪?下面咱们逐步分析. 一.首先假设咱们有个 ...

  10. xampp 教程

    xampp教程1 使用安装包进行安装 (目前有三种可供选择下载的XAMPP for Windows: 安装包   简单且安全:XAMPP 的便捷安装程序.) 使用安装包来安装XAMPP是最简单的方法. ...