Spring Boot用户角色和权限管理

标签: Springboot 分类: Java 创建时间:2020-05-19 09:07:02 更新时间:2024-11-12 12:53:37

对于理论上来说,用户角色和权限,三张表就可以搞定了全部的权限问题。权限主要分为:页面权限、数据权限和操作权限。基于角色的权限控制(RBAC)

参考文章:
1.RBAC模型:基于用户-角色-权限控制的一些思考
2.总结:SAAS后台权限设计案例分析 (这篇文章对角色和权限的说明比较的丰富)
3.springBoot+springSecurity 数据库动态管理用户、角色、权限(二 (这个可以作为实际代码的参考)
4.最好的权限设计,是先区分功能权限和数据权限
5.Java快速开发平台 (这个其实是一个脚手架,装配了各种数据库权限啊,内容管理啊,有点像cms的意思)

1.数据库设计

参考文章:
1.spring整合shiro权限管理与数据库设计 (这个写的挺全的,还有示例代码,不过是用spring写的,不是用springboot)
2.胡汉三已存在 / task
3.后台权限管理控制shiro-权限表设计 (具体化到了菜单级别,我觉得挺实用的,这里只是进行了数据库的设计)
4.用户权限管理数据库设计(RBAC)
5.用户·角色·权限·表 (这个设计书中加入了组的概念,即有了数据权限的概念,同时附带了一个权限设计说明书,还是蛮厉害的)

2.示例代码

在我以前的写的一篇文章中,有一些步骤可以借鉴Post not found: Spring Boot集成shiro步骤 Spring Boot集成shiro步骤

3.shiro相关内容

代码的编写都是跟着需求走的,比如我需要系统同时支持用户名密码登录,也支持第三方扫码登录,比如钉钉扫码登录。该如何编写自己的权限控制呢?

(1) AuthenticationToken
Shiro 仅提供了一个可以直接使用的 UsernamePasswordToken,用于实现基于用户名/密码主体(Subject)身份认证。UsernamePasswordToken实现了 RememberMeAuthenticationToken 和 HostAuthenticationToken,可以实现“记住我”及“主机验证”的支持。

(2) 扫码登录
其实我在想,比如使用扫码登录,然后重写shiro的方法,这种思路是不是正确的呢?经过查询资料,确实有通过继承并重写UsernamePasswordToken和HashedCredentialsMatcher类方法的方式,实现了扫码登录。

参考文章:
1.Shiro 中的 AuthenticationToken (讲了AuthenticationToken的作用以及常用的UsernamePasswordToken)
2.PC端网站-微信扫码登录+shiro权限框架免密登录 (这里继承了HashedCredentialsMatcher和UsernamePasswordToken)
3.shiro + springBoot扫码登陆 (这里也讲到了继承UsernamePasswordToken)
4.钉钉扫码登录网站(两种方式实现)
5.Shiro学习笔记(二)UsernamePasswordToken源码简单解析
6.深入浅出学Shiro(一)–登录认证

(3) Oauth2

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。