Struts2中自定义拦截器

拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 
拦截器 采用 责任链 模式 
*  在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。
        *  责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行 

在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )

下图为struts2的工作原理图:


struts2中常用的拦截器有以下几种:

        <interceptor-ref name="modelDriven"/> 模型驱动
<interceptor-ref name="fileUpload"/> 文件上传
<interceptor-ref name="params"> 参数解析封装 
<interceptor-ref name="conversionError"/> 类型转换错误
<interceptor-ref name="validation"> 请求参数校验
<interceptor-ref name="workflow"> 拦截跳转 input 视图

struts2 所有拦截器 都必须实现 Interceptor 接口, AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy。所有实际开发中,自定义拦截器 只需要 继承 AbstractInterceptor类, 提供 intercept 方法实现 提供了一个空白的实现。

下面为自定义用户是否登陆的拦截器的代码,没有登陆则跳转到登陆页面。

public class PrivilegeInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// 判断用户是否登陆
		if (ServletActionContext.getRequest().getSession()
				.getAttribute("user") == null) {
			// 未登陆
			return "login";
		} else {
			// 已经登陆
			return invocation.invoke();
		}
	}

}
定义好拦截器之后需要配置拦截器,有两种方式:

方式一(每个action都需要手动引入自定义的拦截器):

<?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>
    <constant name="struts.devMode" value="true" />
	
	<package name="basic" namespace="/" extends="struts-default">
		<!-- 注册拦截器 -->
		<interceptors>
			<interceptor name="privilege" class="fly.sun.PrivilegeInterceptor"></interceptor>
		</interceptors>
		
		<global-results>
			<result name="login">/login.jsp</result>
		</global-results>
	
		<action name="bookAction*" class="fly.sun.action.BookAction">
			<!-- 使用拦截器 -->
			<!-- 当使用自定义拦截器 后,默认拦截器 就会失效  ,所以需要手动加上默认拦截器-->
			<interceptor-ref name="defaultStack"></interceptor-ref>
			<interceptor-ref name="privilege"></interceptor-ref>
		</action>
		
	</package>	
	

</struts>
方式二:定义拦截器栈,就不需要为每个action单独引入自定义的拦截器了:

<?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>
    <constant name="struts.devMode" value="true" />
	
	<package name="basic" namespace="/" extends="struts-default">
		<!-- 注册拦截器 -->
		<interceptors>
			<interceptor name="privilege" class="fly.sun.PrivilegeInterceptor"></interceptor>
			<!-- 自定义拦截器栈 -->
			<interceptor-stack name="privilegeStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="privilege"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		
		<!-- 设置当前包 所有Action 都使用 自定义拦截器栈 -->
		<default-interceptor-ref name="privilegeStack"></default-interceptor-ref>
		
		<global-results>
			<result name="login">/login.jsp</result>
		</global-results>
	
		<!-- 图书管理 -->
		<action name="bookAction" class="fly.sun.action.BookAction"></action>
		
	</package>	
	

</struts>









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值