单一入口的API接口使用shiro如果进行权限鉴权
问题描述
在进行数据通讯当中,全部数据都是走 http://host/api/ 这个URL地址,用业务请求码来控制请求返回的结果,每个请求码可能会有多种情况发生,不同的用户角色控制其使用接口的权限,包含一个接口中不同的情况也要控制,在使用Shiro中就方了,大佬们有好的解决方案吗
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果不同业务已经设计成通过请求参数来控制的话,建议使用shiro的自定义权限控制,解析对应的业务代码,进行权限控制。这种方法比较灵活,即可写死权限规则,也可以配合数据库等做成动态规则控制。
拦截所有请求, 对应shiro配置: /**=perms;
继承org.apache.shiro.authz.Permission,重写implies方法,进行权限校验。
自定义过滤器,重写
自定义realm,重写
我需要根据链接参数不同进行授权,就是通过这种方法的。
下面是授权代码
过滤器中重写isAccessAllowed
需求:对属于不同用户组的用户授权访问不同类型的文章
实现思路:
doGetAuthorizationInfo中根据token获取到用户信息,从数据库中联合查询到可以访问的文章类型id,添加到用户权限中,isAccessAllowed中获取用户访问链接中的参数,调用
判断是否拥有该权限。
注意点:subject.isPermitted(id)调用前一定要先调用subject.login(token);方法,不然在isPermitted时不会进行授权
下面贴上全部代码
CustomRealm.java
JWTFilter.java
JWTToken.java
ShiroConfigurer.java
pom.xml