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此路径时,后台打印出了日志。

posted @ 2020-01-02 11:14  wanghq1994  阅读(163)  评论(0编辑  收藏  举报