Как мне создать экземпляр java.security.Принципал? Все подклассы устарели

#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;