0
点赞
收藏
分享

微信扫一扫

SpringBoot-SpringMVC拦截器简单使用

kolibreath 2022-04-13 阅读 59

简单使用

在springboot中使用 jar包加入web启动器

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

实现HandlerInterceptor重写方法

@Slf4j
@Component
public class TokenHandler implements HandlerInterceptor {

    @Value("false")
    private String openWebMvcConfig;

    /**
     * 业务处理器请求之前执行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (!Boolean.parseBoolean(openWebMvcConfig)){
            log.info("关闭检查");
            return true;
        }
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    /**
     * 业务处理器请求执行完成后,生成试图之前执行
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
     * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

这个时候我们只是实现了拦截应该调用方法的逻辑接口,我们还需要配置一些调用这个方法的配置,实现WebMvcConfigurer

@Component
public class WebMvcConfig implements WebMvcConfigurer {

    private final TokenHandler tokenHandler;

    public WebMvcConfig(TokenHandler tokenHandler){
        this.tokenHandler = tokenHandler;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry
                // 添加拦截器到容器
                .addInterceptor(tokenHandler)
                // 拦截地址
                // ?匹配一个字符
                // *匹配0个或多个字符
                // **匹配0个或多个目录
                .addPathPatterns("/moke/**")
                // 排除掉不拦截的路径
                .excludePathPatterns("/moke/post")
                // 多拦截器执行顺序 数字越小执行越早
                .order(0);
//        可以添加多个 如:registry.addInterceptor(testHandler).addPathPatterns("/moke/error");
    }
}
举报

相关推荐

0 条评论