头晕. 暂时放弃了.
选用 将 token(存 redis) 或者 JWT token , 在 tokenFilter(继承 GlobalFilter)中放入 header 之中(jwt 参照
https://blog.csdn.net/CrazyLai1996/article/details/86430457)
然后取本人的数据信息,则使用 @
RequestHeader("X-USER-ID") String userId 这种形式去取数据,
那么如果权限高一点的(例如管理员), 那么 RPC 调用其他用户的邮件列表, 可以使用如下方法
用户访问自己的:
@
PostMapping("/mail/list")
public Result x(@RequestHeader(value = "auth-userId",required = false)Long authUserId){
return mailService.list(authUserId);
}
用户访问别人的
@
PostMapping("/mail/list/{userId}")
public Result maillist(@PathVariable("userId") Long userId){
return mailService.list(userId);
}
RPC 方法
@
PostMapping("/user/test/mail/list/{userId}")
public Result mm(@PathVariable("userId")Long userId);
这个 RPC 方法能不能调用, 还是需要 更上面一层的 token 来区分的, 例如传的 userId 能不能不是他本人的, 需要配合 role /permission, 来决定.
即: 这种可能是, /admin/user/list , 然后可以传入 userId 参数, 加上自己的 header 中的 token,来决定 给 rpc 方法中传递的 userId 到底是直接的,还是别人的.
在这个问题中,我最大的困扰是, 怎么将 token 背后的用户信息良好的传递到各个服务中去,
我觉得比较麻烦,但是可行的是, 每个方法里都加个 token 或者 httpservletrequest, 每次需要的时候 都去根据 header/ token (再根据 redis 其他的转换成信息), 但是想想每个 controller service rpc 方法都要带上 token 或者其他的 那也太恐怖了, 不过还有一点.. 如果一个 controller 方法 含有 Httpservletrequest, 那么它的 rpc 方法大概也得带着这么个参数, 那会一直循环循环吗?
还有就是, 各个服务全关了外网端口, 所有请求都要经过除了网关外的 另一个特定服务, 例如 admin,在这个地方进行鉴权, 查看有没有对应的权限 /数据权限,
还是经验不足啊...