你好,这次我想接着上上次的Shiro的话题,聊聊Shiro怎么用。
上次我们说过Shiro有一个外部视角,也有一个内部视角。而外部视角就是通过应用(Application Code)接收验证信息,将验证信息封装成验证对象(Subject),并将该对象传给SSM(Shiro SecurityManager),最后再由Realm做最终的验证。SSM就相当于一个代理机构,而真正干活的是其下属的Realm。
内部视角更多地关注Shiro SecurityManager。也就是回答了“SSM内部是如何将对象信息传递给Realm,Realm是如何验证的”这两个问题。首先,SecurityManager会接收封装成token对象的待验证信息,接收到这个token对象之后,SecurityManager会将其发送给Authenticator,Authenticator才是真正的身份验证者,Shiro API中核心身份认证入口点。一些特殊的情况下,需要特殊的验证流程的,可以通过重写该对象来插入自己的实现。Authenticator拿到token之后会直接将其交给它手下的AuthenticationStrategy,此时为什么不直接验证呢,因为验证的方式可能有邮箱,手机,用户名多种,而这些验证方式的种类只有AuthenticationStrategy知道,所以交给它是最高效的一种方式。对了,每一种不同的验证方式其实就是一个Realm对象,当AuthenticationStrategy拿到token之后会将其分发给出Realm,再通过Realm返回的每个成功或失败的登录信息的比对,确定最终的验证结果。
上面的话有些官方了,举个例子说应该会更好理解。蒋介石某日想要重用阎宝航(中共红色间谍),于是他就打电话给军统(SecurityManager),验证他的身份。而军统正真做人事情报搜集的可能是一局(Authenticator),由于验证身份不仅仅是查姓名,年龄,籍贯这么简单,它需要查很多个方面(Realm),所以这事就被指派给了特务头子谭文强(AuthenticationStrategy)全权负责。最终谭文强手下负责各个方面调查的特务们没有一个查出阎宝航的问题,也就是说阎宝航的身份验证通过了,于是谭文强就将阎宝航通过的信息,以及其身份信息逐级向上传递,最终,蒋介石就会得到一个阎宝航验证通过,及其身份信息的绝密文件。如果验证不通过的话,一般就是通过红色电话一层一层向上传递(对应着代码中的异常)。
最后我们来聊一聊Shiro 的 Hello World该怎么弄。
首先要导入shiro的jar包,一般是四个,分别是shiro-all-1.3.2.jar、log4j-1.2.15.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar。然后进入官方提供的shiro-root里面,将其中的sample\quickstart\src\main下的java文件夹中的Quickstart.java和resource文件夹下的log4j和shiro.ini文件放入工程中相应的位置,最后打开Quickstart.java,运行里面的main方法,控制台不报错的话,就算运行成功了。如果有问题,可以点击参考资料的视频地址查看,查询,解决。
清单
参考资料
尚硅谷的《shiro.pdf》
视频地址:http://www.gulixueyuan.com/course/45