Micronaut (Gradle & Java) - 启用安全性后无法访问 Swagger 集成视图
Micronaut (Gradle & Java) - Swagger Integration Views not accessible with security enabled
按照此处的文档 - https://micronaut-projects.github.io/micronaut-openapi/latest/guide/index.html
我配置了我的 build.gradle 以包含 swagger yaml 生成的编译时任务,如下所示-
tasks.withType(JavaCompile){
options.fork = true
options.forkOptions.jvmArgs << '-Dmicronaut.openapi.views.spec=rapidoc.enabled=true,swagger-ui.enabled=true,swagger-ui.theme=flattop'
options.encoding = "UTF-8"
options.compilerArgs.add('-parameters')}
这就是我的 application.yaml 的样子-
micronaut:
application:
name: email-api
server:
port: 5655
cors:
enabled: true
security:
enabled: true
token:
jwt:
enabled: true
generator:
accessTokenExpiration: 86400
signatures:
secret:
generator:
secret: Test@2020-Ok-Letus-chageit-later
router:
static-resources:
swagger:
paths: classpath:META-INF/swagger
mapping: /swagger/**
swagger-ui:
paths: classpath:META-INF/swagger/views/swagger-ui
mapping: /swagger-ui/**
就像医生说的,我也用Application.java注释了,如下图-
import io.micronaut.runtime.Micronaut;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
@OpenAPIDefinition(
info = @Info(
title = "Email Service",
version = "0.0",
description = "Email Service API",
license = @License(name = "Apache 2.0", url = "https://foo.bar"),
contact = @Contact(url = "https://gigantic-server.com", name = "Fred", email = "Fred@gigagantic-server.com")
)
)
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
}
}
完成所有这些后,当我尝试打开 http://localhost:5655/swagger/email-service-0.0.yaml it opens the generated open API spec yaml. However, if I try opening http://localhost:5655/swagger-ui/ 时,我得到了 404。请注意,如果我将安全设置为 false,一切正常。
谁能帮我解决这个问题?
您可以在 swagger 端点上使用安全规则
https://micronaut-projects.github.io/micronaut-security/latest/guide/#interceptUrlMap
喜欢
micronaut:
security:
enabled: true
intercept-url-map:
-
pattern: /swagger-ui/*
access:
- isAnonymous()
我遇到了同样的问题,但它适用于以下规则:
micronaut:
security:
enabled: true
intercept-url-map:
-
pattern: /swagger-ui/**
http-method: GET
access:
- isAnonymous()
试试用两个 **
而不是一个。
来自指南https://micronaut-projects.github.io/micronaut-security/latest/guide/
不需要包含 GET 方法
micronaut:
security:
enabled: true
intercept-url-map:
- pattern: /swagger-ui/**
access:
- isAnonymous()
按照此处的文档 - https://micronaut-projects.github.io/micronaut-openapi/latest/guide/index.html
我配置了我的 build.gradle 以包含 swagger yaml 生成的编译时任务,如下所示-
tasks.withType(JavaCompile){
options.fork = true
options.forkOptions.jvmArgs << '-Dmicronaut.openapi.views.spec=rapidoc.enabled=true,swagger-ui.enabled=true,swagger-ui.theme=flattop'
options.encoding = "UTF-8"
options.compilerArgs.add('-parameters')}
这就是我的 application.yaml 的样子-
micronaut:
application:
name: email-api
server:
port: 5655
cors:
enabled: true
security:
enabled: true
token:
jwt:
enabled: true
generator:
accessTokenExpiration: 86400
signatures:
secret:
generator:
secret: Test@2020-Ok-Letus-chageit-later
router:
static-resources:
swagger:
paths: classpath:META-INF/swagger
mapping: /swagger/**
swagger-ui:
paths: classpath:META-INF/swagger/views/swagger-ui
mapping: /swagger-ui/**
就像医生说的,我也用Application.java注释了,如下图-
import io.micronaut.runtime.Micronaut;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
@OpenAPIDefinition(
info = @Info(
title = "Email Service",
version = "0.0",
description = "Email Service API",
license = @License(name = "Apache 2.0", url = "https://foo.bar"),
contact = @Contact(url = "https://gigantic-server.com", name = "Fred", email = "Fred@gigagantic-server.com")
)
)
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
}
}
完成所有这些后,当我尝试打开 http://localhost:5655/swagger/email-service-0.0.yaml it opens the generated open API spec yaml. However, if I try opening http://localhost:5655/swagger-ui/ 时,我得到了 404。请注意,如果我将安全设置为 false,一切正常。
谁能帮我解决这个问题?
您可以在 swagger 端点上使用安全规则 https://micronaut-projects.github.io/micronaut-security/latest/guide/#interceptUrlMap
喜欢
micronaut:
security:
enabled: true
intercept-url-map:
-
pattern: /swagger-ui/*
access:
- isAnonymous()
我遇到了同样的问题,但它适用于以下规则:
micronaut:
security:
enabled: true
intercept-url-map:
-
pattern: /swagger-ui/**
http-method: GET
access:
- isAnonymous()
试试用两个 **
而不是一个。
来自指南https://micronaut-projects.github.io/micronaut-security/latest/guide/
不需要包含 GET 方法
micronaut:
security:
enabled: true
intercept-url-map:
- pattern: /swagger-ui/**
access:
- isAnonymous()