Java 弹簧靴JWT认证

Java 弹簧靴JWT认证,java,angularjs,spring,authentication,spring-boot,Java,Angularjs,Spring,Authentication,Spring Boot,我尝试使用spring boot开发web应用程序,对于身份验证,我使用以下教程: 它的工作很好,但刷新页面后连接丢失(注销),需要重新登录。 我知道我需要会话/cookies,但我不知道如何做到这一点 你能帮我吗? 以下是源代码: thnx您不需要会话/cookies,因为您使用的是包含用户信息的JWT令牌。 在源代码中,我看不到任何在浏览器中存储jwt令牌的代码。我也看不到任何刷新jwt。所以我想,您必须实现这一点(或者至少是令牌存储)。 我是这样看的: 将JWT令牌存储在浏览器内存中。在里

我尝试使用spring boot开发web应用程序,对于身份验证,我使用以下教程:

它的工作很好,但刷新页面后连接丢失(注销),需要重新登录。 我知道我需要会话/cookies,但我不知道如何做到这一点

你能帮我吗? 以下是源代码:


thnx

您不需要会话/cookies,因为您使用的是包含用户信息的JWT令牌。
在源代码中,我看不到任何在浏览器中存储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。所以我想,您必须实现这一点(或者至少是令牌存储)。
    我是这样看的:

  • 将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中的后端。“