• 【若依vue框架学习】2.JWT的token/权限认证


    前文提到了:提交loginForm(账号、密码、uuid、验证码)后,后端经过了验证,生成了token传送给前端。

    那么后端怎么判断用户名密码是否正确?怎么判断角色的限权?JWT所生成的token是如何工作的?

    本篇文章给出了不完全的解答。

    返回的token在哪个过程中第一次看到?

    login请求体:

    login响应体:

     

    返回的token由什么组成

    返回的token:第一部分.第二部分.第三部分

    第一部分,通过base64解码后发现:

    {"alg":"HS512"}

    第二部分,通过base64解码后发现:

    {"login_user_key":"3ce288d6-4c10-4ed6-9399-34123860d084"}

    第三部分,通过base64解码后发现:

    乱码,是个签名

    token在哪里存储

    前端在发请求的过程中,用到了这个token:

    如果使用postman发送GET请求到http://localhost:8080/system/menu/list

    若不带有token,则系统不知道你有什么限权

    若带有token,则系统会在Redis中查询你的限权

     

    1. {
    2. "msg": "操作成功",
    3. "code": 200,
    4. "data": [
    5. ....
    6. ]
    7. }

     后端在Redis中 也存储了这个token所对应的权限信息:

     

    1. {
    2. "@type": "com.ruoyi.common.core.domain.model.LoginUser",
    3. "browser": "Firefox 10",
    4. "deptId": 103,
    5. "expireTime": 1656074264849,
    6. "ipaddr": "127.0.0.1",
    7. "loginLocation": "内网IP",
    8. "loginTime": 1656072464849,
    9. "os": "Windows 10",
    10. "permissions": Set[
    11. "*:*:*"
    12. ],
    13. "token": "3ce288d6-4c10-4ed6-9399-34123860d084",
    14. "user": {
    15. "admin": true,
    16. "avatar": "",
    17. "createBy": "admin",
    18. "createTime": 1656049805000,
    19. "delFlag": "0",
    20. "dept": {
    21. "ancestors": "0,100,101",
    22. "children": [
    23. ],
    24. "deptId": 103,
    25. "deptName": "研发部门",
    26. "leader": "若依",
    27. "orderNum": 1,
    28. "params": {
    29. "@type": "java.util.HashMap"
    30. },
    31. "parentId": 101,
    32. "status": "0"
    33. },
    34. "deptId": 103,
    35. "email": "ry@163.com",
    36. "loginDate": 1656061502000,
    37. "loginIp": "127.0.0.1",
    38. "nickName": "若依",
    39. "params": {
    40. "@type": "java.util.HashMap"
    41. },
    42. "password": "$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2",
    43. "phonenumber": "15888888888",
    44. "remark": "管理员",
    45. "roles": [
    46. {
    47. "admin": true,
    48. "dataScope": "1",
    49. "deptCheckStrictly": false,
    50. "flag": false,
    51. "menuCheckStrictly": false,
    52. "params": {
    53. "@type": "java.util.HashMap"
    54. },
    55. "roleId": 1,
    56. "roleKey": "admin",
    57. "roleName": "超级管理员",
    58. "roleSort": "1",
    59. "status": "0"
    60. }
    61. ],
    62. "sex": "1",
    63. "status": "0",
    64. "userId": 1,
    65. "userName": "admin"
    66. },
    67. "userId": 1,
    68. "username": "admin"
    69. }
  • 相关阅读:
    Mysql高级篇学习总结9:创建索引、删除索引、降序索引、隐藏索引
    集合的基本运算
    【leetcode】【剑指offer Ⅱ】045. 二叉树最底层最左边的值
    群晖NAS搭建外网可访问的电子图书馆Calibre-Web
    【面试高高手】—— Redis
    Ffmpeg安装和简单使用
    c++ 学习 之 this 指针的学习
    「C系列」C 数据类型
    Callback详解
    博客园美化教程
  • 原文地址:https://blog.csdn.net/bijingrui/article/details/125449367