Ralph Chen 2023-01-12 11:46 采纳率: 75%
浏览 43
已结题

如何关闭security+swagger登录弹出框

img

1、在使用springBoot+springSecurity整合Swagger2的过程中,swagger每次打开都会弹出登录框,然后我并不想让它弹出,如果关闭登录弹框
2、如果修改swagger访问路径

  • 写回答

2条回答 默认 最新

  • m0_54204465 2023-01-12 12:06
    关注

    关闭 Spring Security 中的登录弹窗:
    如果你不想在访问 Swagger 文档时弹出登录框,可以在 Spring Security 配置类中配置一个新的 HttpSecurity 配置对 Swagger 的路径进行特殊处理。

    首先在 Spring Security 配置类中配置所有路径都需要进行身份认证

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .and()
                .httpBasic();
        }
        //...
    }
    
    

    然后,针对 Swagger 的路径进行特殊处理,在配置中添加

    .antMatchers("/swagger-ui.html").permitAll() .antMatchers("/swagger-resources/").permitAll() .antMatchers("/v2/api-docs").permitAll() .antMatchers("/webjars/").permitAll()
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                    .antMatchers("/swagger-ui.html").permitAll()
                    .antMatchers("/swagger-resources/**").permitAll()
                    .antMatchers("/v2/api-docs").permitAll()
                    .antMatchers("/webjars/**").permitAll()
                    .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .and()
                .httpBasic();
        }
        //...
    }
    

    修改swagger访问路径
    你可以使用 .pathProvider(new RelativePathProvider(servletContext)) 修改 swagger 访问路径

    @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .pathProvider(new RelativePathProvider(servletContext))
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.example"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
    

    或者 .useDefaultResponseMessages(false) 来隐藏swagger的默认访问路径

    @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .useDefaultResponseMessages(false)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.example"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
    

    或者在 application.properties 或者 application.yml 文件中配置默认路径

    swagger.path=/yourpath
    
    

    注意: 上述所有路径设置都可以根据需要调整,来满足你的需求。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月20日
  • 已采纳回答 1月12日
  • 创建了问题 1月12日

悬赏问题

  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题