spring boot使用拦截器
1.编写一个拦截器
首先,我们先编写一个拦截器,和spring mvc方式一样。实现HandlerInterceptor类,代码如下
package com.example.demo.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 拦截器类 */ public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("已经进去了登陆拦截器..."); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
我们简单实现了一个登陆拦截器,里面内容十分简单,在进入处理类前,打印一句话,preHandle()方法返回true表示放行,继续往下走,返回false直接结束。
2.编写一个配置类加载拦截器
还需要编写一个配置类,对拦截器进行加载,是拦截器功能生效,我们可以继承WebMvcConfigurerAdapter类,但是我看这个类已经过时,所以我们直接实现类WebMvcConfigurer。
package com.example.demo.config; import com.example.demo.interceptor.LoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * 配置类 */ @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { //需要拦截的路径 String[] addPathPatterns = { "/boot/**" }; //不拦截路径 String[] excludePathPatterns = { "/boot/hello" }; //注册登录拦截器 InterceptorRegistration interceptorRegistration = registry.addInterceptor(new LoginInterceptor()); interceptorRegistration.addPathPatterns(addPathPatterns);//添加拦截路径 interceptorRegistration.excludePathPatterns(excludePathPatterns);//添加不拦截路径 } }
我们实现的addInterceptors()方法,通过名字可以发现其意思就是将拦截器注册进去。我们需要将此类添加注解@Configuration,就是表示此类是一个配置类,让spring boot能够扫描到此类。里面具体操作就是将拦截器注册进去,然后将需要拦截的路径和不需要拦截的路径明确出来。最后我们看下效果。
我们对/boot/**也就是此种形式的路径都增加了拦截,但是其中除了/boot/hello此路径。所以当我们访问http://127.0.0.1:8088/demo/boot/hello时,后台没有任何日志打印。当我们访问http://127.0.0.1:8088/demo/boot/getStudent此路径时,后台打印出了日志。