Java 弹簧靴JWT认证
我尝试使用spring boot开发web应用程序,对于身份验证,我使用以下教程: 它的工作很好,但刷新页面后连接丢失(注销),需要重新登录。 我知道我需要会话/cookies,但我不知道如何做到这一点 你能帮我吗? 以下是源代码:Java 弹簧靴JWT认证,java,angularjs,spring,authentication,spring-boot,Java,Angularjs,Spring,Authentication,Spring Boot,我尝试使用spring boot开发web应用程序,对于身份验证,我使用以下教程: 它的工作很好,但刷新页面后连接丢失(注销),需要重新登录。 我知道我需要会话/cookies,但我不知道如何做到这一点 你能帮我吗? 以下是源代码: thnx您不需要会话/cookies,因为您使用的是包含用户信息的JWT令牌。 在源代码中,我看不到任何在浏览器中存储jwt令牌的代码。我也看不到任何刷新jwt。所以我想,您必须实现这一点(或者至少是令牌存储)。 我是这样看的: 将JWT令牌存储在浏览器内存中。在里
thnx您不需要会话/cookies,因为您使用的是包含用户信息的JWT令牌。
在源代码中,我看不到任何在浏览器中存储jwt令牌的代码。我也看不到任何刷新jwt。所以我想,您必须实现这一点(或者至少是令牌存储)。
我是这样看的:
res.token
值。您可以将此值保存到本地浏览器
使用localStorage.setItem(“JwtToken”,res.token)
进行存储李>
为此,您必须在加载应用程序时从本地存储中获取令牌,将其设置为所有http请求的默认头,并向后端的
/user
端点发出请求,以获取用户对象。您可以从令牌(使用base64)对用户进行编码,但调用端点会更简单。因此,您可以使用run方法(在初始化之前完成):
angular.module('fooApp')。运行(['$http','$rootScope','AuthService',
函数($http、$rootScope、AuthService){
var token=localStorage.getItem(“JwtToken”);
如果(令牌){
$http.defaults.headers.common['Authorization']='Bearer'+令牌;
$http.get('./user')。然后(函数(resp){
AuthService.user=resp;
});
}
}
]);代码>
当然,下一步应该是jwt令牌刷新(运行时/路由更改/每个请求-有很多选项),但这是不可能的 您不需要会话/cookies,因为您使用的是包含用户信息的JWT令牌。
在源代码中,我看不到任何在浏览器中存储jwt令牌的代码。我也看不到任何刷新jwt。所以我想,您必须实现这一点(或者至少是令牌存储)。
我是这样看的:
res.token
值。您可以将此值保存到本地浏览器
使用localStorage.setItem(“JwtToken”,res.token)
进行存储李>
为此,您必须在加载应用程序时从本地存储中获取令牌,将其设置为所有http请求的默认头,并向后端的
/user
端点发出请求,以获取用户对象。您可以从令牌(使用base64)对用户进行编码,但调用端点会更简单。因此,您可以使用run方法(在初始化之前完成):
angular.module('fooApp')。运行(['$http','$rootScope','AuthService',
函数($http、$rootScope、AuthService){
var token=localStorage.getItem(“JwtToken”);
如果(令牌){
$http.defaults.headers.common['Authorization']='Bearer'+令牌;
$http.get('./user')。然后(函数(resp){
AuthService.user=resp;
});
}
}
]);代码>
当然,下一步应该是jwt令牌刷新(运行时/路由更改/每个请求-有很多选项),但这是不可能的 您好,wkubasik,请回答第1步。成功完成,(我使用控制台命令localstorage及其返回令牌..检查它)步骤2。我正在home.js angular.module('JWTDemoApp')下添加此代码。运行(>>>您的代码嗨。我在代码中没有什么错误。您可以剪切行
$http.defaults.headers.common['Authorization']='Bearer'+token;
并将其粘贴到$http.get('./user')之前吗
request call?因为我们应该在此请求之前将jwt token设置为header。我更新了我的答案。希望它能帮助我这样做,但在重新加载后,仍然会注销:(如果您使用Chrome浏览器,请单击f12,转到“网络”选项卡,并查找/user request(您必须在页面显示之前刷新页面)。然后单击此请求并选择“预览”选项卡。您应该会在那里看到您的用户对象。检查用户是否在那里。您可以在/用户终结点中添加ResponseEntity作为后端的返回值。{“id”:1,“name”:“admin”,“username”:“admin”,“roles”:[“user”,“admin”]}我看到了此对象,但不了解下一步“您可以将ResponseEntity作为返回值添加到/user endpoint中的后端上。”您好,wkubasik,thnx获取答案,步骤1。成功完成,(我使用控制台命令localstorage及其返回令牌检查它。)步骤2。我正在home.js angular.module('JWTDemoApp')下添加此代码。运行(>>>您的代码您好。我在代码中犯了一点小错误。您可以剪切行$http.defaults.headers.common['Authorization']='Bearer'+token;
并将其粘贴到$http.get('./user')之前吗
request call?因为我们应该在此请求之前将jwt token设置为header。我更新了我的答案。希望它能帮助我这样做,但在重新加载后,仍然会注销:(如果您使用Chrome浏览器,请单击f12,转到“网络”选项卡,并查找/user request(您必须在页面显示之前刷新页面)。然后单击此请求并选择“预览”选项卡。您应该会在那里看到您的用户对象。检查用户是否在那里。您可以将响应作为返回值添加到/user endpoint中的后端。{“id”:1,“name”:“admin”,“username”:“admin”,“roles”:[“user”,“admin”]}我看到了此对象,但不了解下一步”您可以将ResponseEntity作为返回值添加到/user endpoint中的后端。“