ServletRequestMethodArgumentResolver happend early in the ArgumentResolver chain. One of his ability is to resolve Principal, that's great and it works well.

But when a parameter of type Principal is annotated we don't want to get the Principal from the HttpServletRequest.getUserPrincipal(). This feature is even in conflict with the spring-security documentation and the @AuthenticationPrincipal annotation which is supposed to resolve the Principal from Authentication.getPrincipal().

Having the ServletRequestMethodArgumentResolver resolving annotated Principal makes the @AuthenticationPrincipal and AuthenticationPrincipalArgumentResolver useless and missleading.

Fix spring-projects/spring-security#4151

Comment From: pivotal-issuemaster

@anthonyraymond Please sign the Contributor License Agreement!

Click here to manually synchronize the status of this Pull Request.

See the FAQ for frequently asked questions.

Comment From: pivotal-issuemaster

@anthonyraymond Thank you for signing the Contributor License Agreement!

Comment From: rstoyanchev

Thanks for the extra detail. This is scheduled for 5.3 now.

Why is the spring-framework trying to inject a Principal ?

It is one of many request properties that ServletRequestMethodArgumentResolver aims to expose.

Comment From: anthonyraymond

Thanks for the quick reply.

Since this will most likely get merged, i added a test to ensure it wont break in the future.