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

如何在Micronaut中同时实现JWT与Basic认证并按URL分流

在Micronaut中配置多路径匹配的双认证规则(JWT + Basic)

完全可以基于URL配置两套独立的Web安全规则,Micronaut通过@SecurityFilterChain注解支持多过滤器链的定义,只需为不同路径指定对应的认证逻辑即可。以下是具体实现步骤:

1. 确保依赖齐全

确保项目中引入JWT和Basic认证所需的Micronaut Security依赖:

Gradle(build.gradle)

implementation("io.micronaut.security:micronaut-security-jwt")
implementation("io.micronaut.security:micronaut-security-basic")

Maven(pom.xml)

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

2. 配置Basic认证的用户信息

在application.yml中配置Basic认证的测试用户(生产环境建议用自定义UserDetailsService从数据库读取):

micronaut:
  security:
    users:
      admin:
        password: admin123
        roles:
          - ADMIN

3. 定义双安全过滤器链

创建配置类,通过@SecurityFilterChain定义两套规则,注意顺序:更具体的路径规则要放在前面,避免被通用路径覆盖:

import io.micronaut.security.authentication.Authenticator;
import io.micronaut.security.filters.SecurityFilterChain;
import io.micronaut.security.rules.SecurityRule;
import jakarta.inject.Singleton;

@Singleton
public class DualSecurityConfiguration {

    // 第一套:匹配/internal/**路径,使用Basic认证
    @SecurityFilterChain(patterns = "/internal/**")
    public SecurityFilterChain internalBasicAuthChain(Authenticator basicAuthAuthenticator) {
        return SecurityFilterChain
                .builder()
                .authenticator(basicAuthAuthenticator)
                .securityRule(SecurityRule.IS_AUTHENTICATED) // 要求必须认证
                .build();
    }

    // 第二套:匹配所有剩余路径,使用JWT认证(自动排除已被前面链匹配的路径)
    @SecurityFilterChain(patterns = "/**")
    public SecurityFilterChain jwtAuthChain(Authenticator jwtAuthenticator) {
        return SecurityFilterChain
                .builder()
                .authenticator(jwtAuthenticator)
                .securityRule(SecurityRule.IS_AUTHENTICATED)
                .build();
    }
}

关键说明

  • 过滤器链顺序:Micronaut会按@SecurityFilterChain的定义顺序匹配路径,因此/internal/**的链必须放在/**的前面,否则所有请求都会被JWT链拦截。
  • Authenticator注入:Micronaut会自动根据依赖提供basicAuthAuthenticator和jwtAuthenticator,无需手动实例化。
  • 路径自动隔离:不需要单独排除JWT对/internal/**的拦截,请求匹配到第一套链后,不会进入第二套链的处理逻辑。

如果你的JWT认证需要自定义过滤器(比如Token解析逻辑),只需确保JWT相关过滤器的pattern属性指定为非/internal/**的路径即可。

内容的提问来源于stack exchange,提问作者Arun Pal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:52:46