大家好,我是IT修真院武汉分院第15期学员,一枚正直善良的JAVA程序员。
今天给大家分享一下,java复盘中需要使用的shiro框架简单介绍
1.背景介绍
Apache Shiro是Java的一个安全框架。可以用在 JavaSE 和 JavaEE 环境,去帮助 完成:认证、授权、加密、会话管理、与Web集成、缓存等。
2.知识剖析
Authentication:身份认证/登录,验证用户是不是拥有相应的身份
Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。
Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中
Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
Web Support:Web支持,可以非常容易的集成到Web环境
Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率
Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去
Testing:提供测试支持
Run As:允许一个用户假装为另一个用户的身份进行访问
Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。
其中每个 api 的含义:
Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager执行
SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;它是Shiro的核心,它负责与后边介绍的其他组件进行交互,类似于 DispatcherServlet
Realm:域,Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份(权限),那么它需要从Realm获取相应的用户进行去确定用户身份是否合法(是否有权限);可以把Realm看成DataSource,即安全数据源。
3.常见问题
问题一:SHIRO认证内部的处理顺序
问题二:SHIRO在什么时候进行了权限授权
问题三:该如何扩展SHIRO的各种功能实现自己的业务逻辑
4.解决方案
回答一:
1、应用程序构建了一个终端用户认证信息的AuthenticationToken 实例后,调用Subject.login方法。
2、在认证开始时,会委托应用程序设置的securityManager实例调用securityManager.login(token)方法。
3、SecurityManager接受到token信息后会委托内置的Authenticator的实例,对设置的Realm实例进行适配
4、在Realm被调用后,AuthenticationStrategy将对每一个Realm的结果作出响应。
5、判断每一个Realm是否支持提交的token,如果支持,Realm将调用getAuthenticationInfo(token); 该方法就是实际认证处理,我们通过覆盖Realm的doGetAuthenticationInfo方法来编写我们自定义的认证处理。
回答二:访问权限页面而不是登录的时候
回答三:只需要继承各种默认类然后@override即可<p/>
5.编码实战
详见腾讯视频
6.扩展思考
Spring Security和Shiro的比较
1.首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。
2.Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:
1.易于理解的 Java Security API。
2.对角色的简单的签权(访问控制),支持细粒度的签权,
3.内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境。
4.不跟任何的框架或者容器捆绑,可以独立运行。
7.参考文献
参考一:http://jinnianshilongnian.iteye.com/blog/2018398
参考二:https://blog.youkuaiyun.com/it_java_shuai/article/details/78054951
8.更多讨论
今天的分享就到这里啦,欢迎大家提问和探讨!