Страница Thymeleaf не отображается должным образом при успешном вызове ajax - PullRequest
0 голосов
/ 09 мая 2020

Я начал тимелеаф и jquery / ajax. Я пытался создать форму входа в систему. При успешном входе в систему api возвращает токен jwt, а в последующих вызовах API используется токен jwt в заголовке запроса «Авторизация». Добавление jquery для страницы входа ниже.


    $("#login-form").submit(function (event) {

        event.preventDefault();

        var loginForm = {}
        loginForm["username"] = $("#user").val();
        loginForm["password"] = $("#pass").val();


        $("#btn-login").prop("disabled", true);

        $.ajax({
            type: "POST",
            contentType: "application/json",
            url: "/login",
            data: JSON.stringify(loginForm),
            dataType: 'json',
            cache: false,
            timeout: 600000,
            success: function (data) {
                console.log("jwt_token ", data);
                $.ajax({
                    type: "GET",
                    url: "/home",
                    headers: {'Authorization' : data},
                    cache: false,
                    timeout: 600000,
                    success: function (data) {
                        console.log("Home page api success");
                    },
                    error: function (e) {

                    }
                });

            },
            error: function (e) {
            }
        });

    });

});

Добавление файла контроллера ниже.


import javax.servlet.http.HttpServletRequest;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class TestController {


  @GetMapping("/login")
  public String showLoginPage() {
      return "login";
  }

  @GetMapping("/home")
  public String showHomePage(HttpServletRequest request) {
      final String jwtToken = request.getHeader("Authorization");
      System.out.println("token" + jwtToken);
      return "home";
  }

}

Здесь у меня 2 проблемы.

  1. При успешном входе в систему я не перенаправляюсь на домашнюю страницу. Он все еще находится на странице входа. Но я мог видеть, как токен jwt печатается в консоли браузера.

  2. Мне не удалось получить заголовок авторизации в моем контроллере. Контроллер печатает значение токена в консоли как токен [объект объекта] .

Пожалуйста, помогите. Заранее спасибо.

1 Ответ

0 голосов
/ 09 мая 2020

В качестве ответа на вашу первую проблему:

@Override
protected void configure(final HttpSecurity http) throws Exception {
   http
     .authorizeRequests()
     // ... endpoints
     .formLogin()
     .loginPage("/login.html")
     .loginProcessingUrl("/login")
     .defaultSuccessUrl("/homepage.html", true)
     // rest...
}

Вы можете дать имя своей домашней странице в методе defaultSuccessUrl.

Для второй проблемы вы должны иметь возможность получить строковое значение «Авторизация». В вашем методе showHamePage нет ничего плохого.

Я подозреваю, что проблема возникает из AJAX ответа / запроса. Я думаю, вы получаете «jwt_token» в формате JSON и отправляете все эти JSON данные без синтаксического анализа. Вам нужно сначала выполнить синтаксический анализ и присвоить значение заголовкам - поле авторизации.

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