首页 > 代码库 > Apache shiro(3)-认证过程

Apache shiro(3)-认证过程

    自己看了看前面写的几篇博客,实在是惨不忍睹。原来觉得别人这块写的不怎么样,什么都没有讲清楚。然后自己写,结果是我写的更烂。如果你被我之前的博客摧残过了,深表歉意。实践这个事情说不清楚,来来来,我们讲道理吧还是。

认证过程

    认证过程也就是对用户验明正身的过程,即确认用户输入的身份信息是正确的合法的过程。我们先看看这个认证过程的图:
技术分享
    就如图上所说,其实这个认证过程,是在Shiro的SecurityManager中自动完成的。我们使用的时候真正做的内容是从用户输入哪里收集用户的身份信息(用户名+密码),交到SecurityManager,而后SecurityManager则根据输入的用户名调用Realm取得数据库中存储的该用户的身份信息。然后验证之……
    这里需要注意的是这里的数据库,不只是说一般意义的数据库。shiro的可以从JDBC、LDAP()、ini文件、cas等数据源取得用户信息。不同的数据源需要用不同的Realm实现。下面是调用shiro登录验证的代码:
<span style="font-family:FangSong_GB2312;font-size:18px;">       <span style="font-family:FangSong_GB2312;">    //将用户信息,构造成Token,我这里是直接写死的
    	   UsernamePasswordToken token=new UsernamePasswordToken("javass","cc");
    	   token.setRememberMe(true);
    	   //取得Subject
    	   Subject currentUser=SecurityUtils.getSubject();
    	   //调用Subject的login方法,这时候Shiro开始进入自动验证
    	   //中间需要调用自己实现的realm取得用户信息
    	   currentUser.login(token);</span></span>

Realm

    Realm是Shiro取得用户数据的类,功能即DAO的功能。Realm类需要用户自己实现,对应不同的数据源要继承不同的Realm。然后,父写其中的两个方法:doGetAuthorizationInfo(取权限信息)、doGetAuthenticationInfo(取得用户信息)。
技术分享

    这里需要注意的是,如过是继承自casRealm的话只要实现一个取得权限信息方法就好,用户信息是通过cas传递过来的。shiro的casRealm已经做了接收的处理,当然你自己也可以重写。

SecurtiyManager自动化流程

    上面的认证流程图,大概说了认证的流程但是没有涉及到shiro内部的认证流程。内部流程肯定没法画全,只是经过的主要的类。
技术分享
    shiro内部的调用关系基本上就是这个样子了,跟一下源代码基本可以找出来这条线。最终是调到我们自己实现的Realm类来取得用户信息的。
    总结:认证过程基本就是这个过程了,使用起来也很方便。只要自己实现一个Realm类就好了。Shiro也可以使用多个Realm作为数据源,访问时会按照你配置的顺序来。这篇就到这里了!

Apache shiro(3)-认证过程