Как использовать session_id для вызовов REST?

Я совершаю несколько обращений к сервису. Допустим, мне нужно сделать 10 вызовов службы POST. Каждая служба требует cookie session_id. Если он не предоставлен, служба сгенерирует его и будет использовать для всех вызовов службы.

В своем приложении я делаю несколько последовательных обращений в службу поддержки. Я могу снова вызвать эти вызовы в «цикле», но мне нужен другой session_id для одной итерации.

В коде компонент MyService выполняет вызов службы. Фильтр этой службы сгенерирует session_id. Но метод invoke () может быть вызван несколько раз и Я хочу, чтобы фильтр генерировал разные session_id для каждого вызова invoke () метод. В настоящее время session_id генерируется один раз

@Component
class MyService {
    @Autowired
    private RestTemplate restTemplate;

    /**
     * T - is a request type
     * R - is a response class type
    */
    private <T,R> Optional<R> doPost(String url, T request, Class<R> responseType) {
        return Optional.ofNullable(restTemplate.postForObject(url, request, responseType));
    }

    public void invoke() {
         doPost("url1", someRequest1, SomeResponse1.class);
         doPost("url2", someRequest2, SomeResponse2.class);
    }
}

Я могу создать session_id в методе invoke () и убедиться, что для этих вызовов используется другой session_id. Все служебные вызовы в invoke () будут иметь один и тот же session_id, а следующий вызов будет иметь другой. Но я не уверен, что такой подход - правильный путь для достижения этой цели.

Что посоветуете использовать?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
35
1

Ответы 1

session_id генерируется каждым клиентом (если вы тестируете из другого веб-браузера, вы увидите другой session_id), единственный способ получить другой для каждого запроса - это сделать сеанс недействительным, хотя, если вам требуется uuid по запросу, используйте прослушиватель

public class ProjectRequestListener implements ServletRequestListener {    

 @Override
 public void requestInitialized(ServletRequestEvent requestEvent) {
     requestEvent.getServletRequest().setAttribute("requestId", UUID.randomUUID());
 }

 @Override
 public void requestDestroyed(ServletRequestEvent requestEvent) {
    requestEvent.getServletRequest().setAttribute("requestId", null);
 }
}

и добавляем слушателя в проект web.xml

<listener>
    <listener-class>
    com.project.server.ProjectRequestListener
    </listener-class>
</listener>

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