在struts.xml中添加如下配置:
<!-- 配置全局拦截器 -->
<package name="all" extends="struts-default"><interceptors>
<!-- 定义权限控制拦截器 -->
<interceptor name="authority"
class="akai.cost.ms.base.AuthInterceptor" />
<!-- 定义一个包含权限控制的拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器 -->
<default-interceptor-ref name="mydefault" />
<!-- 定义全局处理结果 -->
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
</package>
使用方法:其他包继承这个包名就可以了
<package name="abc" extends="all" namespace="/">
附:拦截器类
- package akai.cost.ms.base;
- import javax.servlet.http.HttpSession;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.Action;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
- public class AuthInterceptor extends MethodFilterInterceptor{
- @Override
- public String intercept(ActionInvocation invocation) throws Exception {
- HttpSession session = ServletActionContext.getRequest().getSession();
- String userName = (String)session.getAttribute("System_UserName");
- if(userName == "" || userName == null){//错误,回到登录界面
- return Action.LOGIN;
- }else{
- return invocation.invoke();
- }
- }
- }
- struts.xml文件如下
- <?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>
<package name="all" namespace="/" extends="struts-default" >
<interceptors>
<!-- 1.注册拦截器 -->
<interceptor name="myInter3" class="cn.itcast.a_interceptor.MyInterceptor3"></interceptor>
<!-- 2.注册拦截器栈 -->
<interceptor-stack name="myStack">
<!-- 自定义拦截器引入(建议放在20个拦截器之前) -->
<interceptor-ref name="myInter3">
<!-- 指定哪些方法不拦截
<param name="excludeMethods">add,delete</param> -->
<!-- 指定哪些方法需要拦截 -->
<param name="includeMethods">add,delete</param>
</interceptor-ref>
<!-- 引用默认的拦截器栈(20个) -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 3.指定包中的默认拦截器栈 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
</package>
<package name="tag" namespace="/" extends="struts-default" > - <action name="Demo1Action_*" class="cn.itcast.a_interceptor.Demo1Action" method="{1}" >
<!-- 为Action单独指定走哪个拦截器(栈)
<interceptor-ref name="myStack"></interceptor-ref>-->
<result name="success" type="dispatcher" >/index.jsp</result>
</action>
<action name="Demo2Action" class="cn.itcast.b_tag.Demo2Action" method="execute" >
<result name="success" type="dispatcher" >/tag1.jsp</result>
</action>
<action name="Demo3Action" class="cn.itcast.b_tag.Demo3Action" method="execute" >
<result name="success" type="dispatcher" >/tag2.jsp</result>
</action>
</package>
</struts>
如何在拦截器分别执行Action前和Action后代码
1.如果一个系统中配置了多个拦截器,根据拦截器配置的顺序不同,执行拦截器的顺序也不一样。通常认为,先配置的拦截器,会先获得执行的机会,但是实际情况不是这样。execute()方法执行之前,配置在前面的拦截器,会先对用户的请求起作用。execute()方法执行之后,配置在后面的拦截器,会先对用户的请求起作用。(两头向中间靠拢的执行)
定义拦截器
- package com.sh.interceptor;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
- public class DefaultInterceptor extends AbstractInterceptor{
- private String name;
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public String intercept(ActionInvocation invocation) throws Exception {
- System.out.println(name+"执行了。。。");
- String result=invocation.invoke();
- System.out.println(name+"执行完毕。。。");
- return result;
- }
- }
action
- package com.sh.action;
- import com.opensymphony.xwork2.ActionSupport;
- public class DefaultAction extends ActionSupport {
- public String execute(){
- return SUCCESS;
- }
- }
struts.xml
- <?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>
- <!-- 如果 注解的action配置改变时候不需要重新启动tomcate -->
- <constant name="struts.devMode" value="false"/>
- <constant name="struts.convention.classes.reload" value="true" />
- <package name="default" extends="struts-default">
- <interceptors>
- <interceptor name="inter1" class="com.sh.interceptor.DefaultInterceptor"/>
- <interceptor name="inter2" class="com.sh.interceptor.DefaultInterceptor"/>
- <interceptor name="inter3" class="com.sh.interceptor.DefaultInterceptor"/>
- </interceptors>
- <action name="default" class="com.sh.action.DefaultAction">
- <result>/index.jsp</result>
- <interceptor-ref name="inter1">
- <param name="name">拦截器1</param>
- </interceptor-ref>
- <interceptor-ref name="inter2">
- <param name="name">拦截器2</param>
- </interceptor-ref>
- <interceptor-ref name="inter3">
- <param name="name">拦截器3</param>
- </interceptor-ref>
- <interceptor-ref name="defaultStack"/>
- </action>
- </package>
- </struts>
--访问
http://localhost:8080/Struts2_interceptorSort/default.action
--控制台的信息 如下
拦截器1执行了。。。
拦截器2执行了。。。
拦截器3执行了。。。
拦截器3执行完毕。。。
拦截器2执行完毕。。。
拦截器1执行完毕。。。