我正在使用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的标头中的最佳方法是什么?
1条答案
按热度按时间70gysomp1#
您没有以正确的方式添加标头。要添加标头,您需要使用
beforeSend()
:需要发送此选项。此外,这里的
JWT
表示JWT,标记和xhr
是XMLHttpRequest
原始对象。此选项应发送到$.ajax()
的参数。