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
相关产品推荐
相关产品推荐

