概念
用户—角色—权限,限制不同级别的用户登录可以有不同的权限,成熟的用户安全框架
基于SpringBoot讲解
表数据
用户表:MD5二次加密后的用户信息存储
角色表:存储相关角色以及详情信息
用户角色对应表
权限表:维护权限详情信息,本项目url指向访问路径
角色权限对应表
导入相关jar
<!-- shiro -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- shiro-web -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.3.2</version>
</dependency>
配置写入
securityManager
概念
- 这是 Shiro 架构的核心,是 Shiro 内部所有原件的保护伞。
- 开发人员将大部分精力放在了 Subject 认证主体上,与 Subject 交互背后的安全操作,则由 SecurityManager 来完成
讲解
引入realm
关于realm :它是连接 Shiro 和 具体应用的桥梁,登录的数据存储以及校验,在realm中过度。
realm里面包含了凭证匹配器(把凭证校验交给了shiro)
doGetAuthenticationInfo() 方法:用来验证当前登录的用户,获取认证信息
doGetAuthorizationInfo() 方法:为当前登录成功的用户授予权限和分配角色
此案例是 MD5,散列2次加密
shirFilter
概念
- 注入上述:SecurityManager
- 处理拦截资源文件问题
讲解
注入SecurityManager
配置以下的拦截
1、默认登录的 URL:身份认证失败会访问该 URL。
2、认证成功之后要跳转的 URL。
3、权限认证失败后要跳转的 URL。
4、需要拦截或者放行的 URL:这些都放在一个 Map 中。
上述案例中,只用到了anon、logout权限配置。还有一个是url自定义配置,本案例利用查询permission表中的配置,来进行拦截
这里不做赘述,其实就是判断是否有此权限来进行访问限制
登录测试
在进行登录的时候,会有realm的doGetAuthenticationInfo方法进行登录校验(这里可以在realm中打断点,看是怎样的流程)