后端跨域的N种方法

摘要:
返回新的CorsFilter在任意配置类,返回一个新的CorsFilterBean,并添加映射路径和具体的CORS配置信息。@ConfigurationpublicclassGlobalCorsConfig{@BeanpublicCorsFiltercorsFilter(){//1.添加CORS配置信息CorsConfigurationconfig=newCorsConfiguration();//放行哪些原始域config.addAllowedOrigin("*");//是否发送Cookie信息config.setAllowCredentials;//放行哪些原始域config.addAllowedMethod("*");//放行哪些原始域config.addAllowedHeader("*");//暴露哪些头部信息config.addExposedHeader("*");//2.添加映射路径UrlBasedCorsConfigurationSourceconfigSource=newUrlBasedCorsConfigurationSource();configSource.registerCorsConfiguration;//3.返回新的CorsFilter.returnnewCorsFilter;}}使用注解在方法上使用注解@CrossOrigin@RequestMapping@ResponseBody@CrossOriginpublicStringindex(){return"HelloWorld";}在控制器上使用注解@CrossOrigin@Controller@CrossOriginpublicclassAccountController{@RequestMapping@ResponseBodypublicStringindex(){return"HelloWorld";}}手工设置响应头使用HttpServletResponse对象添加响应头来授权原始域,这里Origin的值也可以设置为”*”,表示全部放行。

简单来说,CORS是一种访问机制,英文全称是Cross-Origin Resource Sharing,即我们常说的跨域资源共享,通过在服务器端设置响应头,把发起跨域的原始域名添加到Access-Control-Allow-Origin 即可。

返回新的CorsFilter(全局跨域)

在任意配置类,返回一个新的CorsFilter Bean,并添加映射路径和具体的CORS配置信息。

@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1.添加CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        //放行哪些原始域
        config.addAllowedOrigin("*");
        //是否发送Cookie信息
        config.setAllowCredentials(true);
        //放行哪些原始域(请求方式)
        config.addAllowedMethod("*");
        //放行哪些原始域(头部信息)
        config.addAllowedHeader("*");
        //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
        config.addExposedHeader("*");

        //2.添加映射路径
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);

        //3.返回新的CorsFilter.
        return new CorsFilter(configSource);
    }
}
使用注解(局部跨域)

在方法上(@RequestMapping)使用注解 @CrossOrigin

@RequestMapping("/hello")
@ResponseBody
@CrossOrigin("http://localhost:8080") 
public String index(){
    return "Hello World";
}

在控制器(@Controller)上使用注解 @CrossOrigin

@Controller
@CrossOrigin(origins = "http://domain.com", maxAge = 3600)
public class AccountController {

    @RequestMapping("/hello")
    @ResponseBody
    public String index(){
        return "Hello World";
    }
}

手工设置响应头(局部跨域)

使用HttpServletResponse对象添加响应头(Access-Control-Allow-Origin)来授权原始域,这里Origin的值也可以设置为”*” ,表示全部放行。

@RequestMapping("/hello")
@ResponseBody
public String index(HttpServletResponse response){
    response.addHeader("Access-Control-Allow-Origin", "*");
    return "Hello World";
}

Nginx配置跨域

upstream server {
        server 127.0.0.1:8091;
}
server {
        listen 80;
        server_name domain.com;

        location ^~/api {
                //添加跨域请求头
                proxy_set_header Access-Control-Allow-Origin *;
                proxy_set_header Access-Control-Allow-Methods *;
                proxy_set_header Access-Control-Allow-Headers *;

                if ($request_method = 'OPTIONS') {
                        return 204;
                }
                rewrite ^/api/(.+?)$ /$1 break;
                proxy_pass http://server;
        }
}

免责声明:文章转载自《后端跨域的N种方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇angular11源码探索二十五[Router路由事件]android 4.1源码下载方法最新实例教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浏览器访问svn

文章转自https://www.cnblogs.com/ayanmw/archive/2011/12/19/2294054.html 你看到的这个文章来自于http://www.cnblogs.com/ayanmw 基本的安装包有: subversion /httpd/ svn的httpd的mod_dav_svn mod_authz_svn 两个模块.(...

JedisPool无法获得资源问题

线上碰到一个问题:redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:22) 线上会相隔不定时的天数后出现一次Jedis...

Python接口测试入门

接口测试基础篇用几个简单的案例,带你轻松了解接口测试 首先了解一下接口测试的重要性: 接口测试有什么要求呢? 首先需要清晰的接口文档,标准如下: 接口名称 接口类型 输入参数 每个参数名; 每个参数类型; 每个参数业务含义; 每个是否可空; 每个字段长度(可选,一般需要提供,有严格要求的字段需特别注明); 输出参数 状态码; 提示信息; 每个参...

SpringBoot 的 bootstrap 和 application 配置文件

SpringBoot 默认支持 properties 和 YAML 两种格式的配置文件,并且有 bootstrap 和 application 两种配置文件 两者的区别 bootstrap 配置文件先于 application 配置文件被加载,会先创建初始化 Bootstrap Context,再创建初始化 Application Context,应用于...

js 常用创建a标签实现下载功能

downExcelTem = () => { let url = `${config.API_ROOT}/excelTemplateExport` let link = document.createElement('a') link.style.display = 'none' link.href = url...

C#进阶系列——WebApi 跨域问题解决方案:CORS

  阅读目录 一、跨域问题的由来 二、跨域问题解决原理 三、跨域问题解决细节 1、场景描述 2、场景测试 四、总结 正文 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题。本篇主要从实例的角度分享下CORS解决跨域问题一些细节。 WebApi系列文章 C#进阶系列——WebApi接口...