「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战」
什么是Shiro
Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。
Shiro基本结构
其三个核心组件:Subject
, SecurityManager
和 Realms
Subject
:即“当前操作用户”
SecurityManager
:它是Shiro框架的核心,负责管理所有用户的安全操作。典型的Facade
模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。Realm
: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
快速在SpringBoot上应用Shiro
- 导入shiro与spring的整和依赖
1 | xml复制代码 |
2、配置用户的realm
当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。
继承了AuthorizingRealm
接口的实现类可以被称为realm。继承后要实现两个方法:doGetAuthorizationInfo(PrincipalCollection principalCollection)
和doGetAuthenticationInfo(AuthenticationToken authenticationToken)
一个是用来完成授权操作,一个是用来完成认证操作。
1 | java复制代码public class UserRealm extends AuthorizingRealm { |
3、 配置自己的配置类
- 创建用户个性化的realme
- 创建DefaultWebSercurityManger默认网络安全管理器
- 创建ShirofilterFactoryBean
1 | java复制代码@Configuration |
创建的realm必须添加@Bean注解,交给spring托管,后面需要注入给DefaultWebSercurityManger
创建ShiroFilterFactoryBean 时你可以设置过滤请求以及相应的访问权限。通过LinkedHashMap<>()放入ShiroFilterFactoryBean 中。
完成以上操作之后,就可以达到访问指定界面先要登陆获得相应的权限。
Shiro与Thymleaf
shiro与Thymleaf也有着良好的整和。用户结合两者可以达到:不同权限用户在同一界面看到不同的内容。比如
vip1看到:
vip2用户可以看到:
vip3用户看到:
导入相关依赖即可使用:
1 | xml复制代码<!--导入Thymeleaf依赖--> |
只需在前端页面加上标签即可:shiro:hasPermission=""
例如:
1 | html复制代码 <div class="column" shiro:hasPermission="vip1"> |
设置登录用户才能看得到的内容:在对应的标签上加上shiro:Authenticated
设置没登入用户看的到的内容:在对应的标签上加上shiro:NotAuthenticated
本文转载自: 掘金