Почему Spring Boot перенаправляет с помощью jsessionid в URL, хотя я уже выключил его? - PullRequest
0 голосов
/ 15 ноября 2018

Google Chrome делает этот запрос на странице входа.

Запрос
Request URL: http://app.country-region-9.elasticbeanstalk.com/admin/login
Request Method: POST
Status Code: 302 Found
Remote Address: 99.99.99.99:80
Referrer Policy: no-referrer-when-downgrade
отклик
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: keep-alive
Content-Language: en-US
Content-Length: 0
Date: Thu, 15 Nov 2018 04:23:19 GMT
Expires: 0
Location: /home;jsessionid=15884DA40ECAD4F5CBA6CD138B4B4105
Pragma: no-cache
Server: nginx/1.12.1
Set-Cookie: JSESSIONID=15884DA40ECAD4F5CBA6CD138B4B4105; Path=/; HttpOnly

У меня есть этот параметр уже в application.properties.

server.session.tracking-modes=cookie

Так почему Spring Boot добавляет ;jsessionid к месту перенаправления? Это ломает приложение, потому что Spring Security жалуется на точку с запятой. Он работает на моей локальной машине и не добавляет сеанс. Это происходит только при развертывании в AWS.

Это действие в контроллере, которое перенаправляет:

    @RequestMapping(value = "/admin/login", method = RequestMethod.POST)
    public String doLogin(HttpServletRequest request, HttpServletResponse response) {
...
            request.getSession().setAttribute("user", user);
            return "redirect:/home";

Я также подтвердил это с помощью curl

$ curl -i http://app.country-region-9.elasticbeanstalk.com/admin/login -d username=xxxx -d password=xxxxxxxxxxx 
HTTP/1.1 302 Found                                                                                   
...
Location: /home;jsessionid=5A1009B5F3C59ED0F794E625B5E36EA0                                          

Но он не делает это локально.

$ curl -i http://localhost:8080/admin/login -d username=xxxxx -d password=xxxxxxxxxx
HTTP/1.1 302
Set-Cookie: JSESSIONID=4B8930CCC8CE85167089CEBEB47657D4; Path=/; HttpOnly
...
Location: http://localhost:8080/home
...