Почему Spring Boot Microservice имеет параметр Principal с нулевым значением и как получить фактическое значение, которое имеет клиентское приложение? - PullRequest
0 голосов
/ 12 марта 2020

В Spring Boot у меня есть следующий микросервис, которому необходим объект Principal для доступа к зарегистрированной информации пользователя:

        @RequestMapping(value="/circular-save")
        public Boolean saveCircularView(HttpServletRequest request, Principal principal, HttpSession session, Locale locale, ModelAndView mav,
                @ModelAttribute CircularsBean souqBean) {


            System.out.println( "circular-save microservice Called...........principal="+principal);

            //some user related code here that depends on principal
    }

Вывод:

circular-save microservice Called.....................principal=null

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

System.out.println("Will call circulars with principal:"+principal.getName());
restTemplate.getForObject("http://localhost:8081/circular-save", Boolean.class);

Вывод:

Will call circulars with principal:travelling.salesman

Как видите, основное значение не равно нулю на стороне клиента, но оно равно нулю на сервере сторона. Как правильно передать этот главный объект между микросервисами?

Мое исследование:

Сначала я собирался передать его в json запросе и использовать метод POST, но мне не удалось это сделать, потому что это не POJO, и его невозможно сериализовать .

Я провел дополнительные исследования и нашел эту строку, которую можно написать на стороне сервера.

principal = SecurityContextHolder.getContext().getAuthentication();

К сожалению, вышеупомянутое решение дало мне другой объект, который привел к анонимному пользователю, который отличается от исходного пользователя.

Буду признателен за любую помощь. Спасибо.

...