Spring-boot拦截器Interceptor使用

1. 自定义拦截器

Spring-boot中的拦截器通过实现HandlerInerceptor中的方法来定义,其中包含三个方法
preHandle:请求执行前执行
postHandle:请求结束执行
afterCompletion:视图渲染完成后执行
创建自定义拦截器类TestInterceptor.java

TestInterceptor.java

package com.seasky.servicesitespring.interceptor;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestInterceptor implements HandlerInterceptor {
    private static final Logger logger = LogManager.getLogger();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //这里在请求执行前获取token
        String token = request.getHeader("Authorization");
        logger.info("TestInterceptor preHandle token: " + token);

        if(token == null || token.isEmpty()) {
            return false;//返回false表示被拦截,后续请求不在执行
        }

        return true;//返回true表示通过,继续执行后续拦截器,如果是最后一个拦截器,则执行controller
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.info("TestInterceptor postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("TestInterceptor afterCompletion");
    }
}

2. 注册拦截器

Spring-boot中通过实现接口WebMvcConfigurer中的addInterceptors方法注册自定义的拦截器。
需要注意不要使用WebMvcConfigurerAdapter,该方法已经被官方标注过时。
创建拦截器注册类InterceptorConfig.java

InterceptorConfig.java

package com.seasky.servicesitespring.config;

import com.seasky.servicesitespring.interceptor.TestInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

//使用Configuration注解,使spring-boot启动时可以自动扫描
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    /**
     * 注册拦截器方法
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加自定义的拦截器,并设置拦截路径规则
        registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");
    }
}


之后运行程序,调用controller时会发现拦截器已经生效,命令行中可以看到日志输出。

你可能感兴趣的:(Spring-boot拦截器Interceptor使用)