You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Micronaut应用中为Swagger静态资源配置Basic认证方案

在Micronaut中同时使用Bearer(JWT)和Basic认证保护不同资源

要实现控制器用JWT Bearer认证、Swagger静态资源用Basic认证的需求,你需要启用Micronaut的多认证模式,并针对不同路径指定对应的认证提供者。具体步骤如下:

1. 添加必要依赖

首先确保你的项目包含Basic认证和密码加密的依赖(以Gradle为例):

implementation("io.micronaut.security:micronaut-security-basic")
implementation("io.micronaut.security:micronaut-security-password-encoder")

如果使用Maven,对应依赖如下:

<dependency>
    <groupId>io.micronaut.security</groupId>
    <artifactId>micronaut-security-basic</artifactId>
</dependency>
<dependency>
    <groupId>io.micronaut.security</groupId>
    <artifactId>micronaut-security-password-encoder</artifactId>
</dependency>

2. 修改配置文件(application.yml)

更新你的配置,启用多认证模式,配置Basic认证用户,并为不同路径指定认证方式:

micronaut:
  router:
    static-resources:
      default:
        paths: classpath:META-INF/static
        mapping: /static/**
      swagger:
        paths: classpath:META-INF/swagger
        mapping: /swagger/**
      redoc:
        paths: classpath:META-INF/swagger/views/redoc
        mapping: /redoc/**
      rapidoc:
        paths: classpath:META-INF/swagger/views/rapidoc
        mapping: /rapidoc/**
      swagger-ui:
        paths: classpath:META-INF/swagger/views/swagger-ui
        mapping: /swagger-ui/**

  security:
    authentication: multiple  # 启用多认证模式
    providers: [bearer, basic] # 注册Bearer和Basic认证提供者
    endpoints:
      login:
        enabled: true
      oauth:
        enabled: true
      keys:
        enabled: true
    token:
      jwt:
        enabled: true
        signatures:
          secret:
            generator:
              secret: 'itsmysecret'
        generator:
          access-token:
            expiration: 600 # 10min
          refresh-token:
            secret: 'itsmysecret'
            enabled: true
    # 配置Basic认证的内存用户(密码用BCrypt加密,可自行生成哈希值)
    users:
      swagger-admin:
        password: '$2a$10$EixZaY3sT7ybzJ9jS5pZ/.Vx5pK8hL5W9y3e8eY7y8eY7y8eY7y8e' # 示例密码:swagger123
        roles:
          - ADMIN
    intercept-url-map:
      # Swagger相关路径要求Basic认证
      - pattern: /swagger-ui/**
        http-method: GET
        access:
          - isAuthenticated()
        authProvider: basic
      - pattern: /swagger/**
        http-method: GET
        access:
          - isAuthenticated()
        authProvider: basic
      - pattern: /redoc/**
        http-method: GET
        access:
          - isAuthenticated()
        authProvider: basic
      - pattern: /rapidoc/**
        http-method: GET
        access:
          - isAuthenticated()
        authProvider: basic
      # 静态资源和健康检查保持匿名访问
      - pattern: /static/**
        http-method: GET
        access:
          - isAnonymous()
      - pattern: /health/**
        http-method: GET
        access:
          - isAnonymous()
      # 控制器API路径要求Bearer认证(根据你的实际API路径调整)
      - pattern: /api/**
        http-method: ANY
        access:
          - isAuthenticated()
        authProvider: bearer

关键配置说明

  • security.authentication: multiple:告诉Micronaut允许同时使用多种认证方式
  • security.providers:指定要启用的认证提供者,这里包含bearer(对应JWT)和basic
  • security.users:配置用于Basic认证的用户,密码必须是加密后的格式(示例用BCrypt,你可以用在线工具生成自己的密码哈希)
  • intercept-url-map中的authProvider字段:为每个路径指定对应的认证方式,Swagger路径用basic,API路径用bearer

这样配置后,用户访问Swagger相关资源时需要输入Basic认证的用户名和密码,而访问受保护的API控制器时则需要提供JWT Bearer令牌。

内容的提问来源于stack exchange,提问作者Stefan Urbansky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:57:11