springboot项目搭建之拦截器

首先通过实现HandlerInterceptor接口来创建一个拦截器类

这个接口一共有三个方法,preHandle是请求到controller之前执行的,只有返回true时请求才会继续进行

postHandle是返回modelAndView之前执行的,但是只有preHandle方法返回true后经过controller返回时才会执行,否则返回false则不会执行,afterCompletion是请求结束后才执行,同样需要preHandle返回true,该方法通常用于统一的日志处理,异常处理,资源清理等工作

package org.wcy.config;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * <p>Title : BaseHandlerInterceptor</p>
 * <p>Description : 系统最高权限拦截器</p>
 * <p>DevelopTools : Eclipse_x64_v4.8.0</p>
 * <p>DevelopSystem : Windows 10</p>
 * <p>Company : org.wangchenyang</p>
 * @author : wangChenYang
 * @date : 2018年11月25日 下午12:09:05
 * @version : 12.0.0
 */
public class BaseHandlerInterceptor implements HandlerInterceptor {


	/**
	 * 进入Handler方法之前执行
	 * 
	 * @param request  HttpServletRequest
	 * @param response HttpServletResponse
	 * @param handler  handler
	 * @return true(放行) or false(拦截)
	 */
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.print("before:");
		return true;
	}

	/**
	 * 进入Handler方法之后,返回modelAndView之前执行(可以往MV里面填充公用的ModelAndView)
	 * 
	 * @param request  HttpServletRequest
	 * @param response HttpServletResponse
	 * @param handler  handler
	 * @param mv       ModelAndView
	 */
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv)
			throws Exception {
		System.out.print("mv 执行:");
	}

	/**
	 * 执行Handler完成后执行(统一异常处理,统一日志处理)
	 * 
	 * @param request  HttpServletRequest
	 * @param response HttpServletResponse
	 * @param handler  handler
	 * @param e        异常信息
	 */
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e)
			throws Exception {
		System.out.print("after:");
	}

}

在SpringMVC中拦截器的实现可以通过配置xml文件内的mvc:interceptor标签来添加自定义的拦截器类,

而springboot没有xml。这个时候就需要通过继承WebMvcConfigurationSupport这个类来实现拦截器的添加了,

这个类就是我在上个文章内提到的用以配置静态文件的类,同时它也可以用以装载自定义拦截器。

addInterceptors用于指定拦截器,addPathPatterns用于指定拦截的URL,excludePathPatterns排除静态文件拦截

package org.wcy.config;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
 
/**
 * <p>Title : MyWebMvcConfig</p>
 * <p>Description : 自定义静态资源映射路径和静态资源存放路径</p>
 * <p>DevelopTools : Eclipse_x64_v4.7.1</p>
 * <p>DevelopSystem : Windows 10</p>
 * <p>Company : org.wcy</p>
 * @author : WangChenYang
 * @date : 2018年11月14日 下午9:07:33
 * @version : 0.0.1
 */
@Configuration
public class MyWebMvcConfig extends WebMvcConfigurationSupport {
 
 
	/**
	 * 添加自定义静态资源映射路径和静态资源存放路径(图片)
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		System.out.println("配置静态资源");
		registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/WEB-INF/resources/");
		super.addResourceHandlers(registry);
	}
	
	/**
	 * 添加拦截器
	 * @param registry
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 多个拦截器组成一个拦截器链
		// addPathPatterns 用于添加拦截规则
		// excludePathPatterns 用户排除拦截
		// excludePathPatterns排除静态文件拦截
		registry.addInterceptor(new BaseHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/resources/**");
		super.addInterceptors(registry);
	}
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值