欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringSecurity环境下配置CORS跨站资源共享规则

程序员文章站 2022-06-11 16:53:56
一、CORS简述 要说明CORS(Cross Origin Resourse Sharing) 跨站资源共享,就必须先说同源策略。长话短说,同源策略就是向服务端发起请求的时候,以下三项必须与当前浏览器应用一致:域名、端口、协议。用白话说:就是你的应用发送请求不能访问别人的资源,否则浏览器就会限制你。 ......

SpringSecurity环境下配置CORS跨站资源共享规则

一、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;
}

期待您的关注