Spring Boot 使用HandlerInterceptorAdapter拦截跨域问题

问题

联调接口时,报了一个以下错误:

Access to XMLHttpRequest at 'http://localhost:8299/login' 
from origin 'http://localhost:3000' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: No
 'Access-Control-Allow-Origin' header is
 present on the requested resource.

本人以为是我没有设置跨域,可查看实现 WebMvcConfigurer 接口的 addCorsMappings 函数中设置了跨域:

  registry.addMapping("/**")
                .allowedHeaders("*")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH", "OPTIONS", "HEAD")
                .maxAge(3600 * 24);

有点无解。

原因

通过后端debugger,发现在继承HandlerInterceptorAdapter的 preHandle 函数拦截时,返回 false,导致了这个问题。

解决

在 preHandle 函数中,添加:

     response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        response.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
        response.addHeader("Access-Control-Max-Age", "3600");

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HandlerInterceptorAdapterSpring框架提供的一个适配器类,用于简化自定义拦截器的实现。它实现了HandlerInterceptor接口,并提供了一些默认的空实现方法,方便我们只关注需要实现的方法。 HandlerInterceptorSpring框架提供的拦截器接口,用于在请求处理过程中进行拦截和处理。通过实现HandlerInterceptor接口,我们可以在请求到达Controller之前、Controller处理过程中以及Controller返回响应之后执行一些自定义的逻辑。 使用HandlerInterceptorAdapterHandlerInterceptor的步骤如下: 1. 创建一个类并实现HandlerInterceptor接口,或者继承HandlerInterceptorAdapter类。 2. 实现需要的方法,常用的方法包括preHandle、postHandle和afterCompletion。 - preHandle方法在请求到达Controller之前执行,可以进行一些前置处理,如权限验证、日志记录等。 - postHandle方法在Controller处理完请求后执行,可以对返回结果进行处理或修改。 - afterCompletion方法在整个请求完成后执行,可以进行一些清理工作,如资源释放等。 3. 在Spring配置文件中配置拦截器。 - 如果使用HandlerInterceptorAdapter,可以通过继承WebMvcConfigurerAdapter类并重写addInterceptors方法来添加拦截器。 - 如果使用HandlerInterceptor,可以通过实现WebMvcConfigurer接口并重写addInterceptors方法来添加拦截器。 注意:在配置拦截器时,需要注意拦截器的顺序,以及拦截的路径和排除的路径的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也想MK代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值