在做毕设系统的时候想要让我们的系统更加安全,并且看起来更加高大上,使用算法MD5,特学了shiro相关知识,首先什么是Shiro?
官方说法:Apache shiro是一个强大易用的开源安全框架,用于简化应用程序安全和加强其验证处理,以及控制访问控制行为,Apache shiro可以让帮助外面编写易于维护的安全和认证的实现,常用于web以及JavaEE的环境,其实说白了shiro就是一个通过过滤确定具体请求的URL是否允许访问,以及处理认证和授权的方法。
进一步了解shiro,我们可以先明确其基本功能
Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即 判断用 户是否能进行什么操作
Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中
Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
Web Support:Web 支持,可以非常容易的集成到 Web 环境
Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,可以提高效率
Concurrency:Shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
Testing:提供测试支持;
Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了
原理: 从外部架构来看
subject代表当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如机器人,网络爬虫等,与subject的所有交互都会委托给securityManager(安全管理器),subject相当于一个门面,securitymanager才是实际上的执行者,其管理所有的subject,是shiro的核心,他负责和shrio的其他组件进行交互交互,Realm(实际处理认证和授权工作的实体),shiro从Realm获取安全数据如角色,用户,权限,也就是说SecurityManager要验证用户身份,那么他需要从Realm获取相应的用户进行比较来确定用户的身份是否合法,也就是说需要从Realm中得到相应的用户信息进行验证用户能否进行操作
原理: 从内部架构来看
- securityManager:是shiro的心脏,所有的具体交互都通过securitymanager进行控制,他管理着所有的subject且复杂进行认证、授权、会话及缓存的管理
- Realm:可以有1个或者多个Realm,可以任务是安全实体数据源,即用于获取安全实体的,可以是JDBC实现,也可以是内存实现等,由用户提供,所以一般应用中都需要实现自己的realm
- Cryptography:密码模块,Shiro 提高了一些常见的加密组件用于如密码加密/解密。
- 登录认证基本流程
- 收集用户身份/凭证,即用户名/密码调用 Subject.login 进行登录,如果失败将得到相应 的 AuthenticationException异常,根据异常提示用户错误信息;否则登录成功
- 创建自定义的 Realm 类,继承 org.apache.shiro.realm.AuthenticatingRealm类,实现 doGetAuthenticationInfo() 方法
具体使用Shiro如何整合到我们SpringBoot项目中
- 与SpringBoot整合
- 1.首先IDEA中正常创建springboot项目
- 2.添加相关依赖