自定义拦截器的配置

案例:登陆拦截的拦截器

第一步:写拦截器

/**
 * 检查登录的拦截器
 *
 */
public class CheckLoginInterceptor extends MethodFilterInterceptor {

	
	protected String doIntercept(ActionInvocation arg0) throws Exception {
		//1.获取session 对象
		HttpSession session=ServletActionContext.getRequest().getSession();
		//2.在session域中找user对象
		User user=(User)session.getAttribute("user");
		//3.有 放行
		if(user==null){
			return "login";
		}
		//4.前往登录页面
		return arg0.invoke();
		
	}
}

第二步:重置默认拦截器栈

	<!-- 自定义拦截器的配置 -->
	<package name="mydefault" extends="struts-default" abstract="true">
		<interceptors>
		  <interceptor name="CheckLoginInterceptor" class="com.itheima.web.interceptor.CheckLoginInterceptor"></interceptor>
		  <interceptor-stack name="myDefaultStack">
		  	<interceptor-ref name="defaultStack"></interceptor-ref>
		  	<interceptor-ref name="CheckLoginInterceptor"></interceptor-ref>
		  </interceptor-stack>
		</interceptors>
		<!-- 重置默认拦截器栈 -->
		<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
		
		 <!-- 全局结果视图 -->
		<global-results>
			<result name="login">/login/login.jsp</result>
		</global-results>
	</package>

说一下全局结果视图的作用:避免代码冗余,如果不写全局视图,那么每个动作类都要多写一个

<result name="login">/login/login.jsp</result>。

第三步:那个包里面的动作需要拦截,就继承MyDefault包

这里需要说明一点:xxx包继承myDefault包。这里的执行顺序是这样的,先找动作类自己的,如果类中没有,在去全局视图中查找。 

<package name="user" extends="mydefault" namespace="/user">
		<!-- 添加用户 -->
		<action name="add"  class="com.itheima.web.action.UserAction" method="add">
			<!-- 配置上传文件的扩展名限制 -->
			<interceptor-ref name="defaultStack">
				<param name="fileUpload.allowedExtensions">.doc,.docx</param>
			</interceptor-ref>
			<result>/user/list.jsp</result>
			<result name="input">/user/add.jsp</result>
		</action>
<package>

猜你喜欢

转载自blog.csdn.net/qq_39665334/article/details/82823993