SpringSecurity环境下配置CORS跨站资源共享规则
程序员文章站
2022-06-11 16:53:56
一、CORS简述 要说明CORS(Cross Origin Resourse Sharing) 跨站资源共享,就必须先说同源策略。长话短说,同源策略就是向服务端发起请求的时候,以下三项必须与当前浏览器应用一致:域名、端口、协议。用白话说:就是你的应用发送请求不能访问别人的资源,否则浏览器就会限制你。 ......
一、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; }
期待您的关注
- 向您推荐博主的系列文档:《手摸手教您学习springboot系列-16章97节》
- 本文转载注明出处(必须带连接,不能只转文字):。