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




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>