(Struts2)自定义的拦截器和配置

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>


下一篇:OGNL表达式的概述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值