一、CORS简述

要说明CORS(Cross Origin Resourse-Sharing) 跨站资源共享,就必须先说同源策略。长话短说,同源策略就是向服务端发起请求的时候,以下三项必须与当前浏览器应用一致:域名、端口、协议。用白话说:就是你的应用发送请求不能访问别人的资源,否则浏览器就会限制你。当然也有例外,如:img、srcipt、iframe等资源引用的HTML标签不受同源策略的限制。
但是我们实际开发中又经常会跨站访问,比如前后端分离的应用是分开部署的,在浏览器看来是两个域。所以同源策略是用来禁止跨域访问的,CORS正好相反是根据自己的需求与规则,有限的开放部分资源的共享。

二、Spring-CORS规则基础配置

想在Spring或Spring Boot的web环境下实现跨域资源共享,主要有三种实现方式:

  • @CrossOrigin注解,这个注解是作用于Controller类或者请求方法上的,实现局部接口的跨域资源共享。
  • 实现WebMvcConfigurer接口addCorsMappings方法,实现全局配置的跨域资源共享。
  • 注入CorsFilter过滤器,实现全局配置的跨域资源共享。推荐使用。

这三种实现方式在我的另外一篇文章《SpringBoot解决跨域访问的问题》中已经介绍过,这里就不多做说明了。

三、Spring Security 中的配置CORS

当我们的应用使用了Spring Security之后,我们会发现上面的配置方法全部失效。此时需要在spring security的WebSecurityConfigurerAdapter中的configure(HttpSecurity http)配置方法,加上http.cors()配置,第二小节中的配置才会生效。

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()
        ...
    }
}

另外Spring Security为我们提供了一种新的CORS规则的配置方法:CorsConfigurationSource 。使用这种方法实现的效果等同于注入一个CorsFilter过滤器。

@Bean
CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
    configuration.setAllowedMethods(Arrays.asList("GET","POST"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

期待您的关注

最新文章

  1. WPF 自定义ContextMenu且为左键点击显示
  2. 集合框架之——迭代器并发修改异常ConcurrentModificationException
  3. Til the Cows Come Home(最短路)
  4. GUN/GPL 中文译文
  5. Python:函数定义
  6. PHP之路——微信公众号授权获取用户信息
  7. ADB命令与monkey
  8. sqlplus入门使用
  9. IIS6/7 配置操作
  10. java日期格式大全 format SimpleDateFormat
  11. RNN,写起来真的烦
  12. 安装VUE Cli3 框架方法
  13. SQL Server 只安装客户端的方法
  14. Linux三剑客之awk命令
  15. 【BZOJ2154】Crash的数字表格
  16. 黑马-Spring与数据库
  17. Bash数组
  18. English trip -- VC(情景课)5 C It's on Main Street 在主街上
  19. Bootstrap学习笔记(3)--表格\表单\图片
  20. shell编程基础(转载)

热门文章

  1. SpringBoot整合MybatisPlus3.X之SQL注入器(九)
  2. SpringCloud之Hystrix服务降级(七)
  3. Excel在线预览(通过poi转html,含里面的图片)
  4. [转载]制作QT字库文件
  5. 如何学好javascript
  6. Python3爬虫(3)_urllib.error
  7. CSPS_105
  8. Kettle(6.0) 参数方式连接数据库
  9. 『题解』Codeforces2A Winner
  10. Requests库使用总结