【问题标题】:Micronaut (Gradle & Java) - Swagger Integration Views not accessible with security enabledMicronaut(Gradle 和 Java)- 启用安全性后无法访问 Swagger 集成视图
【发布时间】:2020-06-09 16:03:42
【问题描述】:

按照这里的文档 - 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 时,它会打开生成的开放 API 规范 yaml。但是,如果我尝试打开 http://localhost:5655/swagger-ui/,我会收到 404。请注意,如果我将安全设置为 false,一切正常。

谁能帮我解决这个问题?

【问题讨论】:

  • 有人遇到过同样的问题吗?如果是这样,你能帮我解决这个问题吗?
  • 你怎么知道 url 是“/swagger/email-service-0.0.yaml”?在文档中它是“hello-world”,但它没有在任何地方配置。它是否将“title”属性转换为 kebab-case 并与版本号连接?

标签: java swagger swagger-ui micronaut micronaut-openapi


【解决方案1】:

我有同样的问题,但它适用于以下规则:

micronaut:
  security:
    enabled: true
    intercept-url-map:
      -
        pattern: /swagger-ui/**
        http-method: GET
        access:
          - isAnonymous() 

只需使用两个 ** 而不是一个。

【讨论】:

  • 感谢@Christopher 的帮助。它对我有用。现在我可以看到招摇的 UI。我需要有关标记化服务的帮助。我的服务是不记名令牌授权的,我无法用招摇来做。如果有,请分享任何示例代码。
  • @Buddha 很高兴听到它有帮助!我想如果你为后续问题打开一个新问题会更好。不确定我是否可以帮助解决这个问题,但如果你分享链接,我可以看看。
【解决方案2】:

来自指南https://micronaut-projects.github.io/micronaut-security/latest/guide/

不需要包含 GET 方法

micronaut:
  security:
    enabled: true
    intercept-url-map:
      - pattern: /swagger-ui/**
        access:
          - isAnonymous()

【讨论】:

    【解决方案3】:

    您可以在 swagger 端点上使用安全规则 https://micronaut-projects.github.io/micronaut-security/latest/guide/#interceptUrlMap

    喜欢

    micronaut:
      security:
        enabled: true
        intercept-url-map:
          -
            pattern: /swagger-ui/*
            access:
              - isAnonymous() 
    

    【讨论】:

    • @IEEE1394,感谢您提供的详细信息。我根据您的建议进行了配置更改,但对我不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多