#java #spring #spring-boot #java.security
#java #spring #spring-boot #java.security
Вопрос:
У меня есть служба Spring API, которая принимает Principal.
public ResponseEntity<ApiCustomResponse> create(Principal principal, UrlInfoData urlinfo) throws ApiException;
Принципал создается автоматически Spring для вызовов API OAuth2. Я хотел бы использовать ту же службу для интерфейса администратора веб-страницы.
@Autowired
private IShortUrlService apiService;
...
Principal principal = new Principal();
apiService.create(principal, urlinfo);
Я хочу создать экземпляр участника с именем текущего зарегистрированного пользователя admin. Однако все классы, создающие экземпляры, устарели. Как я могу создать экземпляр участника для передачи в службу?
https://docs.oracle.com/javase/8/docs/api/java/security/Principal.html
Ответ №1:
Поскольку java.security.Principal
это интерфейс, почему бы вам его не реализовать?
Principal principal = new Principal() {
@Override
public String getName() {
return adminName;
}
}
apiService.create(principal, urlinfo);
Кроме того, вы можете получить принципала для текущего зарегистрированного пользователя с помощью: SecurityContextHolder.getContext().getAuthentication().getPrincipal()
Комментарии:
1. Более короткий способ сделать это — использовать лямбда-выражение:
final Principal principal = () -> adminName;