springboot 配置跨域

本文介绍了如何在Spring Boot中实现全局跨域配置,包括使用`@CrossOrigin`注解和WebMvcConfigurer接口设置允许所有源的跨域请求。同时,针对非简单跨域请求,浏览器会发送预检请求(OPTIONS),需要在拦截器中处理OPTIONS请求以避免跨域错误。
摘要由CSDN通过智能技术生成
@CrossOrigin

将其标注在controller上,Controller下的接口全部允许跨域

@Controller
@CrossOrigin
public class TestController {
}
配置全局跨域
@Configuration
public class AppConfigurer implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedHeaders("*")
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

但是如果配置了拦截器的话,在前端发送了非简单的跨域请求的话(比如添加了token),浏览器会自动发送preflight请求(OPTIONS请求),需要拦截器允许该请求,否则会出现跨域错误
在这里插入图片描述
在这里插入图片描述

简单请求

同时满足两大条件
请求方式:GET、POST、HEAD(注:什么是HEAD请求?HEAD请求和GET本质是一样的,但是HEAD请求不含数据,只有HTTP头部信息)
HTTP头部信息不超过一下几种字段:无自定义头部字段、Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type(只有三个值application/x-www-form-urlencoded、multipart/form-data、text/plain)

非简单请求

请求方式:PUT、DELETE
自定义头部字段
发送json格式数据
正式通信之前,浏览器会先发送OPTION请求,进行预检,这一次的请求称为“预检请求”
服务器成功响应预检请求后,才会发送真正的请求,并且携带真实数据

配置HandlerInterceptor

public boolean preHandle(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler) throws Exception {
        if (request.getMethod().equalsIgnoreCase("OPTIONS")) {
            return true;
        }
        return true;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值