springboot3整合knife4j,并nginx映射到外网

项目想使用jdk21的虚拟线程,所以适配的springboot版本,也升级到3.4.0

1、pom.xml修改

复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.4.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>6.2.11</version>
</dependency>

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.5.0</version>
</dependency> 
...
</dependencies>

pom.xml里只要像上面写了后,重启应用,就能直接访问 http://localhost:90/doc.html了。不用在application-dev.yml里定义什么,也不用 在/config下 写什么自动被扫描的Bean。。。

如果要:加个访问密码,定义下api的作者,版本,联系人的什么的,还是要写一个Bean的。

2、如果要把它映射到通过nginx控制的外网

2.1、 强制给它加一个context path(如果nginx下有很多应用,为了区别开)

这个主要是有的时候想给这个knife4j的默认根目录前加个前缀,怎么弄都不成功,不知道为何,所以另寻思路。如果不更改根目录,通过nginx做代理又很麻烦、指令会很复杂。

研究发现,在springboot3的 application-dev.yml 里写server.servlet.context-path不起作用(不识别这个配置项)。但是在启动脚本里,这样写:java -jar myapp.jar --server.servlet.context-path=/myapp 还是起作用的。

2.2、 nginx写转发

location /myapp/doc.html {

proxy_pass http://10.102.142.24:90/myapp/doc.html ;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $host;

}

location /myapp/webjars/ {

proxy_pass http://10.102.142.24:90/myapp/webjars/ ;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $host;

}

location /myapp/v3/ {

proxy_pass http://10.102.142.24:90/myapp/v3/ ;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $host;

}

location /myapp/ {

proxy_pass http://10.102.142.24:90/myapp/ ;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $host;

}

3、定义api的作者,版本。。。

复制代码
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Knife4j整合Swagger3 Api接口文档配置类
 * @author wangzheng
 */
@Configuration
public class Knife4jConfig {
    /**
     * 创建了一个api接口的分组
     * 除了配置文件方式创建分组,也可以通过注册bean创建分组
     */
    @Bean
    public GroupedOpenApi adminApi() {
        return GroupedOpenApi.builder()
                // 分组名称
                .group("default")
                // 接口请求路径规则
                .pathsToMatch("/**")
                .build();
    }

    /**
     * 配置基本信息
     */
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .info(new Info()
                        // 标题
                        .title("MyApp API")
                        // 描述Api接口文档的基本信息
                        .description("MyApp API")
                        // 版本
                        .version("v1.0")
                        // 设置OpenAPI文档的联系信息,姓名,邮箱。
                        .contact(new Contact().name("WangZheng").email("wang@qq.com"))
                        // 设置OpenAPI文档的许可证信息,包括许可证名称为"Apache 2.0",许可证URL为"http://springdoc.org"。
                        .license(new License().name("Apache 2.0").url("http://springdoc.org"))
                );
    }
}

4、其它的额外配置,还是要写到application-dev.yml

复制代码
# 以下不能打开,否则报错 重复的swagger对象。这里仅仅做参考
#springdoc:
# swagger-ui:
#    path: /swagger-ui.html
#    tags-sorter: alpha
#    operations-sorter: alpha
# api-docs:
#    path: /v3/api-docs
#    enabled: true   #是否开启文档功能
#  group-configs:
#    - group: 'default'
#      paths-to-match: '/**'
#      packages-to-scan: com.myapp.controller

# knife4j
knife4j:
  enable: true
  production: false # 这个恒久是flase,不能改成true。即使在appliction-prd.yml也是false。有歧义的一个配置项
  #是否启用登录认证
  basic:
    enable: true
    username: admin
    password: 123456
  setting:
    language: zh_cn
    enable-version: true
    enable-swagger-models: true
    swagger-model-name: 用户模块
相关推荐
szephyr1 天前
HTTPS 证书申请与自动续期:acme.sh + Let‘s Encrypt 完整记录
nginx·https·acme.sh·证书续期
Lsetea1 天前
部署证书后提示“证书名称与输入不匹配”:Safari 报错的三层排查
nginx·https·safari·ssl证书·openssl
打工仔折腾 AI2 天前
FastAPI 从本机到生产服务器:Nginx+Gunicorn+Uvicorn 完整部署实录
人工智能·后端·python·nginx·fastapi·gunicorn
Linux运维技术栈2 天前
如何避免绕过CDN的攻击?基于 CDN 回源请求头鉴权的防御实操与安全性剖析
nginx·安全·cdn
Lsetea2 天前
OpenSSL快速生成域名证书:含SAN的自签命令、验证与排错
nginx·https·ssl证书·openssl·自签证书
小小的木头人3 天前
CentOS 7 下 Nginx 访问自定义目录报 403 的完整排查:从端口权限到 SELinux
nginx·centos
新时代农民工~3 天前
【双机高可用部署方案-前后端部署】
java·nginx·springboot
运维全栈笔记3 天前
Nginx 模块化多业务站点通用配置模板
linux·运维·nginx
蓝胖的四次元口袋4 天前
Docker Compose多容器编排与Nginx集群实战
运维·nginx·docker compose
师傅别念了4 天前
Nginx 反向代理配置指南,看完这篇就够了
nginx