解决spring boot中swagger-ui.html访问404以及配置全局header

本文介绍如何在Spring Boot项目中集成Swagger2实现API文档自动生成。通过添加Maven依赖及配置Swagger2Config类来定制API文档样式,支持多版本API管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在spring-boot中使用swagger:
1、添加maven插件:

      <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger2</artifactId>
          <version>${swagger.version}</version>
      </dependency>
      <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger-ui</artifactId>
          <version>${swagger.version}</version>
      </dependency>

2、代码配置:

@Configuration
@EnableSwagger2
public class Swagger2Config extends WebMvcConfigurerAdapter{
    /**
     * 这个地方要重新注入一下资源文件,不然不会注入资源的,也没有注入requestHandlerMappping,相当于xml配置的
     *  <!--swagger资源配置-->
     *  <mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/>
     *  <mvc:resources location="classpath:/META-INF/resources/webjars/" mapping="/webjars/**"/>
     *  不知道为什么,这也是spring boot的一个缺点(菜鸟觉得的)
     * @param registry
     */
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
         registry.addResourceHandler("swagger-ui.html")
         .addResourceLocations("classpath:/META-INF/resources/");
         registry.addResourceHandler("/webjars*")
         .addResourceLocations("classpath:/META-INF/resources/webjars/");
     }
    //可以注入多个doket,也就是多个版本的api,可以在看到有三个版本groupName不能是重复的,v1和v2是ant风格匹配,配置文件
    @Bean
    public Docket api() {
        //可以添加多个header或参数
        ParameterBuilder aParameterBuilder = new ParameterBuilder();
        aParameterBuilder
                .parameterType("header") //参数类型支持header, cookie, body, query etc
                .name("token") //参数名
                .defaultValue("token") //默认值
                .description("header中token字段测试")
                .modelRef(new ModelRef("string"))//指定参数值的类型
                .required(false).build(); //非必需,这里是全局配置,然而在登陆的时候是不用验证的
        List<Parameter> aParameters = new ArrayList<Parameter>();
        aParameters.add(aParameterBuilder.build());
        return new Docket(DocumentationType.SWAGGER_2).groupName("v1").select().apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.ant("/api/v1/**")).build().apiInfo(apiInfo1()).globalOperationParameters(aParameters);
    }


    private ApiInfo apiInfo1() {
        return new ApiInfoBuilder()
                .title("exampleApi 0.01")
                .termsOfServiceUrl("www.example.com")
                .contact(new Contact("liumei","http://blog.youkuaiyun.com/pc_gad","hilin2333@gmail.com"))
                .version("v0.01")
                .build();
    }
}

效果图:
这里写图片描述

访问或修复 Swagger UI 页面问题通常涉及以下几个方面:页面无法访问404 错误、未授权访问漏洞等。以下是一些常见问题的解决方法和最佳实践: ### 访问 `/swagger-ui.html` 页面时出现 404 错误 如果尝试访问 `http://<host>:<port>/swagger-ui.html` 出现 404 错误,可能是由于依赖项缺失或配置错误导致。 1. **检查依赖项** 确保项目中已正确引入 SwaggerSwagger UI 的依赖。对于 Spring Boot 项目,需要在 `pom.xml` 中添加以下依赖: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> ``` 如果使用的是 Gradle,则应确保 `build.gradle` 文件中包含以下内容: ```groovy implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2' ``` 2. **启用 Swagger 配置** 在 Spring Boot 应用的配置类中,确保已启用 Swagger 并正确配置了 Docket Bean。示例代码如下: ```java @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket restApi() { return new Docket(DocumentationType.SWAGGER_2) .groupName("标准接口") .apiInfo(apiInfo("Spring Boot中使用Swagger2构建RESTful APIs", "1.0")) .useDefaultResponseMessages(true) .forCodeGeneration(false) .select() .apis(RequestHandlerSelectors.basePackage("com.test.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo(String title, String version) { return new ApiInfoBuilder() .title(title) .description("更多请关注: https://blog.csdn.net/xqnode") .termsOfServiceUrl("https://blog.csdn.net/xqnode") .contact(new Contact("xqnode", "https://blog.csdn.net/xqnode", "xiaqingweb@163.com")) .version(version) .build(); } } ``` 3. **检查应用启动日志** 启动应用后,查看控制台日志,确认是否有关于 Swagger 加载成功的提示信息。如果没有加载成功,可能是因为扫描路径设置不正确或者依赖版本冲突。 ### 解决 Swagger UI 未授权访问问题 Swagger UI 提供了 API 文档的可视化展示功能,但如果未进行适当的权限控制,可能会导致文档被未经授权的用户访问,从而暴露敏感信息。 1. **启用身份验证和授权机制** 可以为 Swagger UI 设置基本的身份验证(Basic Auth)或基于令牌的身份验证(Token-based Auth),以限制对文档的访问权限。例如,在 Spring Security 中可以这样配置: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/swagger-ui/**", "/v2/api-docs/**", "/swagger-resources/**").authenticated() .and() .httpBasic(); // 使用 Basic Auth 进行认证 } } ``` 2. **限制访问来源(IP 白名单)** 可以通过配置防火墙规则或应用服务器的访问控制策略,仅允许特定 IP 地址范围内的请求访问 Swagger UI 资源。例如,在 Nginx 中可以这样配置: ```nginx location /swagger-ui/ { allow 192.168.1.0/24; deny all; } ``` 3. **定期更新依赖库** 确保使用的 Swagger UI 及其相关依赖保持最新版本,以便及时修复潜在的安全漏洞。可以通过 [Snyk](https://snyk.io/) 等工具检测项目的依赖是否存在已知漏洞,并根据建议进行升级。 ### 版本兼容性问题 不同版本的 SwaggerSwagger UI 可能存在兼容性问题,特别是在与其他框架(如 Spring Boot)集成时。 1. **确保依赖版本一致** 对于 Spring Boot 项目,建议使用统一版本的 `springfox-swagger2` 和 `springfox-swagger-ui`,推荐版本为 `2.9.2`,因为该版本经过广泛测试且稳定性较高。 2. **处理与 Spring Boot 的兼容性问题** 如果遇到与 Spring Boot 兼容性问题,可以尝试更换为 `springdoc-openapi`,这是一个更现代的替代方案,支持 OpenAPI 3.0 规范,并且与 Spring Boot 2.x 及以上版本有更好的兼容性。添加以下依赖即可开始使用: ```xml <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.6.14</version> </dependency> ``` ### 示例:手动部署 Swagger UI 如果你希望手动部署 Swagger UI 而不是通过框架自动集成,可以按照以下步骤操作: 1. 安装 Swagger UI: ```bash npm install swagger-ui ``` 2. 引入并初始化 Swagger UI: ```javascript import SwaggerUI from 'swagger-ui'; import 'swagger-ui/dist/swagger-ui.css'; SwaggerUI({ dom_id: '#swagger-ui', url: 'http://example.com/api/swagger.json', }); ``` 3. 确保 HTML 页面中有一个用于渲染 Swagger UI 的容器: ```html <div id="swagger-ui"></div> ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值