【Spring Boot】--拦截器配置

实现HandlerInterceptor接口

/**
 * @Auther: chisj chisj@foxmal.com
 * @Date: 2018-12-03 19:09
 * @Description:
 */
@Slf4j
public class AuthInterceptor implements HandlerInterceptor {

    /**
     * 预处理方法,在调用控制器方法之前调用
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        log.info("preHandle is run...");
        return true;
    }

    /**
     * 处理后方法,在调用控制器方法之后调用
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                      Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        log.info("postHandle is run...");
    }

    /**
     * 整个请求处理完毕调用
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, @Nullable Exception ex) throws Exception {
        log.info("afterCompletion is run...");
    }

}

实现WebMvcConfigurer接口

/**
 * @Auther: chisj chisj@foxmal.com
 * @Date: 2018-12-03 19:02
 * @Description:
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Bean
    public AuthInterceptor authInterceptor() {
        return new AuthInterceptor();
    }


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 添加拦截器
        registry.addInterceptor(authInterceptor()).addPathPatterns("/**");
    }

}

测试结果

2018-12-04 09:52:00.439  INFO 12104 --- [nio-8989-exec-1] o.a.c.c.C.[.[localhost].[/WeightSystem]  : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-12-04 09:52:00.440  INFO 12104 --- [nio-8989-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2018-12-04 09:52:00.457  INFO 12104 --- [nio-8989-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 17 ms
2018-12-04 09:52:00.462  INFO 12104 --- [nio-8989-exec-1] org.chisj.weight.config.CorsFilter       : *********************************过滤器被使用**************************
2018-12-04 09:52:00.466  INFO 12104 --- [nio-8989-exec-1] org.chisj.weight.config.AuthInterceptor  : preHandle is run...
pageNum = 1
pageSize = 3
2018-12-04 09:52:00.557  INFO 12104 --- [nio-8989-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2018-12-04 09:52:00.697  INFO 12104 --- [nio-8989-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2018-12-04 09:52:00.776  INFO 12104 --- [nio-8989-exec-1] org.chisj.weight.config.AuthInterceptor  : postHandle is run...
2018-12-04 09:52:00.777  INFO 12104 --- [nio-8989-exec-1] org.chisj.weight.config.AuthInterceptor  : afterCompletion is run...

参考博客

Spring Boot 拦截器无效,不起作用
spring-boot 如何添加拦截器配置(自定义)

在使用`mybatis-spring-boot-starter:2.0.1`时,如果遇到拦截器不生效的问题,可能是由于几个常见的原因造成的。下面是一些可能导致拦截器不生效的原因以及解决方法: 1. **拦截器配置未生效**: 确保你已经在Spring Boot配置文件中或者使用Java配置类正确配置拦截器。如果你是通过配置配置的,确保使用了`@Configuration`注解,并且拦截器的注册方法使用了`@Bean`注解。 2. **拦截器未正确注册**: 在配置类中注册拦截器时,需要使用`Interceptor`接口的实现类,然后通过`InterceptorRegistry`的`addInterceptor`方法将拦截器加入到拦截器链中。 3. **SQL会话(SqlSession)未正确获取**: 如果你的拦截器逻辑依赖于`SqlSession`,确保在拦截器执行过程中正确获取`SqlSession`。通常情况下,`SqlSession`是由MyBatis框架在执行SQL时自动管理的。 4. **拦截器链执行顺序问题**: 如果有多个拦截器,它们将按照注册的顺序执行。如果一个拦截器依赖于另一个拦截器的逻辑,需要确保它们的执行顺序是正确的。 5. **拦截器本身的逻辑问题**: 检查拦截器的实现逻辑是否正确,比如在`intercept`方法中的操作是否会导致后续流程中断,或者是否有其他逻辑错误导致拦截器无法按预期工作。 6. **Spring Boot应用的扫描路径问题**: 确保你的拦截器类位于Spring Boot的组件扫描路径下,这样Spring容器才能发现并管理它。 7. **拦截器版本兼容问题**: 如果你是在升级后遇到了问题,可能是因为新版本中存在某些变更,需要检查升级说明或者相关的迁移指南,以确保所有配置都是兼容的。 解决这类问题通常需要逐一排查上述可能的原因,调试和检查配置代码,确保每一步都按照预期工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值