Description
Affects: 2.4.0
Our code:
fun me(@ApiIgnore principal: Principal): UserDetail {
used to inject the principal
in Spring Boot versions prior to 2.4.0. Under 2.4.0 the argument is then null
and our application breaks.
If the @ApiIgnore
annotation is removed then the principal
is then injected, however we don't want the principal
to be exposed in our API documentation since it is an internal parameter.
It appears that the bug was introduced in #25780. That PR doesn't check to see if there is a AuthenticationPrincipal
annotation on the field, merely that the parameter has any annotations at all so even Nonnull
will break the injection.
We've tried adding the AuthenticationPrincipal
annotation on the field, however that doesn't work since the parameter resolver tries to inject authentication.getPrincipal
which in our case is a String
since we're using spring security oauth2. We want the Principal
injected instead.