Spring 4 HttpSession отличается для каждого метода контроллера - PullRequest
0 голосов
/ 29 мая 2018

Скажем, у меня есть два контроллера:

@Controller
public class SetUserController
{

  @PostMapping("/setUser")
  public setUser( @RequestBody User user, HttpSession session)
  {
    session.setAttribute("user", user);
    return "index";
  }
}

...

@Controller
public class GetUserController
{

  @GetMapping("/getUser")
  public getUser( HttpSession session)
  {
    User user = (User)session.getAttribute("user");
    return "index";

   }
}

В методе GetUserController # getUser сессия является совершенно новой сессией (isNew = true и имеетдругой идентификатор), поэтому очевидно, что session.getAttribute () всегда будет возвращать ноль.Создает ли сервлет диспетчера новый объект HttpSession для каждого запроса?Если так ... ПОЧЕМУ?!

Я запускаю это на Tomcat 8.

1 Ответ

0 голосов
/ 29 мая 2018

Проверьте свой путь JSESSIONID cookie или как вы перенаправляете.

Или попробуйте настроить ваши куки следующим образом.

Если у вас есть web.xml

<session-config>
  <cookie-config>
     <name>JSESSIONID</name>
     <path>/</path>
     <http-only>true</http-only>
     <secure>true</secure>
  </cookie-config>
</session-config>

Если вы используете весеннюю загрузку:

    server.servlet.session.cookie.path= /
    server.servlet.session.cookie.name= JSESSIONID
    server.servlet.session.cookie.http-only= true
    server.servlet.session.cookie.secure= true

И теперь переменные сеанса работают между сеансами.Конечно, теперь переменные сеанса не работают при запуске с использованием localhost.Вместо этого вы можете установить sessionCookiePath в корневом узле контекста context.xml:

Я использую сервер Ubuntu и tomcat8.Для tomcat8 context.xml можно найти по адресу /etc/tomcat8/context.xml.

...

Теперь вы должны иметь возможность работать локально (если вы этого не сделалиизмените этот путь на вашем локальном компьютере), а также на сервере без необходимости настройки файла cookie JSESSIONID в ваших приложениях web.xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...