拦截器是Struts2的一个重要特性,其定义在struts2-core-x.x.x.jar的struts-default.xml中,Struts2大多数核心功能的实现基于拦截器。拦截器可以在执行Action之前抓取用户请求以及在Action执行之后抓取向用户发送的响应,简言之拦截器在Action执行前后均会执行,可对Action的功能进行增强。
例如一般情况下,用户在打开某个页面前被要求登录,否则无法对资源进行访问,这就是拦截器中的权限拦截器在起作用。
Struts2中有许多内置拦截器(共35个,默认开启20个),每个拦截器均能完成相对独立的功能,而多个拦截器组合在一起并称为拦截器栈,最为重要的拦截器栈则是系统默认的DefaultStack。
权限拦截器访问示例:简单实现Struts2的权限拦截器
测试中需要注意的点:
① struts.xml中的package标签继承了struts-default拦截器栈后,默认执行35个中的20个拦截器
② 为action标签关联自定义拦截器后系统默认的拦截器()将不再生效
③ 若想要struts-default.xml中的默认拦截器栈继续生效则需在action标签中再编辑一条
自定义拦截器栈:
注册默认拦截器:
方法过滤拦截器:
拦截器的执行顺序:拦截器的执行顺序与在struts.xml中的注册顺序一致,过滤器的执行顺序与在web.xml中的注册顺序一致。