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

项目改用SpringBoot框架后,与前端对接出现跨域问题,尝试用拦截器全局处理。配置拦截器时遇到诸多问题,如拦截器不生效,添加@ComponentScan注解后接口404。经排查发现是注解扫描范围问题,修改后问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目换了新框架,改用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 ,完工!
虽然只是小问题,我也写篇博客记录记录吧,希望遇到同样问题的同道看到这篇博客能快速解决。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值