You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.7.3配置CSP后Swagger UI无法访问求助

问题解决:Spring Boot 2.7.3中Swagger因CSP配置无法访问

问题原因

你添加的contentSecurityPolicy("script-src 'self'")限制仅允许加载同源脚本,但Swagger UI本身包含内联脚本,这违反了CSP规则,导致浏览器拒绝执行这些脚本,进而无法正常加载Swagger页面。你尝试的替换为'none'、添加Swagger安全注解的方式,前者完全禁止脚本加载(显然不可行),后者是配置Swagger的JWT认证显示逻辑,和CSP限制无关,所以无效。

解决方案

1. 调整CSP规则,兼容Swagger UI需求

修改contentSecurityPolicy的配置,允许Swagger所需的脚本、样式、图片等资源加载,有两种可选方式:

  • 方式一:允许内联脚本(简单直接,适合内部环境)
    将CSP规则修改为:

    http.headers().contentSecurityPolicy("script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'");
    

    说明:

    • 'unsafe-inline'允许浏览器执行内联脚本和样式,适配Swagger UI的内联代码
    • img-src 'self' data:允许加载同源图片和base64格式的图片(Swagger UI会用到这类资源)
    • font-src 'self'确保字体资源正常加载
  • 方式二:使用报错中的哈希值(更安全)
    控制台报错里给出了内联脚本的哈希值sha256-qzIUUVyNis8jVHXKlYc4HGAEsn0o42pLmW1do84Uptw=,可以直接加入CSP规则:

    http.headers().contentSecurityPolicy("script-src 'self' 'sha256-qzIUUVyNis8jVHXKlYc4HGAEsn0o42pLmW1do84Uptw='; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'");
    

    注意:如果Swagger UI版本更新,内联脚本内容变化,哈希值会失效,需要重新获取新的哈希值。

2. 确认Swagger路径已加入白名单

确保在安全配置中,Swagger的静态资源路径被允许匿名访问,避免因权限问题无法加载:

// 定义Swagger相关路径
private static final String[] SWAGGER_PATHS = {
    "/swagger-ui/**",
    "/v3/api-docs/**",
    "/swagger-resources/**",
    "/swagger-resources"
};

@Override
public void configure(HttpSecurity http) throws Exception {
    http.sessionManagement()
          .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
          .and()
          .exceptionHandling()
          .and()
          .authenticationProvider(provider)
          .addFilterBefore(authenticationFilter(), AnonymousAuthenticationFilter.class)
          .authorizeRequests()
          .requestMatchers(SWAGGER_PATHS).permitAll() // 允许Swagger路径匿名访问
          .requestMatchers(PROTECTED_URLS)
          .authenticated()
          .and()
          .csrf().disable().cors()
          .and()
          .formLogin().disable()
          .httpBasic().disable()
          .logout().disable();
    http.headers().frameOptions().sameOrigin();
    // 替换为调整后的CSP规则
    http.headers().contentSecurityPolicy("script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'");
}

补充说明

你添加的@SecurityScheme和@SecurityRequirement注解是用来在Swagger UI界面中显示JWT令牌输入框的,和当前CSP导致的页面无法加载问题无关,等CSP问题解决后,配置正确的话就能正常在Swagger UI中输入JWT令牌进行接口调试。

内容的提问来源于stack exchange,提问作者Sharvari Nagesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:56:20