最新版本的解决方案点击这里
问题:
https://webasedoreadthedocs.io/zh_CN/latest/docs/WeBASE-Node-Manager/interfachtml#id225
当调用下面的接口报错。以下是官方的文档。
新增私钥用户
1传输协议规范
网络传输协议:使用HTTP协议请求地址:/user/userInfo请求方式:POST请求头:Content-type:application/json返回格式:JSON
请求参数
入参表
序号 | 输入参数 | 类型 | 可为空 | 备注 |
1 | userName | string | 否 | 用户名称 |
2 | description | string | 是 | 备注 |
3 | groupId | Int | 否 | 所属群组 |
入参示例
{'groupId':'300001','description':'密钥拥有者','userName':'user1'}
返回参数
出参表
序号 | 输出参数 | 类型 | 备注 | |
1 | code | Int | 否 | 返回码,0:成功 其它:失败 |
2 | message | String | 否 | 描述 |
3 | data | object | 是 | 返回信息实体(成功时不为空) |
3.1 | userId | int | 否 | 用户编号 |
3.2 | userName | string | 否 | 用户名称 |
3.3 | groupId | int | 否 | 所属群组编号 |
3.4 | description | String | 是 | 备注 |
3.5 | userStatus | int | 否 | 状态(1-正常 2-停用) 默认1 |
3.6 | publicKey | String | 否 | 公钥信息 |
3.7 | address | String | 是 | 在链上位置的hash |
3.8 | hasPk | Int | 否 | 是否拥有私钥信息(1-拥有,2-不拥有) |
3.9 | createTime | LocalDateTime | 否 | 创建时间 |
3.10 | modifyTime | LocalDateTime | 否 | 修改时间 |
出参示例
成功:
{'code':0,'message':'success','data':{'userId':700007,'userName':'asdfvw','groupId':300001,'publicKey':'0x4189fdacff55fb99172e015e1adc360777bee6682fcc975238aabf144fbf610a3057fd4b5','userStatus':1,'userType':1,'address':'0x40ec3c20b5178401ae14ad8ce9c9f94fa5ebb86a','hasPk':1,'description':'sda','createTime':'2019-03-1518:00:27','modifyTime':'2019-03-1518:00:27'}}
失败:
{'code':102000,'message':'systemexception','data':{}}
我们正常调用发现报错:
{
'code':202014,
}
解决方案:
抓取webase登录的包如下:
POSThttp://191611129:5000/mgr/WeBASE-Node-Manager/account/login?checkCode=ypqwHTTP/1
User-Agent:Mozilla/0(WindowsNT10.0;WOW6AppleWebKit/5336(KHTML,likeGecko)Chrome/70.390108Safari/5336
account=admin&accountPwd=5fef526bd3b7b26001f826f469250cb954299a0169a46d11ac37a263a9ab6ab5
Set-Cookie:JSESSIONID=2C7B692F335CE6BCBA8281A6F3F0AFAD;Path=/WeBASE-Node-Manager;HttpOnly
{'code':0,'message':'success','data':{'accountStatus':2,'roleName':'admin','account':'admin','token':'fb50e4bbaa0e370692e35ea8b3d9f2da92aa03b9335b6a26be2297de12ee7619'}}
这里我发现有2种方式可以去调用需要登录之后的接口比如上述的接口
JSESSIONID=2C7B692F335CE6BCBA8281A6F3F0AFAD把登录的这个cookie带入接口请求
头信息中带AuthorizationTokenTokenfb50e4bbaa0e370692e35ea8b3d9f2da92aa03b9335b6a26be2297de12ee7619
如下所示:
成功解决问题!
关于应用中的调用问题:
调用这个接口需要头信息中带token,这个token的获取需要登录,而登录需要有验证码。我在应用中怎么去不需要人为的操作就能获取这个token?我想到几个方法?
模拟登录破解形验证码
修改源码新增一个不需要验证码的登录接口
登录后定时去访问一个WeBASE-Node-Manager下的接口,让token不失效
官方回复:
有关闭登录验证的配置,可以看下yml,把security配置改成false
具体详细的操作如下:
但是会存在问题,
security为false后webase登录页就登录不进去了!
官方解释:
设为false之后,可以直接调用Get接口,但是post接口会因为springboot的PreAuthorized特性导致不可用
模拟登录破解形验证码
修改源码新增一个不需要验证码的登录接口
登录后定时去访问一个WeBASE-Node-Manager下的接口,让token不失效
文章为作者独立观点,不代表股票交易接口观点