@zhongzilu
其实你可以试试的:
查询用户开放信息User:(请求成功)
http://apijson.cn:8080/get/{"User":{"id":38710}}
查询用户隐私信息Privacy:(请求失败,无GET权限)
http://apijson.cn:8080/get/{"Privacy":{"id":38710}}
看下源码:
@MethodAccess(
GET = {},
GETS = {CIRCLE, OWNER, ADMIN}
)
public class Privacy {}
很明显,get是不允许的,可以用gets,但也必须是CIRCLE, OWNER, ADMIN这3种角色中的一个。
URL: http://apijson.cn:8080/gets/
POST表单:
{
"Privacy": {
"id": 38710
},
"tag": "Privacy" //不传tag会报错
}
仍然失败,因为没登录,未登录是UNKNOWN用户,这里自动补全为OWNER。
{
"Privacy": {
"id": 38710,
"@role": "owner" //如果没传role,服务器会填充默认的,具体看数据库 Request 表
},
"code": 407,
"msg": "未登录,请登录后再操作!"
}
那我们能不能伪造一下角色骗过APIJSON呢?试试看:
{
"Privacy": {
"id": 38710,
"@role": "circle"
},
"tag": "Privacy"
}
还是一样的报错:未登录。
好吧,我登录后再试,新的报错:
{
"Privacy": {
"id": 38710,
"@role": "circle"
},
"code": 401,
"msg": "id = 38710 的 Privacy 不允许 CIRCLE 用户的 GETS 请求!"
}
为什么呢?因为我登录的用户id是82001,id=38710的User不在它的圈子内。
那换种角色呢?
{
"Privacy": {
"id": 38710,
"@role": "owner"
},
"tag": "Privacy"
}
哈!终于攻破了:
{
"Privacy": {
"id": 82001,
"certified": 1,
"phone": 13000082001,
"balance": 8067
},
"code": 200,
"msg": "success"
}
好像不太对,这id怎么是82001,这不是我刚登录的账号吗?
是的,因为APIJSON解析"@ role": "owner"时已经强制放入了 "id": 82001 ,导致原来的id被替换。
最后再试试 "@ role": "admin" ,仍然报错:
{
"Privacy": {
"id": 38710,
"@role": "admin"
},
"code": 406,
"msg": "角色设置错误!不允许在写操作Request中传 Privacy:{ @role:admin } !"
}
管理员角色是只能在服务器内部设置的,不允许传哦。
APIJSON在线测试:
http://apijson.org
点Star支持下吧^_^
https://github.com/TommyLemon/APIJSON