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

Spring Boot Security未通过Oauth2认证时如何禁止访问Swagger api-docs端点

实现方案

你只需要调整现有资源服务器的安全拦截规则即可,具体操作如下:

步骤1:修改ResourceServerConfig配置

更新ResourceServerConfig类中的configure(HttpSecurity http)方法,放开Swagger UI静态资源的访问权限,同时为/v2/api-docs端点增加认证校验规则:

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                // 放行公共资源、健康检查接口、Swagger UI页面及相关静态资源,保证可以正常打开授权页面
                .antMatchers("/", "/api/health", "/api/info", 
                        "/swagger-ui.html", "/webjars/**", "/swagger-resources/**")
                .permitAll()
                // 要求api-docs接口文档端点、业务接口都必须经过OAuth2认证才能访问
                .antMatchers("/v2/api-docs", "/api/v1/**")
                .authenticated();
    }
}

效果说明

配置完成后:

  • 用户可以正常打开Swagger UI页面,看到授权按钮
  • 未完成授权流程时,页面请求/v2/api-docs会返回401状态码,无法加载接口文档
  • 点击授权按钮完成OAuth2认证流程后,请求会携带有效token,即可正常获取接口文档内容

可选增强:配置专属权限范围

如果需要更严格的控制,只有指定客户端才能访问接口文档,可以将/v2/api-docs的校验规则调整为校验OAuth2 scope:

// 替换原有的.authenticated()规则
.antMatchers("/v2/api-docs").access("#oauth2.hasScope('swagger_doc')")

之后在你的数据库客户端配置表中,给test-client客户端增加swagger_doc的授权范围即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 00:09:03