A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】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接口的一个实现类来完成操作
在配置时,就可以指定哪些方法拦截,哪些方法不拦截
传智播客·黑马程序员郑州校区地址
河南省郑州市高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话0371-56061160 / 61/62
来校路线地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马