前段时间做了Spring Security的相关项目后,对安全框架产生了些许兴趣,所以有了这篇手记,Shiro——一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

以上是官方的说法,对于快速入门而言我们不用一开始了解太多信息,我们只需要做一个测试类,然后引入Shiro,基本配置后能运行成功,那我们就已经入手这个安全框架了(初步)。

先看看基本的测试类搭建流程图

首先我们先自定义一个Shiro自带的Realm(用户安全数据、权限等配置载体),也就是说我们要提前在Realm中硬配置对应的用户的登录名、密码、权限范围等,接着配置SecurityManager环境,它是Shiro的核心管理层,将提前配置好的Realm设置进去,接着我们使用Shiro提供的工具类SecurityUtil,他需要设置上一步的SecurityManager环境,之后就可以直接调用生成一个Subject对象,也就是Shiro生成的用户对象,这个和web登录传过来的对象可以说是一个验证的关系,通过subject来验证登录对象的信息或权限是否符合,而UsernamePasswordToken就是web登录信息的载体,我们将登录信息放入token中,subject就可以做对应的登录验证、权限验证了。而成功失败也就会向页面返回登录成功失败或权限不足等信息啦。

那么我们接下来就来说说Shiro的Realm,Shiro提供了IniRealm、JdbcRealm两个Dao(我们就将它看成经常使用的Dao吧),IniRealm是通过读取ini后缀文件的形式去配置原本的用户安全、权限信息,而JdbcRealm则就是通过读取数据库的方式,当然我们也可以自定义自己的Realm,需要继承AuthorizingRealm,通过重写对应的方法来实现自主的业务需求,类似MD5加密、盐等安全加密功能。

对于WEB应用来说,我们入门了测试类后当然要做了实际的Web应用才能显示出对Shiro的深入了解,Shiro继承Spring并不难,而且通过测试类,我们也发现其实Shiro是脱离Spring的一个框架,它并不需要Spring的底层支持也可正常运行。

在SpringMVC使用Shiro,我们只需要配置一个全局的Filter即可,当然一开始的SecurityManager、Realm等也是要配置的,在xml中以Bean的形式注入,功能强大的Shiro还有Session会话管理的功能,我们可以通过SessionManager来自定义对Session的管理,有效时间,这里就可以通过Redis来进行缓存,不过默认的SessionManager有点不足,我们可以自定义一个来减少默认的性能损耗(缓存查询次数等),还有Cache管理,一样通过CacheManager来进行配置,自定义Redis缓存的CacheManager可以使我们的应用在安全验证时性能更高(也可以考虑加本地缓存等二级缓存)。

还有更多的Shiro功能这里就不一一讲解了,比如自动登录等等。

大家有兴趣或者没什么时间学习的话,可以直接下载我的教学Demo去运行,快速入门这个安全框架。GitHub地址:https://github.com/UncleCatMySelf/ShiroTeachDemo