zoukankan      html  css  js  c++  java
  • CORS在Spring中的实现

    CORS:

    通常情况下浏览器禁止AJAX从外部获取资源,因此就衍生了CORS这一标准体系,来实现跨域请求。

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制.

    跨域请求在java spring MVC中的实现:

    Spring MVC HandlerMapping 接口对CORS提供了一个内部支持,在成功的映射到一个处理器的请求之后,HanderMapping接口检查CORS的请求配置文件,然后采取下一步行动,预检(Preflight)请求能够被直接的处理,而简单和直接的CORS请求将会被拦截和经过验证,同时还需要CORS请求头的进一步设置。因此,为了确保能够实现跨域请求,在请求头中会加入Origin这一字段,来实现跨域请求,同时对于不同的主机而言请求头是不一样的。你必须有一些明确的声明的配置文件,如果相应的CORS的配置文件没有找到的话,预检请求将会被拒绝,同时请求头也不会加到相应的响应当中。每一个HandlerMapping能够被独立的配置带着基于CorsConfiguration映射的url模式。通常情况下应用使用MVC Java的配置文件或者XML命名空间来声明这样的映射。通常情况下能够使每一个单一的map映射通过所有的HandlerMapping实例。

    @CrossOrigin:

    这个注解能够使跨域请求实现在注解控制器里面:主要的实现方法如下:

    @RestController
    @RequestMapping("/account")
    public class AccountController {
        @CrossOrigin
        @GetMapping("/{id}")
        public Account retrieve(@PathVariable Long id) {
            // ...
        }
        @DeleteMapping("/{id}")
        public void remove(@PathVariable Long id) {
            // ...
        }
    }
     

    默认情况下上述注解还实现了以下功能:

    1 :所有的origin请求字段。

    2:所有的请求头。

    3: 所有的被映射的HTTP方法。

    同时@Crossorigin继承所有的类和方法,相关的示例如下:

    @CrossOrigin(origins = "https://domain2.com", maxAge = 3600)
    @RestController
    @RequestMapping("/account")
    public class AccountController {

        @GetMapping("/{id}")
        public Account retrieve(@PathVariable Long id) {
            // ...
        }

        @DeleteMapping("/{id}")
        public void remove(@PathVariable Long id) {
            // ...
        }
    }

    全局配置:

     

    默认情况下,全局配置需要能够满足以下几点:

     

    1 :所有的:Ogrigin字段

     

    2:所有的请求头。

     

    3 :GET HEAD 和POST 方法。

     

    为了能够使CORS(跨域请求)在MVC 的Java 的配置文件里面配置,你需要使用CorsRegistry回调接口,具体的实现例子如下:

    @Configuration
    @EnableWebMvc
    public class WebConfig implements WebMvcConfigurer {

        @Override
        public void addCorsMappings(CorsRegistry registry) {

            registry.addMapping("/api/**")
                .allowedOrigins("https://domain2.com")
                .allowedMethods("PUT", "DELETE")
                .allowedHeaders("header1", "header2", "header3")
                .exposedHeaders("header1", "header2")
                .allowCredentials(true).maxAge(3600);

            // Add more mappings...
        }
    }

    XML配置:

    为了能够使CORS(跨域请求)实现在XML的命名空间需要使用<mvc:cors>组件元素,具体的实现例子如下:

    <mvc:cors>

        <mvc:mapping path="/api/**"
            allowed-origins="https://domain1.com, https://domain2.com"
            allowed-methods="GET, PUT"
            allowed-headers="header1, header2, header3"
            exposed-headers="header1, header2" allow-credentials="true"
            max-age="123" />

        <mvc:mapping path="/resources/**"
            allowed-origins="https://domain1.com" />

    </mvc:cors>

    CORS Fliter:

    你可以使跨域请求内置在CorsFliter类当中(即跨域过滤器)。实现配置这个过滤器,CorsConfigurationSource及其构造函数。相关的示例如下:

    CorsConfiguration config = new CorsConfiguration();

    // Possibly...
    // config.applyPermitDefaultValues()

    config.setAllowCredentials(true);
    config.addAllowedOrigin("https://domain1.com");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", config);

    CorsFilter filter = new CorsFilter(source);

    默认情况下上述注解还实现了以下功能:

    1 :所有的origin请求字段。

    2:所有的请求头。

    3: 所有的被映射的HTTP方法。

    同时@Crossorigin继承所有的类和方法,相关的示例如下:

    复制代码
    复制代码
    
    
    复制代码
    复制代码

    全局配置:

    默认情况下,全局配置需要能够满足以下几点:

    1 :所有的:Ogrigin字段

    2:所有的请求头。

    3 :GET HEAD 和POST 方法。

    为了能够使CORS(跨域请求)在MVC 的Java 的配置文件里面配置,你需要使用CorsRegistry回调接口,具体的实现例子如下:

    复制代码
    复制代码
    
    
    复制代码
    复制代码

    XML配置:

    为了能够使CORS(跨域请求)实现在XML的命名空间需要使用<mvc:cors>组件元素,具体的实现例子如下:

    复制代码
    复制代码
    
    
    复制代码
    复制代码

    CORS Fliter:

    你可以使跨域请求内置在CorsFliter类当中(即跨域过滤器)。实现配置这个过滤器,CorsConfigurationSource及其构造函数。相关的示例如下:

    复制代码
    复制代码
    
    
  • 相关阅读:
    Brain network involved in autonomic functions 与自主功能相关的大脑网络
    Brief summary of classical components of ERP 事件相关成分(ERP)经典成分小结
    ICA & Percentage Variance Account For (PVAF)
    数据处理中白化Whitening的作用图解分析
    Loadings vs eigenvectors in PCA 主成分分析(PCA)中的负荷和特征向量
    主成分分析(PCA)和独立成分分析(ICA)相关资料
    Sketch of heart and QRS complex 心脏及QRS波群简图
    Brain Network visulation in EEG 脑电网络可视化
    Phase Locking Value (PLV) 神经信号的锁相值
    ubuntu16.04下的一些基本操作笔记
  • 原文地址:https://www.cnblogs.com/Murcie/p/10830345.html
Copyright © 2011-2022 走看看