Bootshiro学习

作者: eoser | 来源:发表于2018-06-04 18:44 被阅读46次
    技术组成

    SpringBoot+Shiro+Redis

    资源链接

    Bootshiro项目码云Fork地址https://gitee.com/eoser/bootshiro
    UI测试地址(通过浏览器开发模式参考请求参数)http://tom.usthe.com/
    Windows版本Redis:https://github.com/MicrosoftArchive/redis/releases

    项目导入与配置
    1.导入项目

    Idea->File->New->Project from Version Control->Git->码云克隆地址
    导入时间长,等待。。。。。

    2.相关配置

    数据库导入:通过工具将文件usthe.sql导入数据库
    项目配置:application.yml文件修改好对应的Redis,MySql的密码,账户,链接地址等
    测试:访问http://localhost:8080,查看是否有响应,正常应该显示的是一个错误提示的界面

    注册登录的操作
    1.注册操作

    a.首先要获取令牌(GET请求):http://localhost:8080/account/login?tokenKey=get
    返回数据如下:

    {
        "data": {
            "tokenKey": "l6h18oi28prw6t7d",
            "userKey": "CKSFSA"
        },
        "meta": {
            "msg": "issued tokenKey success",
            "code": 1000,
            "success": true,
            "timestamp": 1528105515933
        }
    }
    

    重要的数据:tokenKey,userKey
    坑:存在Redis中的令牌保存时长设置为了5秒,这里为了方便测试,把时间改长(包名:com.usthe.bootshiro.shiro.filter;类:PasswordFilter.java;方法:onAccessDenied;Redis写的操作中把5改成你想要的时间)
    b.注册用户(POST请求):http://localhost:8080/account/register
    要传输的数据有:

    {
        "uid": "要注册的账户", 
        "username": "要注册的用户名", 
        "userKey": "令牌中的userKey", 
        "password": "AES加密后的密码", 
        "methodName": "register"
    }
    

    AES加密后的密码:明文密码+令牌中的tokenKey
    坑:加密后的密码用项目中的测试方法生成,不要在网上在线生成(com.usthe.bootshiro.util包中的AESUtil.java的main方法,修改aesEncode和aesDecode后一个参数为令牌中的tokenKey)

    2.登录操作

    a.首先要获取令牌(同注册)
    b.用户登录(POST请求):http://localhost:8080/account/login

    {
        "appId": "要登录的账户", 
        "password": "AES加密后的密码", 
        "methodName": "login", 
        "userKey": "令牌中的userKey", 
        "timestamp": "Mon, 04 Jun 2018 08:54:37 GMT"
    }
    

    c.返回参数

    {
        "meta": {
            "msg": "issue jwt success",
            "code": 1003,
            "success": true,
            "timestamp": "2018-06-04T09:46:05.498+0000"
        },
        "data": {
            "jwt": "eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eNosi1EKwyAQBe-y31nQ4EbJZcrGrGDaJq2a0lJy92jp1xuGeV9YSoQRxHoxQVm0TIwmhICu1wY9s_jZqWlgCx3kfarx87NUjjlXLttVVsySXpKa5AKjpt5pRTRQB_J-_IU2P5G2m7Rj2wvP97jCcQIAAP__.rL4Nek_ts2rwH_dzoxVHYbk2ej6bnz1Oa-7hB-Zl9-8F4mjiHE1kCOX-W_nsIxl_bm6zjhqv_ejfClVu4AKhXQ",
            "user": {
                "uid": "qyj",
                "username": "qyj",
                "password": null,
                "salt": null,
                "realName": null,
                "avatar": null,
                "phone": null,
                "email": null,
                "sex": null,
                "status": 1,
                "createTime": "2018-06-04T08:51:32.000+0000",
                "updateTime": "2018-06-04T08:51:33.000+0000",
                "createWhere": null
            }
        }
    }
    

    重要参数:jwt(用于后面的各种操作,权限管理)

    带权限的操作

    1.权限判断依据
    请求Header中要加如下两个参数:
    appId ------登录的用户名
    authorization------登录后返回数据中的jwt
    2.根据Controller的地址发对应的请求
    如给用户添加角色:http://localhost:8080/user/authority/role
    请求地址内容

    {
        "uid":"用户uid",
        "roleId":角色码
    }
    

    刚开始的角色没有这些权限,可以通过该数据库,然后重启服务,重新登录再测试

    相关文章

      网友评论

        本文标题:Bootshiro学习

        本文链接:https://www.haomeiwen.com/subject/umvysftx.html