1、编写拦截器,继承AbstractInterceptor的方式,重写intercept方法
/**
* 编写简单的拦截器
* @author Administrator
*/
public class DemoInterceptor extends AbstractInterceptor {
/**
* intercept用来进行拦截的
*/
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("Action方法执行之前...");
// 执行下一个拦截器
String result = invocation.invoke();
System.out.println("Action方法执行之后...");
return result;
}
}
Action类:
public class UserAction extends ActionSupport{
public String execute() throws Exception {
System.out.println("我是Action, 正常执行...");
return NONE;
}
}
2、需要在是struts.xml中进行拦截器的配置,配置一共有两种方式
方式一:
<package name="demo3" namespace="/" extends="struts-default">
<!-- 定义了拦截器 第一种方式 -->
<interceptors>
<interceptor name="DemoInterceptor" class="com.jadan.interceptor.DemoInterceptor"></interceptor>
</interceptors>
</package>
方式二:
<package name="demo3" namespace="\" extends="struts-default">
<!-- 第二种方式: 定义拦截器栈 -->
<interceptors>
<interceptor name="DemoInterceptor" class="com.jadan.interceptor.DemoInterceptor"></interceptor>
<!-- 定义拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="DemoInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="userAction" class="com.jadan.demo3.UserAction" method="execute">
<!-- 只要是引用自己的拦截器,默认栈的拦截器就不会执行,必须要手动引入默认栈
<interceptor-ref name="DemoInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
-->
<!-- 引入拦截器栈 -->
<interceptor-ref name="myStack"></interceptor-ref>
</action>
</package>
3、使用拦截器判断用户是否已经登录
/**
* 自定义拦截器,判断当前系统是否已经登录,如果登录,继续执行。如果没有登录,跳转到登录页面
* @author Administrator
*/
public class UserInterceptor extends MethodFilterInterceptor {
/**
* 进行拦截的方法
*/
protected String doIntercept(ActionInvocation invocation) throws Exception {
// 获取session 对象
User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");
if(user == null) {
// 说明: 没有登录,后面就不会执行了
return "login";
}
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="crm" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="UserInterceptor" class="com.itheima.interecptor.UserInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="UserInterceptor">
<!-- login方法不拦截 -->
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</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="myStack"></interceptor-ref>
</action>
<!-- 客户模块 -->
<action name="customer_*" class="com.itheima.action.CustomerAction" method="{1}">
<result name="list">/jsp/customer/list.jsp</result>
<interceptor-ref name="myStack"></interceptor-ref>
</action>
</package>
</struts>