1. 拦截器的概述
  * 拦截器就是AOP(Aspect-Oriented Programming)的一种实现。(AOP是指用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。)
  * 过滤器:过滤从客服端发送到服务器端请求的
  * 拦截器:拦截对目标Action中的某些方法进行拦截
    * 拦截器不能拦截JSP
    * 拦截到Action中某些方法
2. 拦截器和过滤器的区别
  1)拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的
  2)过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器
  3)拦截器只能对Action请求起作用(Action中的方法),而过滤器可以对几乎所有的请求起作用(CSS JSP JS)
  * 拦截器 采用 责任链 模式
    > 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链
    > 责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行
  * 在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )
3. Struts2的核心是拦截器

自定义拦截器和配置(登录认证)
编写拦截器,需要实现Interceptor接口
/**
* 自定义拦截器,判断当前系统是否已经登录,如果登录,继续执行。如果没有登录,跳转到登录页面
* @author Administrator
*/
public class UserInterceptor extends MethodFilterInterceptor{ private static final long serialVersionUID = 335018670739692955L; /**
* 进行拦截的方法
*/
protected String doIntercept(ActionInvocation invocation) throws Exception {
// 获取session对象
User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");
if(user == null){
// 说明,没有登录,后面就不会执行了
return "login";
}
return invocation.invoke();
} }
<package name="crm" namespace="/" extends="struts-default">

        <!-- 配置拦截器 -->
<interceptors>
<interceptor name="UserInterceptor" class="com.itheima.interceptor.UserInterceptor"/>
</interceptors> <global-results>
<result name="login">/login.htm</result>
</global-results> <!-- 配置用户的模块 -->
<action name="user_*" class="com.itheima.action.UserAction" method="{1}">
<!-- <result name="login">/login.htm</result> -->
<result name="success">/index.htm</result>
<interceptor-ref name="UserInterceptor">
<!-- login方法不拦截 -->
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
</action> <!-- 客户模块 -->
<action name="customer_*" class="com.itheima.action.CustomerAction" method="{1}">
<interceptor-ref name="UserInterceptor"/>
<interceptor-ref name="defaultStack"/>
</action> </package>
拦截器栈
 <!-- 第二种方式:定义拦截器栈 -->
<interceptors>
<interceptor name="DemoInterceptor" class="com.itheima.interceptor.DemoInterceptor"/>
<!-- 定义拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="DemoInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors> <action name="userAction" class="com.itheima.demo3.UserAction">
<!-- 只要是引用自己的拦截器,默认栈的拦截器就不执行了,必须要手动引入默认栈
<interceptor-ref name="DemoInterceptor"/>
<interceptor-ref name="defaultStack"/>
--> <!-- 引入拦截器栈就OK -->
<interceptor-ref name="myStack"/>
</action>
只要是引用自己的拦截器,默认栈的拦截器就不执行了,必须要手动引入默认栈

最新文章

  1. xcode7 __weak 导致报错 is unavailable
  2. sql server output用法说明
  3. adb 连接时 device offline
  4. symbolicatecrash位置
  5. HDU 5904 LCIS
  6. hdu1760博弈SG
  7. C语言 左值、右值
  8. jquery性能优化的38个建议
  9. Python实战171203统计
  10. WebApi发布到外网提示404问题
  11. python: 爬取[博海拾贝]图片脚本
  12. 洛谷P3354 河流
  13. 记web模拟手机环境已经微信开发者工具中可正常运行,实体机运行报错问题
  14. 从零开始学 Web 之 jQuery(四)元素的创建添加与删除,自定义属性
  15. Shell - 简明Shell入门02 - 变量(Variable)
  16. HDU1815(二分+2-SAT)
  17. Linux每日小技巧---统计服务器IP连接数
  18. lucene总结——(十七)
  19. 为 Tomcat 安装 apr
  20. 每日英语:Why &#39;The Voice&#39; Is China&#39;s No. 1 TV Show

热门文章

  1. git 的版本控制
  2. linux 之文件重命名
  3. 【Luogu】【关卡2-8】广度优先搜索(2017年10月)
  4. python_django_富文本
  5. Nginx---配置系统(自己总结)
  6. thinkcmf链接多个数据库
  7. 【转】java即时消息推送
  8. SaaS上云工具包为企业应用构筑上云之梯
  9. NOIP模拟测试18(T3待更新)
  10. java——文件