我正在使用 SpringBoot 项目进行一些练习,其中包括 JWT 过滤器。 现在过滤器正在从授权标头中提取令牌,一切都正常工作,用 Postman 进行了测试。 问题是我试图制作一个网页,使用 Thymeleaf 在服务器端呈现,但我不知道如何将令牌保留在我的请求中。 现在我正在测试一个登录页面,端点接收凭据并返回适当的响应,包括主体内的 JWT,我的 Javascript 代码(嵌入在 html 中)应该接收令牌,将其保存在本地存储中并重定向时将其包含在请求中。 当使用某些浏览器扩展对标头内的令牌进行硬编码时,它会按应有的方式工作,但如果没有它,它就无法工作。 我做了一些研究,我明白我所做的事情是错误的,因为 axios 它与 SPA 一起使用,并且它无法重定向到另一个页面并修改标题。 有什么办法可以实现我想要的功能吗? 抱歉,如果它看起来很愚蠢,但我实际上没有任何前端知识,这只是我想添加到我的 Spring 项目中的东西。
这是我尝试过但没有成功。
`async function handleSuccess(response) {
const token = response.data.jwt;
const redirect = response.data.url;
localStorage.setItem('jwt', token);
const headers = {
'Authorization': `Bearer ${token}`
};
try {
// Await the axios.get request
const result = await axios.get(redirect, { headers: headers });
console.log('Headers:', headers);
window.location.href = redirect;
} catch (error) {
// Handle errors during redirection
alert('errore');
console.error('Error during redirection:', error);
}
} `
当使用传统的基于服务器渲染的 Web 开发时,浏览器会自动发送 cookie 中的
session-id
(即在登录时将会话 ID 与主体/用户绑定),您也可以将 jwt 令牌带到 url 查询参数中。服务器端将从请求中提取 session-id/url-query-parameter 来识别您是谁。