Spring boot - HttpSession пуст между двумя разными запросами - PullRequest
1 голос
/ 16 февраля 2020

Во-первых, когда я вызываю API "/ fetch / event / 1221", я могу установить атрибут сеанса, но я получаю httpSession как ноль, когда вызываю API "fetch / partcipant". Как я могу это исправить?

@RequestMapping(value = "/fetch/event/{eventId}", method = RequestMethod.GET)
        public SuccessResponse<Event> fetchEvent(@PathVariable("eventId") String eventId, HttpServletRequest httpServletRequest) throws ExecutionException, InterruptedException {
            Event event = eventService.getEventById(eventId);
            HttpSession httpSession = httpServletRequest.getSession(false);
            httpSession.setAttribute("event", event);
            return new SuccessResponse<Event>(event);
        }


 @RequestMapping(value = "/fetch/participant", method = RequestMethod.GET)
    public SuccessResponse<List<Participant>> getListOfActiveParticipants(HttpServletRequest httpServletRequest) throws ExecutionException, InterruptedException {
        HttpSession httpSession = httpServletRequest.getSession(false);
        Event event = (Event) httpSession.getAttribute("event");
        System.out.println((Event) httpSession.getAttribute("event"));
        return new SuccessResponse<>(participantService.getParticipants("ALL", event.getId()));
    }

1 Ответ

0 голосов
/ 16 февраля 2020

Прежде всего, вы используете httpServletRequest.getSession(false) в /fetch/event/, он не будет создавать сеанс, если нет текущего сеанса. Измените его на true, чтобы принудительно создать новый, если нет текущего сеанса:

 HttpSession httpSession = httpServletRequest.getSession(true);

После создания сеанса он вернет идентификатор сеанса через cook ie в заголовке ответа. :

< HTTP/1.1 200
< Set-Cookie: JSESSIONID=6AD698B82966D43FF395E54F5BFCEF65; Path=/; HttpOnly

Чтобы указать серверу использовать определенный сеанс, последующий запрос должен включать этот идентификатор сеанса через cook ie. В случае вы можете сделать:

$ curl -v --cookie "JSESSIONID=6AD698B82966D43FF395E54F5BFCEF65" http://127.0.0.1:8080/fetch/partcipant

, который добавит следующий заголовок HTTP-запроса:

> GET /fetch/participant HTTP/1.1
> Host: 127.0.0.1:8080
> Cookie: JSESSIONID=6AD698B82966D43FF395E54F5BFCEF65

Затем в getListOfActiveParticipants() вам следует получить сессию, созданную в fetchEvent()

...