extjs 未使用JWT加载欢迎页

brccelvz  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(145)

我正在使用Sping Boot with ExtJS和一个/login页面,它是一个带有一些JQuery javascript的普通JSP。我正在尝试集成JWT来保护我的数据API。使用我所能找到的实现JWT的方法,我实现了一个JWTRequestFilter,并从Spring Security中删除了内置的登录流。
我的登录表单现在向/authenticate方法发出$ AJAX POST请求,该方法在响应中返回一个令牌。当我在Postman中手动设置Authentication头并为/welcome页面触发GET请求时,我得到了一个有效的响应......
下面的代码是我如何尝试用令牌更新标头并获取/welcome页面的。我收到401错误,因为当我尝试用此代码访问页面时,Authentication标头丢失了...

$form.on('submit', function(e) {
    e.preventDefault(); 
    $.ajax({  
      url: $form.attr('action'), 
      type: 'POST', 
      dataType: 'json', 
      contentType: 'application/json',
      data: JSON.stringify(dat), 
      success: function(result) {

        var d = new Date();
        d.setTime(d.getTime() + (3*24*60*60*1000));
        var expires = "expires="+ d.toUTCString();

    //  $('head').append('<meta name="Authorization" content="Bearer ' + result.token + '"');
        window.localStorage.setItem("Authorization", "Bearer " + result.token);
    //    document.cookie = "Authorization=Bearer "+result.token + ";" + expires + ";path=/;httpOnly"; 
        window.location="/welcome";
}  error: funciton() {}
);

我试过将令牌放入cookie中(由于格式的原因,Tomcat 9忽略了它)。
我还尝试为欢迎页面创建XMLHttpRequest(),它可以让我返回原始HTML,但我不确定是否需要使用此响应重新加载DOM...

在响应中获取授权令牌,并将其放在/welcome页面的后续/GET的标头中的最佳方法是什么?

70gysomp

70gysomp1#

您没有以正确的方式添加标头。要添加标头,您需要使用beforeSend()

beforeSend: function (xhr) {
  xhr.setRequestHeader ("Authorization", "Bearer " + JWT);
},

需要发送此选项。此外,这里的JWT表示JWT,标记和xhrXMLHttpRequest原始对象。此选项应发送到$.ajax()的参数。

相关问题