Чтобы загрузить новый URL через ajax - не удалось создать сеанс, поскольку ответ был зафиксирован. Невозможно сохранить SecurityContext - PullRequest
0 голосов
/ 19 ноября 2018

В моем проекте grails (версия 2.4.4) я использую плагин grails-security-rest.Но для нескольких API мне нужна традиционная безопасность, потому что мы еще не завершили избавление от страниц GSP.Я успешно справился со всеми сценариями, кроме одного, в котором я хочу, чтобы пользователь перенаправлял на определенный защищенный GSP по ссылке, которую я отправляю ему по электронной почте.Если пользователь уже вошел в систему, перенаправление происходит гладко, но когда я пытаюсь получить к нему доступ через вызов AJAX (после получения токена JWT), он перенаправляет обратно на исходную страницу, и в журналах я нахожу эту проблему - «Сбой»создать сеанс, поскольку ответ был принят. Невозможно сохранить SecurityContext. "

class InternalPagesController {

def springSecurityService

def index() {
    if (springSecurityService.isLoggedIn()) {
        redirect(controller: params.cname, action: params.aname, params: params) 
      } else {
        model: [params: params]
      }

}

}

Связанная страница gsp содержит следующее -

<script>
function login(){
    var email=document.getElementById("username").value;
var password= document.getElementById("password").value;
var formData = {"email": email, "password" : password};
    console.log("hello"+email);
    //var url = "${createLink(controller:'login', action:'authenticationJwt')}";
    $.ajax({
         url: "${grailsApplication.config.grails.ServerURL}/api/login",
         type: 'POST',
         data: JSON.stringify(formData), 
         async: false,
         contentType : 'application/json', 
         success: function(data) {
         localStorage.setItem('access_token',data.access_token)
         dashboard(data);
       },
        error: function(data) {
            console.log("errordata :"+data)
            }    
       });
    }
   function dashboard(data){
     var url = "${createLink(controller:'controllerName', action:'actionName')}";
                $.ajax({
                                url : url,
                                type : 'GET',
                                async: false,
                                contentType : 'application/json',
                                beforeSend : function(xhr) {
                                    xhr.setRequestHeader("Authorization", "Bearer "
                                            + data.access_token);
                                },
                                success : function(data) {

                                    //window.location=url;
                                },
                                error : function(data) {
                                    console.log("errordata :" + data)
                                }
                            });

                        }

  </script>

В userRequestResponse я пытаюсь отобразить другое представление, и именно здесь проблема.

class LeaveTrackerController {
  @Secured(["ROLE_USER"])
  def userRequestResponse(){
   render (view : "/leaveTracker/tokenExpired")
  }
} 

Я буду благодарен за любую помощь по этому вопросу.

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