SpringBoot项目配置拦截器无效解决方案

最近项目换了新框架,改用SpringBoot了,虽然好用但有些东西还是很令人抓狂的。
在与前端对接的过程中出现了跨域的问题,首先想到的就是用拦截器去全局处理。但我的拦截器怎么配置都没有生效。以下是我的拦截器代码。

直接实现HandlerInterceptor接口

public class AccessInterceptor implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("P3P", "CP=CAO PSA OUR");
        if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
            response.addHeader("Access-Control-Allow-Methods", "POST,GET,TRACE,OPTIONS");
            response.addHeader("Access-Control-Allow-Headers", "Content-Type,Origin,Accept");
            response.addHeader("Access-Control-Max-Age", "1000");
        }
        System.out.println("全局拦截器");
        return true;
    }
}

编写配置类将拦截器加进去 ,这里要加@Configuration,不然扫不进去

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AccessInterceptor())
                .addPathPatterns("/**");

    }
}

配到这里基本上已经完成了,我当时也是这么想的,能用了。结果还是不行。
经过我在网上反复查阅,发现要在启动类上加@ComponentScan注解

@MapperScan(basePackages = "com.cn.lejiao.mapper")
@ComponentScan(basePackages = {"com.cn.lejiao.interceptor"})
@SpringBootApplication(scanBasePackages = "com.cn.lejiao", exclude = DataSourceAutoConfiguration.class)
public class MhjServerSettleApp {
    public static void main(String[] args) {
        SpringApplication.run(MhjServerSettleApp.class, args);
    }
}

到这里拦截器已经生效了,一测试发现接口访问不到了,404错误。我就很纳闷怎么问题一个接一个。后面又经过多方查找发现我这个@ComponentScan注解有问题。

@ComponentScan(basePackages = {"com.cn.lejiao.interceptor"})

我这里只把拦截器所在的包扫进去,controller , service 都没扫进去,稍加改动

@ComponentScan(basePackages = {"com.cn.lejiao"})

OK ,完工!
虽然只是小问题,我也写篇博客记录记录吧,希望遇到同样问题的同道看到这篇博客能快速解决。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot配置拦截器可以通过以下几个步骤: 1. 创建一个拦截器类:首先,创建一个类实现`HandlerInterceptor`接口,该接口定义了拦截器的方法,例如`preHandle`、`postHandle`和`afterCompletion`。在这些方法,你可以编写你自己的逻辑来处理请求和响应。 ```java public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前进行拦截处理 return true; // 返回true表示继续处理请求,返回false将终止请求 } @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 { // 请求处理完成后执行的操作,可用于资源清理等 } } ``` 2. 注册拦截器:在Spring Boot,可以通过配置类来注册拦截器。创建一个配置类,并实现`WebMvcConfigurer`接口,重写`addInterceptors`方法,在该方法添加拦截器。 ```java @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**"); // 添加拦截器并指定拦截路径 } } ``` 3. 配置拦截路径:在上述代码,使用`addPathPatterns`方法来指定拦截路径。可以使用Ant风格的路径模式,例如`/**`表示拦截所有请求,也可以指定具体的路径,如`/api/*`表示只拦截以`/api/`开头的请求。 通过以上步骤,你就成功配置了一个拦截器。当请求匹配到拦截路径时,拦截器的相关方法将会被调用,你可以在这些方法编写你的业务逻辑。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值