springboot2 - 跨域配置

同源策略是浏览器的一个安全限制,要求域名、协议、端口相同,如果不同则没办法进行数据交互。

而跨域配置,则是为了解除这方面的限制。

前后端分离的情况下,如果前后端分开部署,基本都需要进行跨域配置了。

(在 nginx 上也可以处理,不过这里就不对 nginx 展开讨论了)

配置选项简介

  • Access-Control-Allow-Origin: 允许访问的域名
  • Access-Control-Allow-Methods: 允许访问的请求方式
  • Access-Control-Allow-Headers: 允许使用的 Header
  • Access-Control-Allow-Credentials: 是否允许用户发送、处理 Cookie
  • Access-Control-Max-Age: 预检有效期,单位为秒。有效期内,不需要重复发送预检请求
  • Access-Control-Expose-Headers: Header 白名单,不设置的话,客户端读不到 Header 的内容

配置单个跨域

@Configuration
public class CrossDomainStarter {
    
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("*");
        config.addAllowedMethod("*");
        config.addAllowedHeader("*");
        config.addExposedHeader("*");
        config.setAllowCredentials(true);
        
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**",config);
        
        return new CorsFilter(corsConfigurationSource);
    }
}

配置多个跨域

注意函数名 addAllowedOrigin(),是 add 而不是 set,这些参数本身就可以配置多个。

配置更多跨域

如果需要非常复杂的跨域配置,那还不如直接放开跨域拦截,通过鉴权系统进行控制。

话虽如此,就是想在跨域上搞事情,强行实现一波,应当如何?

我们要实现 CorsConfigurationSource 接口,前面的代码中,UrlBasedCorsConfigurationSource 就是其中一个实现类,
CorsConfigurationSource 相当于 Dao,参数是 request,根据 request 的内容查找对应的跨域配置。

可以把 UrlBasedCorsConfigurationSource 的源码照抄一份,照着自己的需求改一改。

下面提供一份伪代码:

class Demo implements CorsConfigurationSource{
    @Override
    @Nullable
    public CorsConfiguration getCorsConfiguration(@NotNull HttpServletRequest request) {
        String lookupPath = this.urlPathHelper.getLookupPathForRequest(request);
        // 获取请求来源
        String origin = request.getHeader(HttpHeaders.ORIGIN);
        // TODO: 根据客户端请求信息,查找CorsConfiguration配置
        return null;
    }
}

posted on   疯狂的妞妞  阅读(772)  评论(0编辑  收藏  举报

(评论功能已被禁用)
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示