zoukankan      html  css  js  c++  java
  • SpringBoot设置支持跨域请求

    跨域:现代浏览器出全的考虑,在http/https请求时必须遵守同源策略,否则即使跨域的http/https 请求,默认情况下是被禁止的,ip(域名)不同、或者端口不同、协议不同(比如http、https) 都会造成跨域问题。

    一、前端解决方案

    1. 使用 JSONP 来支持跨域的请求,JSONP 实现跨域请求的原理简单的说,就是动态创建
      script 标签,然后利用 script 的 SRC 不受同源策略约束来跨域获取数据。缺点是需
      要后端配合输出特定的返回信息。
    2. 利用反应代理的机制来解决跨域的问题,前端请求的时候先将请求发送到同源地址的后
      端,通过后端请求转发来避免跨域的访问。

    后来 HTML5 支持了 CORS 协议。CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。它通过服务器增加一个特殊的 Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持 CORS、并且判断 Origin 通过的话,就会允许 XMLHttpRequest 发起跨域请求。

    前端使用了 CORS 协议,就需要后端设置支持非同源的请求,对于SpringBoot 对于CORS 同样有着良好的支持,
    首先附上官网地址:
    https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-cors

    二、java跨域的三种配置方式

    • 方式一:配置过滤器(全局配置)
    @Configuration
    public class GlobalCorsConfig {
        @Bean
        public CorsFilter corsFilter() {
            CorsConfiguration config = new CorsConfiguration();
              config.addAllowedOrigin("*");
              config.setAllowCredentials(true);
              config.addAllowedMethod("*");
              config.addAllowedHeader("*");
              config.addExposedHeader("*");
    
            UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
            configSource.registerCorsConfiguration("/**", config);
    
            return new CorsFilter(configSource);
        }
    }
    
    • 方式二:配置拦截器 (全局配置)
    @Configuration
    public class MyConfiguration extends WebMvcConfigurerAdapter  {
    
        @Override  
        public void addCorsMappings(CorsRegistry registry) {  
            registry.addMapping("/**")  
                    .allowCredentials(true)  
                    .allowedHeaders("*")  
                    .allowedOrigins("*")  
                    .allowedMethods("*");  
    
        }  
    }
    
    • 方式三: 单个请求的跨域通过 @CrossOrigin 注解来实现
    @RequestMapping("/hello")
    @CrossOrigin("http://localhost:8080") 
    public String hello( ){
    	return "Hello World";
    }
    

    参考资料:https://blog.csdn.net/fxbin123/article/details/80603678



    作者:关小涛
    学习和分享是博客最大的乐趣,欢迎大家取之所需。
    努力是自己努力的原因,每周天写博客总结工作中的新技能和出现的问题
  • 相关阅读:
    公用表表达式(CTE)的递归调用
    c# 如何让tooltip显示文字换行
    实战 SQL Server 2008 数据库误删除数据的恢复
    SQL SERVER数据库中 是否可以对视图进行修改删除
    asp.net中实现文件批量上传
    sql server 2008学习2 文件和文件组
    sql server 2008学习3 表组织和索引组织
    sql server 2008学习4 设计索引的建议
    sql server 2008学习10 存储过程
    .net 调用 sql server 自定义函数,并输出返回值
  • 原文地址:https://www.cnblogs.com/XtsLife/p/11383451.html
Copyright © 2011-2022 走看看