【问题标题】:Spring boot JWT authSpring Boot JWT 身份验证
【发布时间】: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

谢谢

【问题讨论】:

    标签: java angularjs spring authentication spring-boot


    【解决方案1】:

    您不需要会话/cookie,因为您使用 JWT 令牌,其中包含有关用户的信息。
    在源代码中,我看不到任何将 jwt 令牌存储在浏览器中的代码。我也看不到任何刷新 jwt。所以我想,你必须实现那个(或者至少是令牌存储)。
    我是这样看的:

    1. 将 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)
    2. 在您的前端应用中刷新后对用户进行身份验证。
      为此,您必须在加载应用程序时从本地存储中获取令牌,将其设置为所有 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 作为后端的返回值。”
    猜你喜欢
    • 2022-10-05
    • 2021-07-20
    • 2022-08-16
    • 2018-08-29
    • 2018-10-27
    • 2022-01-15
    • 2021-08-22
    • 2017-11-02
    • 2018-11-29
    相关资源
    最近更新 更多