通过ajax加载新URL-由于已提交响应,因此无法创建会话。无法存储SecurityContext

时间:2018-11-19 10:12:00

标签: grails spring-security gsp

在我的grails项目(版本2.4.4)中,我正在使用grails-security-rest插件。但由于我们尚未完成摆脱GSP页面的工作,因此我需要传统的安全性才能使用少数API。我已经成功处理了所有情况,但我希望用户从我通过电子邮件发送给他的链接中重定向到特定受保护的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")
  }
} 

对此,我将不胜感激。

0 个答案:

没有答案