前言
在前一篇文章 SpringBoot启动后执行和关闭前执行代码介绍了Spring启动和关闭的时候执行代码,还有一种情况,需要每一次请求的时候做一些操作,例如检查请求是否合法(Token是否过期,是否合法)等
这种用到了HandlerInterceptor(SpringBoot)/HandlerInterceptor(Spring)
SpringBoot下的实现
第一步,新建一个过滤器类继承
HandlerInterceptor
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { // 根据request来确定是否需要拦截本次请求(比如根据request得到header里面约定的token等等),如果需要拦截,返回false,否则返回true return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) { } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { } }
第二部,把MyInterceptor配置到拦截器里面去,新建(如果已存在就改写)一个类继承WebMvcConfigurerAdapter
@Configuration public class MyConfiguration extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { // 注册拦截器,并配置需要拦截的路径 registry.addInterceptor(new MyInterceptor().addPathPatterns("/admin/**"); super.addInterceptors(registry); } }
Spring下的实现
Spring下是继承HandlerInterceptorAdapter,如下:
public class MyInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 根据request来确定是否需要拦截本次请求(比如根据request得到header里面约定的token等等),如果需要拦截,返回false,否则返回true return true; } }
注册拦截器,我们假设是用xml写的配置文件(spring-servlet.xml)
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!--其他配置省略--> <!--注册拦截器,并配置需要拦截的路径--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/admin/**"/> <bean class="com.terrynow.test.interceptor.MyInterceptor" /> </mvc:interceptor> </mvc:interceptors> </beans>
文章评论