Class BearerTokenGuard
app.api-token declarado e vazio recusa o boot.
Sem esta guarda, o par feature ligada + token vazio passa em silêncio e o efeito é
indisponibilidade, não auth-bypass: o StaticBearerTokenValidator é fail-closed, logo
/api/** responde 401 a tudo enquanto o app sobe healthy — o sintoma chega horas
depois como "a integração parou", sem nada no boot apontando a causa. É a mesma classe de misconfig
do placeholder não resolvido, que também recusa o boot.
Como a lib sabe que a feature está ligada: pela presença da property, não por uma
flag nova. Declarar o token é declarar a feature — app.api-token: ${APP_API_TOKEN:}
com a env ausente resolve para "" e cai aqui; app que não usa Bearer simplesmente não
declara a property e segue com o validador dormente, boot intacto. Uma flag paralela
(bearer.enabled) seria uma segunda fonte de verdade capaz de discordar da primeira, e um
@Requires(pattern = ".+") no validador faria o bean sumir em silêncio — o mesmo sintoma,
sem nem um bean para culpar.
@Context, não @Singleton: singleton é lazy e a guarda só dispararia quando
alguém resolvesse o bean (possivelmente no primeiro request). Guarda de boot tem de ser eager.
Tolerância: em dev/test, ou com micronaut.security.enabled=false, o token
vazio só loga WARN — senão todo dev sem a env exportada perde o boot local.
O app que tinha guard próprio equivalente o remove no mesmo PR da adoção, senão os dois coexistem.
-
Constructor Summary
ConstructorsConstructorDescriptionBearerTokenGuard(String apiToken, boolean securityEnabled, io.micronaut.context.env.Environment environment) Verifica a configuração do Bearer no startup do contexto. -
Method Summary
-
Constructor Details
-
BearerTokenGuard
public BearerTokenGuard(@Value("${app.api-token:}") String apiToken, @Value("${micronaut.security.enabled:true}") boolean securityEnabled, io.micronaut.context.env.Environment environment) Verifica a configuração do Bearer no startup do contexto.- Parameters:
apiToken- valor resolvido deapp.api-token(default vazio quando ausente).securityEnabled- valor demicronaut.security.enabled(defaulttrue).environment- ambiente Micronaut: diz se a property foi declarada e se o perfil é dev/test.
-