Struts为所有包配置拦截器

想定义拦截器拦截非登陆用户操作,但是我的action分别在不同的package中,那是不是我的拦截器必须要在每个package中都要定义呢? 可不可以定义一个公用的?
1. 首先拦截器的范围是package级别的,正常情况下每个package的interceptors是不一样的,除非继承
那如何为所有的package下的action都定义一个interceptor呢?答案就是继承。
<package name="default" extends="struts-default"  namespace="/">
   <interceptors>
 <interceptor name="custom" class="MyIntercepter"></interceptor>
   </interceptors>
</package>
<span style="white-space:pre">	</span><package name="defaultPackage" extends="struts-default">
		<interceptors>
			<!-- 登录验证 -->
			<interceptor name="loginVerify" class="ray.interceptors.LoginInterceptor"></interceptor>
			<interceptor-stack name="verifyStack">
				<interceptor-ref name="loginVerify"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="verifyStack"></default-interceptor-ref>

		<!-- 错误处理Action -->
		<global-results>
			<result name="error">/WEB-INF/jsp/error.jsp</result>
			<result name="login" type="redirect">/index.jsp</result>
		</global-results>
	</package>
	<!-- 所有的action都应该放在对应的package下 -->
	<package name="login" extends="defaultPackage" namespace="/">
		<!-- struts.xml里action的class应写成spring里对应bean的id -->
		<action name="login" class="loginAction" method="login">
			<result name="success">/WEB-INF/jsp/manage.jsp</result>
			<result name="input" type="redirect">/index.jsp</result>
		</action>
	</package>
	<package name="user" extends="defaultPackage" namespace="/user">
		<action name="*_empty" method="{1}" class="ray.action.EmptyAction">
			<result name="{1}">/WEB-INF/jsp/user/{1}.jsp</result>
		</action>
	</package>
2.然后定义一个Interceptor
package ray.interceptors;

import ray.tools.Consts;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginInterceptor extends AbstractInterceptor  {

	private static final long serialVersionUID = 1L;
	private ActionContext context = null;
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		this.context = invocation.getInvocationContext();
		Object object = context.getSession().get(Consts.USERSESSION);
		if(object == null){
			return Action.LOGIN;
		} else {
			return invocation.invoke();
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值