Java 解决跨域问题

文章介绍了Java中处理跨域问题的两种CORS方法,一种是使用@CrossOrigin注解,但需注意allowCredentials需设置为true以允许Cookie跨域。另一种是通过配置CorsFilter,提供全局解决方案,允许所有域名、头信息和请求方法。在高版本SpringBoot中,需正确配置才能生效。
摘要由CSDN通过智能技术生成

Java 解决跨域问题,Cors 目前只吃透两种

注解解决

@CrossOrigin

基于SpringBoot 注解解决
controller上添加注解
在这里插入图片描述

但是问题是,有时候会失效

解决方案

在注解之后,allowCredentials 需要设置为开启

在这里插入图片描述

点击源码查看

在这里插入图片描述

在springboot2.x版本以后,点开注解源码可以看到credentials默认是关闭的,该值是一个布尔值,表示是否允许发送 Cookie 。默认情况下, Cookie 不包括在 CORS 请求之中,设置为 true,即表示服务器明确许可, Cookie 可以包含中跨域请求中,一起发送给服务器。这个值也只能设置为 true ,如果服务器不要浏览器发送 Cookie,删除该字段即可。

基于配置解决

以上注解只能解决局部跨域,也就是每一个controller都要加注解。要想一劳永逸可以编写配置类。

CorsFilter

老版本写法
在这里插入图片描述

需要注意的是,这样写法还是解决不了高版本的SpringBoot的失效

正确写法:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CORSConfig {
    /**
     * 允许跨域调用的过滤器
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允许白名单域名进行跨域调用
        config.addAllowedOriginPattern("*");
        //允许跨越发送cookie
        config.setAllowCredentials(true);
        //放行全部原始头信息
        config.addAllowedHeader("*");
        //允许所有请求方法跨域调用
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值