Interceptor拦截器

1. Interceptor介绍
Struts2中的interceptor它是基于spring aop思想,而aop思想它本质上是通过动态代理来实现。我们strtus2的拦截器它主要是拦截Action的操作,在action的执行前或执行后进行一些其它的功能操作。
拦截器链(拦截器栈)简单说,就是可以将多个拦截器形成一个链,在访问它们时依次访问。
以下是struts2的执行流程图

执行的过程:
当我们发送请求访问Action时,会被StrutsPrepareAndExecuteFilter拦截
在其doFilter方法内执行了
execute.executeAction(request, response, mapping);
这个代码执行后
dispatcher.serviceAction(request, response, mapping);
serviceAction方法执行
在这个方法执行过程中会创建Action代理对象
ActionProxy proxy = getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
namespace, name, method, extraContext, true, false);
通过proxy去执行了proxy.execute();
在execute方法内
return invocation.invoke();
invocation它是ActionInvocation一个对象
在invoke方法内

会去加载我们的配置文件,将配置文件中所有的interceptor得到进行遍历。
在struts-default.xml文件中定义了默认加载的拦截器栈 defaultStack

在每一个拦截器的interceptor方法内,又调用了DefaultActionInvocation的invoke方法,其实就是递归调用。
2. Interceptor作用与自定义Interceptor
我们使用intercep[tor可以在action执行前后进行处理工作。例如,完成权限控制。
问题:如何定义Interceptor?
所有的Interceptor都要实现一个接口
com.opensymphony.xwork2.interceptor.Interceptor
在配置文件中声明Interceptor

我们也可以将多个interceptor封装成一个stack

可以在Action的配置中引入自己的interceptor

在使用时name也可以引入一个interceptor stack.
注意:当我们显示的引入了一个自定义的Interceptor,那么默认的defaultStack就不会在导入,需要手动导入。
3. Interceptor练习
如果用户没有登录,不可以查看所有的商品信息。
创建一个Interceptor

在struts.xml文件中声明,并在指定的action中引用

完成功能
修改登录action中操作

将用户存储到session中。
在interceptor中完成权限控制

问题1:如何在login指定的视图页面上展示错误信息,例如权限不足。

问题2:我们在struts.xml文件中配置action时,可以使用*通配置符,这时它可以处理多个方法,你指定的interceptor只想拦截某一个方法,怎样处理?
我们可以使用Interceptor接口的一个实现类来完成操作

在配置时,就可以指定哪些方法拦截,哪些方法不拦截

原文地址:http://blog.51cto.com/13587708/2129811

时间: 2024-11-05 13:36:41

Interceptor拦截器的相关文章

springMVC3学习(七)--Interceptor拦截器

Spring为我们提供了:org.springframework.web.servlet.HandlerInterceptor接口, org.springframework.web.servlet.handler.HandlerInterceptorAdapter适配器, 实现这个接口或继承此类,能够很方便的实现自己的拦截器. 有下面三个方法: Action之前运行 public boolean preHandle(HttpServletRequest request, HttpServletR

SpringMVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

SpringMVC 中的Interceptor 拦截器

1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors>  <!-- 日志拦截器 -->  <mvc:interceptor>   <mvc:mapping path="/**" />   <mvc:exclude-mapping path="/static/**" />   <bean class="拦截器java代码路径" />  

Spring MVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

SpringMVC中使用Interceptor拦截器详解

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

interceptor 拦截器

<?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> <const

Mybatis Interceptor 拦截器原理 源码分析

Mybatis采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变Mybatis的默认行为(诸如SQL重写之类的),由于插件会深入到Mybatis的核心,因此在编写自己的插件前最好了解下它的原理,以便写出安全高效的插件. 代理链的生成 Mybatis支持对Executor.StatementHandler.PameterHandler和ResultSetHandler进行拦截,也就是说会对这4种对象进行代理. 通过查看Configuration类的源代码我们可以看到,每次都

登录检查 springMVC Interceptor拦截器实现登访问

web开发中经常会遇到浏览网页时,需要用户登陆之后才能访问一些重要的页面,当你访问一些"非法"页面时,也就是如果检查你还没有登录进该系统,则需要先登录,只要你成功登录就可以访问信管内容,实现该功能需要 继承拦截器HandlerInterceptorAdapter,这个类中有三个重要的方法,灰色老哥方法可以先不关注,主要代码实现是绿色那一部分,代码如下: /** * @author  tony * @date  2014-12-17 */ /** * 登录拦截器,只有登录之后才能访问 *

interceptor拦截器实现aop

项目开发过程中,总会出现一些公共性的基础性服务.例如:日志.事务等等.即使在之前的OO的开发过程中,利用封装.继承.多态这些特性已经使开发趋于这样一个比较易扩展.易维护的开发流程.但是对于这些公共性的服务,开发者越来越发现这些代码总是在不断的重复.所以AOP应势而生,基于切面编程其实基于OO这样一个开发理念而形成的.好了,关于AOP的充电过程自行去了解. 直入正题,本文主要是通过interceptor结合ejb的client调用server来实现这样一个aop的效果. 项目驱动,简单介绍一下大体

CXF对Interceptor拦截器的支持

前面在Axis中介绍过Axis的Handler,这里CXF的Interceptor就和Handler的功能类似.在每个请求响应之前或响应之后,做一些事情.这里的Interceptor就和Filter.Struts的Interceptor很类似,提供它的主要作用就是为了很好的降低代码的耦合性,提供代码的内聚性.下面我们就看看CXF的Interceptor是怎么样工作的. 1. 我们就用上面的HelloWorldService,客户端的调用代码重新写一份,代码如下: package com.hoo.