Получить и установить значение сеанса

В Java, особенно при весенней загрузке, как я могу получить или установить значение сеанса домена A из домена B, вызвав Api с помощью RestTemplate?

Пример в домене B. Я использовал RestTemplate postForObject для вызова Api из домена demo2.com:

public ResponseEntity<String> doLogout(@RequestBody String userId){
    System.out.println("123" + userId);
    RestTemplate rest = new RestTemplate();
    for(String s : listUrl) {
        System.out.println("url: " + s);
        rest.postForObject("http://demo2.com"+"/doLogout", userId, String.class);
    }
    return new ResponseEntity<String>(HttpStatus.OK);
}

На demo2.com вот мой API. Но когда я напечатал значение атрибута сеанса userId и access-token на сайте demo2.com, оно всегда показывает нуль.

@RequestMapping(value = "/doLogout", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> doLogout(HttpServletRequest request, @RequestBody String userId){
    System.out.println("abc" + SessionUtil.getAttribute(request, "access-token") + SessionUtil.getAttribute(request, "userId"));
    if (userId.equals(SessionUtil.getAttribute(request, "userId"))) {
        System.out.println("vao day");
        SessionUtil.setAtribute(request, "access-token", null);
    }
    return new ResponseEntity<String>(HttpStatus.OK);
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
412
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя я никогда не использовал метод postForObject с RestTemplate, я вижу в их документации (https://www.baeldung.com/rest-template), что вы должны обернуть свой параметр Post в объект HttpEntity.

Поэтому на вашем месте я бы попробовал, как они предлагают,

ClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
RestTemplate restTemplate = new RestTemplate(requestFactory);

HttpEntity<String> request = new HttpEntity<>(new String("<user_id_value>"));
String userId = restTemplate.postForObject("http://demo2.com"+"/doLogout", request, String.class);
System.out.println("User ID : " + userId);

Однако postForObject используется для создания ресурса, который затем будет возвращен. Если вы хотите отправить форму с параметрами публикации, которые вы укажете и назовете по желанию, вам нужно следовать 4.4 по ссылке, которую я вставил выше,

https://www.baeldung.com/rest-template

Таким образом, если вы включите пару ключ-значение для идентификатора пользователя, вы сможете получить ее на demo2.com.

Другие вопросы по теме