Spring Boot JWT 身份验证
Posted
技术标签:
【中文标题】Spring Boot JWT 身份验证【英文标题】:Spring boot JWT auth 【发布时间】:2018-02-27 22:29:41 【问题描述】:我尝试使用 Spring Boot 开发 Web 应用程序,我使用以下教程进行身份验证:http://www.techforumist.com/spring-boot-security-jpa-using-jwt-angularjs-tutorial-2/#comment-2848
它工作得很好,但在刷新页面连接后丢失(注销) - 并且需要重新登录。 我知道我需要会话/cookie,但我不知道该怎么做。
你能帮帮我吗? 这是源代码:https://github.com/techforumist/jwt-spring-boot-security-angularjs
谢谢
【问题讨论】:
【参考方案1】:您不需要会话/cookie,因为您使用 JWT 令牌,其中包含有关用户的信息。 在源代码中,我看不到任何将 jwt 令牌存储在浏览器中的代码。我也看不到任何刷新 jwt。所以我想,你必须实现那个(或者至少是令牌存储)。 我是这样看的:
-
将 JWT 令牌存储在浏览器内存中。在
https://github.com/techforumist/jwt-spring-boot-security-angularjs/blob/master/src/main/resources/static/app/controllers/login.js你
有
res.token
值。您可以将此值保存到浏览器本地
存储与localStorage.setItem("JwtToken", res.token)
。
在您的前端应用中刷新后对用户进行身份验证。
为此,您必须在加载应用程序时从本地存储中获取令牌,将其设置为所有 http 请求的默认标头,并向后端中的 /user
端点发出请求,以获取用户对象。您可以从令牌(使用 base64)对用户进行编码,但调用端点会更简单。
所以在角度上你可以使用 run 方法(它在初始化之前完成):
angular.module('fooApp').run(['$http', '$rootScope', 'AuthService',
function($http, $rootScope, AuthService)
var token = localStorage.getItem("JwtToken");
if(token)
$http.defaults.headers.common['Authorization'] = 'Bearer ' + token;
$http.get('./user').then(function(resp)
AuthService.user = resp;
);
]);
这应该可以完成页面刷新后记录用户的技巧。 当然,下一步应该是刷新 jwt 令牌(在运行/路由更改/每个请求时 - 有很多选项),但这不是问题所在。
【讨论】:
hi, wkubasik, thnx for answer,第 1 步。成功完成,(我使用控制台命令 localstorage 及其返回令牌检查它。)第 2 步。我在 home.js 下添加此代码 angular.module('JWTDemoApp').run( >>>your code 嗨。我在代码中犯了小错误。你能在$http.get('./user')
请求调用之前剪下$http.defaults.headers.common['Authorization'] = 'Bearer ' + token;
这一行并粘贴它吗?因为我们应该在这个请求之前将 jwt token 设置为 header。我更新了我的答案。希望对你有帮助
我这样做了,但重新加载后没有任何变化仍然注销:(
如果您使用 Chrome 浏览器,请单击 f12,转到“网络”选项卡,然后查找 /user 请求(您必须刷新页面才能显示)。然后单击此请求并选择“预览”选项卡。您应该在那里看到您的用户对象。检查用户是否在那里。您可以在 /user 端点中添加 ResponseEntity 作为后端的返回值。
"id":1,"name":"admin","username":"admin","roles":["USER","ADMIN"] 我看到这个对象但是不明白下一步“您可以在 /user 端点中添加 ResponseEntity 作为后端的返回值。”以上是关于Spring Boot JWT 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot 2 上实现基于过滤器的 JWT 身份验证与 OAuth2 JWT 身份验证
在 Spring Boot API 上实现 JWT 身份验证
在 Spring Boot 中使用 JWT 进行简单的身份验证