欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自定义拦截器的配置

程序员文章站 2022-07-03 20:07:25
...

案例:登陆拦截的拦截器

第一步:写拦截器

/**
 * 检查登录的拦截器
 *
 */
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>

 

 

上一篇: logback配置文件

下一篇: logback