Проверка подлинности RunAs не вводится в метод контроллера - PullRequest
0 голосов
/ 31 мая 2018

Я заметил, что когда я заменяю объект Authentication в RunAsManager, аргументы метода разрешаемого контроллера (Authentication, Principal и @AuthenticationPrincipal) игнорируют новый объект Authentication и получают исходный.

Примеры (все 4 метода находятся в одном контроллере)

Это разрешает правильную (runAs) аутентификацию:

@Secured({"ROLE_ADMIN", "ROLE_WORKFLOW", "RUN_AS_USER"})
@PostMapping("/testRunAs")
public ResponseEntity<Result> testRunAs() {
    Authentication authentication = 
              SecurityContextHolder.getContext().getAuthentication();
    log.debug(authentication.getPrincipal().toString());  // correct
    ...

Это разрешениенеправильно (оригинал) Аутентификация:

@Secured({"ROLE_ADMIN", "ROLE_WORKFLOW", "RUN_AS_USER"})
@PostMapping("/testRunAs1")
public ResponseEntity<Result> testRunAs1(Authentication authentication) {
    log.debug(authentication.getPrincipal().toString());  // wrong
    ...

@Secured({"ROLE_ADMIN", "ROLE_WORKFLOW", "RUN_AS_USER"})
@PostMapping("/testRunAs2")
public ResponseEntity<Result> testRunAs2(Principal principal) {
    log.debug(principal.toString());  // wrong
    ...

@Secured({"ROLE_ADMIN", "ROLE_WORKFLOW", "RUN_AS_USER"})
@PostMapping("/testRunAs3")
public ResponseEntity<Result> testRunAs3(@AuthenticationPrincipal User u) {
    log.debug(u.toString());  // wrong
    ...

Как это возможно?

  • resolveArgument* * * * * * * * * * * * * * * *

    * * * * * * * * *1037* * * * runAs * * * *1031* * * *1031* * * *1031* * * * * * * * * * * * *1031* Похоже, аргумент Resolver выполняется до замены runAs, хотя я не могу подтвердить это с помощью отладчика (каким-то образом не могу достичь точки останова в AuthenticationPrincipalArgumentResolver)

    Это ожидаемое поведение?

    Примечание: я нахожусь на Spring Security 4.2.3.RELEASE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...