最近在做用户角色权限管理方面的需求,但项目中没有使用shrio springSecurity这些权限管理框架,公司大佬给了我一个自定义的注解,在接口前加上它就可以根据用户的角色是否有这个方法的访问权限来判断是否执行这个方法。主要处理逻辑是:
1.先定义三张表:分别是用户表,角色表和菜单表。用户表存储用户信息,角色表存储角色信息,菜单表存储菜单信息,关系是,用户关联角色,每个角色关联菜单。
2.定义一个注解:加在接口前,用来验证调用者有没有权限访问该接口
3.定义拦截器:在调用方法时拦截住它,然后拿取注解里面的权限字符串,再根据用户的角色信息拿到对应的菜单权限,二者对比一下,如果包含就证明该用户有权限访问该接口。
同时前端需要根据用户的权限来对crud按钮进行隐藏和显示,这里我实现了一个接口:在用户登录后返回该用户所有角色所对应的菜单 的权限字符串,前端拿到这个字符串进行处理:字符串类似这种[acount:user:query]
上面是拦截器在角色授权方面的应用,项目中还用拦截器判断用户是否已经登录,或者登录过期了。
具体实现是:
在用户调部分接口时拦截一下,然后获取请求头中的token,解密后拿到token中的时间,与当前的时间进行比较,如果时间相差大于30分钟(举例),就判定token过期,然后抛出重新登录的提示
比较好的文章:
Spring拦截器https://www.cnblogs.com/lyq-biu/p/11017106.html
补充一下:
其实 shrio的权限注解底层也是基于拦截器,原理差不多,可以参考这篇:Shiro @RequiresPermissions是如何运转的?https://blog.csdn.net/medelia/article/details/86692521



