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

spring mvc中拦截器的配置和使用

程序员文章站 2022-05-23 11:19:17
...

自定义拦截器类(实现HandlerInterceptorAdapter接口)

public class Intercepter extends HandlerInterceptorAdapter{

		//不拦截的页面
		private static final String[] IGNORE_URI={"/adminPage","/uploadPage"};
		
		/**
		* 请求之后执行,用于清理资源
		* 在Interceptor的preHandle返回为true时执行
		*/
		@Override
		public void afterCompletion(HttpServletRequest request,
				HttpServletResponse response, Object handler, Exception ex)
				throws Exception {
			// TODO Auto-generated method stub
			System.out.println("after");
		}
		/**
		* Controller调用之后执行,可对ModelAndView操作
		* 当Interceptor的preHandle返回为true时执行
		*/
		@Override
		public void postHandle(HttpServletRequest request,
				HttpServletResponse response, Object handler,
				ModelAndView modelAndView) throws Exception {
			// TODO Auto-generated method stub
			System.out.println("post");
		}
		
		/**
		* preHandle拦截使用,在controller执行之前
		* 返回值为true才会向下执行,false的话请求就结束
		*/
		@Override
		public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
			// TODO Auto-generated method stub
			boolean flag=false;   //用于存储判断登录的结果
		    //获取请求路径
		 	String servletPath=request.getServletPath(); 
			//判断请求是否需要拦截
			for(String s:IGNORE_URI){
				if(servletPath.contains(s)){
		        	flag=true;    //如果是不拦截的网站,flag为true,跳出循环,转向下个方法
		        	break;
				}
		    }
		    //拦截请求
		    if(!flag){   //如果是非公开的页面↓
		        Admin admin=(Admin)request.getSession().getAttribute("ADMIN");
		        if(admin==null){
		            System.out.println("AuthorizationInterceptor拦截请求");
		            request.setAttribute("message", "请先登录管理员后再访问网站");
		            request.getRequestDispatcher("/error.jsp").forward(request, response);
		        }else{
		            //用户登陆过,验证通过,放行
		            System.out.println("AuthorizationInterceptor放行请求");
		            flag=true;
		        }
		    }
		    return flag;
		}

	}



在spring mvc中配置自定义拦截器


<!-- 不拦截静态请求 -->
    <mvc:default-servlet-handler />
    <!-- 配置拦截器 -->
    <mvc:interceptors>
    	<mvc:interceptor>
		// /**表示拦截所有请求
    		<mvc:mapping path="/**"/>
		//自定义的拦截器类
    		<bean class="com.entor.intercepter.Intercepter"></bean>
    	</mvc:interceptor>
    </mvc:interceptors>