Struts2配置拦截器和拦截链

1.拦截器的配置

此处以“检测用户是否登录”为例,

MyInterceptor.java

public class MyInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("---------intercept()---------");
		Map<String, Object> session = invocation.getInvocationContext().getSession();
		if (session.get("username") != null) {
			return invocation.invoke();
		} else {
			return "checkError";
		}
	}
}


struts.xml文件中配置:

	<package name="testLogin" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="myInterceptor" class="MyInterceptor" />
			<!-- class="MyInterceptor"已在spring配置文件中配置bean -->
		</interceptors>
		
		<action name="user" class="UserManagerAction">
			<result name="success">/user.jsp</result>
			<result name="error" type="redirect">/error.jsp</result>
			<result name="checkError">/checkSession.jsp</result>
			<interceptor-ref name="myInterceptor" />
			<interceptor-ref name="defaultStack" />
		</action>
	</package>

 

注意:action中,设置好自己的interceptor后,别忘了配置defaultStack拦截器。

defaultStack是Struts2默认的拦截器,帮助我们完成许多struts2提供的服务。

2.拦截链的配置

当一个action需要多个拦截器时,我们可以配置拦截链

	<package name="testLogin" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="myInterceptor" class="MyInterceptor" />
			<interceptor name="otherMyInterceptor" class="OtherMyInterceptor" />
			<!-- 已在spring的applicationContext-bean.xml中配置相关bean -->
			
			<interceptor-stack name="defaultInterceptor">
				<interceptor-ref name="myInterceptor" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
			
			<interceptor-stack name="otherDefaultInterceptor">
				<interceptor-ref name="otherMyInterceptor" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
		</interceptors>
		
		<action name="user" class="UserManagerAction">
			<result name="success">/user.jsp</result>
			<result name="error" type="redirect">/error.jsp</result>
			<result name="checkError">/checkSession.jsp</result>
			<interceptor-ref name="otherDefaultInterceptor" />
		</action>
	</package>

3.设置默认拦截器/拦截链(普遍配置)

当多个action都需要配置相同的拦截器/拦截链时,考虑设置默认的拦截器/拦截链,则不用在每个action中依次配置了。

	<package name="testLogin" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="myInterceptor" class="MyInterceptor" />
			<interceptor name="otherMyInterceptor" class="OtherMyInterceptor" />
			<!-- 已在spring的applicationContext-bean.xml中配置相关bean -->
			
			<interceptor-stack name="defaultInterceptor">
				<interceptor-ref name="myInterceptor" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
			
			<interceptor-stack name="otherDefaultInterceptor">
				<interceptor-ref name="otherMyInterceptor" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
		</interceptors>
		
		<default-interceptor-ref name="defaultInterceptor" />
		
		<action name="user" class="UserManagerAction">
			<result name="success">/user.jsp</result>
			<result name="error" type="redirect">/error.jsp</result>
			<result name="checkError">/checkSession.jsp</result>
		</action>
	</package>

4.屏蔽默认拦截器/拦截链(特殊配置)

当所在package中设置了默认拦截器/拦截链,某些个别action需要特殊拦截器/拦截链时,单独在action中配置所需拦截器/拦截器,即可屏蔽默认拦截器/拦截链,执行单独设置的拦截器/拦截链。

	<package name="testLogin" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="myInterceptor" class="MyInterceptor" />
			<interceptor name="otherMyInterceptor" class="OtherMyInterceptor" />
			<!-- 已在spring的applicationContext-bean.xml中配置相关bean -->
			
			<interceptor-stack name="defaultInterceptor">
				<interceptor-ref name="myInterceptor" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
			
			<interceptor-stack name="otherDefaultInterceptor">
				<interceptor-ref name="otherMyInterceptor" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
		</interceptors>
		
		<default-interceptor-ref name="defaultInterceptor" />
		
		<action name="user" class="UserManagerAction">
			<result name="success">/user.jsp</result>
			<result name="error" type="redirect">/error.jsp</result>
			<result name="checkError">/checkSession.jsp</result>
			<interceptor-ref name="otherDefaultInterceptor" />
		</action>
	</package>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值