十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
简单介绍
对于Shiro来说不仅可以使用到JavaSE的开发中,还可以使用到JavaEE的开发中,Shiro可以完成的工作有。认证、授权、加密、会话管理、与Web的集成、缓存等等操作,在SpringBoot使用前端框架的时候就整合了Shiro并且与Thymeleaf整合的也是非常好。
下面就是关于Shiro简单的功能架构图
创新互联公司客户idc服务中心,提供德阳服务器托管、成都服务器、成都主机托管、成都双线服务器等业务的一站式服务。通过各地的服务中心,我们向成都用户提供优质廉价的产品以及开放、透明、稳定、高性价比的服务,资深网络工程师在机房提供7*24小时标准级技术保障。
Authentication 身份认证/登录,验证用户是不是拥有相应的身份。
Authorization 授权,权限验证,验证某个已经认证的用户是否有某个权限,也就是判断用户是否能做什么样的事情。例如验证用户是否是某个角色
Session Manager 会话管理,也就是用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中,会话可以是普通的JavaSE会话,也可以是Web会话。
Cryptography 加密,保护数据的安全性,例如密码加密存储到数据库,而不是通过明文存储
Web Support Web支持,可以很容易的集成到Web环境中。
Caching 缓存,例如用户登录之后,其用户信息、用户角色权限等都不需要每次都进行查询。这样可以提高效率
Concurrency Shiro 支持多线程应用并发验证,即在一个线程中开启另一个线程能把权限自动传播过去;
Testing 提供测试支持
Run As 允许一个用户伪装成为另一个用户进行访问
Remember Me 记住我。下次登录的时候不用登录
注意
Shiro 不会维护用户、维护权限;这些都是需要通过用户设计来实现,然后通过对应的方式注入到Shiro中即可。
Shiro工作流
从上图可以看出来,与应用程序代码直接交互的是Subject对象,也就是说Shiro对外的API核心的内容就是Subject,下面就来介绍一下整个交互过程中的各个API含义
Subject:主体,代表当前用户,这里的用户并不是指具体的人,与当前应用交互的任何的东西都是Subject,例如客户端等等,也就是说这个是一个抽象的概念,所有的Subject都绑定到一个SecurityManager,与Subject的所有交互都要委托到SecurityManager;可以把Subject看做是一个代理,真正的执行者是SecurityManager。
SecurityManager:安全管理器;也就是是所有跟安全相关的操作都会与SecurityManager进行交互。并且他还管理所有的Subject,可以看出它才是真正的Shiro的核心,负责与后面要介绍的其他组件进行交互。也就是类似于SpringMVC中的DispacherSevlet前端控制器
Realm 域,Shiro从Realm获取安全数据例如用户、角色、权限等等,也就是说Security Manager要验证用户身份,那么他需要从Realm获取相应的用户进行比较确定用户身份是否合法。也需要从Realm中得到用户相应的角色权限验证用户是否能进行操作;可以把Realm看成是一个DataSource,也就是一个类似于安全数据源。
也就是说,Shiro不提供用户权限,但是通过Realm进行维护
Shiro内部架构
从图中可以看到所有的应用于Shiro交互都是通过Subject来实现的。
Subject:主体,任何应用交互的抽象用户
SecurityManager:类似于SpringMVC中的DispatchServlet,是Shiro中的核心内容,所有的操作都是通过SecurityManager进行的控制,管理这所有的Subject、并且负责认证授权会话管理等等。
Authenticator:认证器,负责主体的认证,这个是扩展点,如果开发者觉得Shiro默认的不好用,也可以自己实现自己的认证策略,也就是在什么样的情况下才算是用户认证通过。
Authrizer:授权器,或者是访问控制器,用来决定主体是否有权限进行相应的操作;也就是控制用户能访问应用中的哪些功能。
Realm:可以有一个也可以有多个,安全实体数据源,也就是通过这个获取到一个安全的实体。可以使用JDBC实现,可以是LDAP实现,或者是通过内存实现等等,是由开发者提供。但是需要注意的一点是Shiro并不知道用户权限是以哪种格式进行存储的。所以在开发中通常是使用自己的自定义的来进行控制。
SessionManager:在Servlet中,Session是一个重要的概念,而Shiro中对于Session的管理就是通过SessionManager进行管理,Shiro不仅仅可以用在Web环境中,也可以使用到非Web环境的JavaSE中,所以,Shiro抽象了一个Session来管理主体与应用之间的数据交互,这样的话,例如在一个Web环境中使用了是Web服务器但是在其他客户端中使用的就不是Web服务器,这就导致一个问题Session放到哪里,这里推荐使用的是Memcached也就是进行缓存操作。利用分布式操作将Session存到一个统一的地方,所有的服务器都从同一个地方获取Session的数据。
Session DAO:对于Dao,作为数据访问对象,用于会话的CRUD操作,例如将Session缓存到redis中或者是Memcached中,都是通过SessionDAO来实现高可用的操作。
CacheManager:缓存控制器,来管理用户、角色、权限等缓存操作,因为这些数据都是很少去改变的东西,所以放到缓存中用来提高性能。
Cryptography:密码模块,Shiro提高安全性能的密码的加解密操作。
总结
作为Shiro一个常用的安全框架,shiro 应用实例 www.1b23.com,虽然功能呢没有SpringSecurity那么强大,但是小巧,灵活性较高,在使用的过程中可以实现一些自定义的特殊功能。上面简单的学习了在Shiro经常使用到的组件。后面的分享学习中还会有更多的精彩。