Сохранить параметр в @RestController для всего класса или даже приложения вместо копирования одного и того же кода? - PullRequest
0 голосов
/ 27 марта 2019

Допустим, в моем приложении есть несколько классов @RestController.

Я получаю один конкретный параметр из контекста OAuth2Authentication.Пример запроса выглядит следующим образом:

@RequestMapping("/contractor")
public Contractor contractor(OAuth2Authentication authentication) {
    String email = String.valueOf(((LinkedHashMap<String, Object>) authentication.getUserAuthentication().getDetails()).get("email"));
    return contractorRepository.findByEmail(email);
}

Он работает как шарм, но есть одна проблема.Существует множество конечных точек, основанных на объекте OAuth2Authentication, точнее - на строке электронной почты от

String.valueOf(((LinkedHashMap<String, Object>) authentication.getUserAuthentication().getDetails()).get("email"));

Я не очень хорошо понимаю Spring Security или OAuth2, но есть ли способ как-тоautowire this OAuth2Authentication и удерживайте String email как поле в контроллерах Rest, или удерживайте его в отдельном классе и вставляйте его в контроллеры?

1 Ответ

0 голосов
/ 27 марта 2019

Я не знаю, работает ли он с OAuth2Authentication, но вы можете попробовать.

Вы можете использовать SecurityContextHolder из spring-security, чтобы получить объект Authentication, подобный этому:

@RequestMapping("/contractor")
public Contractor contractor() {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...