Как использовать session_id для вызовов REST? - PullRequest
0 голосов
/ 10 января 2019

Я делаю несколько звонков в службу. Допустим, мне нужно сделать 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, а следующий вызов будет другим. Но я не уверен, является ли этот подход правильным способом достижения этой цели.

Что вы можете посоветовать мне использовать?

1 Ответ

0 голосов
/ 10 января 2019

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...