全网最简单的shiro教程第四节
Shiro认证流程分析以及源码介绍:
使用代码实现了Shiro认证流程,根据代码可以用一个简单的流程图将认证流程表达出来【这样就非常容易理解】
一顿操作猛如虎,,,,,,
为何调用了login方法最后会调用Realm的doGetAuthenticationInfo操作呢?
接下来咱们就去看源码怎么关联的:
点进去看实现类:
接着往下点:
点点点:
点点点:
点点点:
点点点:
最终调用的是:AuthenticationInfo info = realm.getAuthenticationInfo(token);【这里的Realm就是我们自定义的Realm】
总结一下调用流程:
Subject【login方法】
-->DelegatingSubject【login方法】
-->DefaultSecurityManager【securityManager.login(this, token);】
-->AuthenticatingSecurityManager【authenticate(AuthenticationToken token)】
-->AbstractAuthenticator【authenticate(AuthenticationToken token)】
-->ModularRealmAuthenticator【doAuthenticate(AuthenticationToken authenticationToken)】
-->ModularRealmAuthenticator【doSingleRealmAuthentication(Realm realm, AuthenticationToken token)】AuthenticationInfo info = realm.getAuthenticationInfo(token);
以上就是subject.login方法的调用流程。
为何Realm和SecurityManager通过配置来关联?
shiro.ini中securityManager和自定义的Realm是怎么生效的呢?
接下来让我们继续点点点:
点:
调用流程:
IniSecurityManagerFactory【createSecurityManager(Ini ini, Ini.Section mainSection)】
->IniSecurityManagerFactory【buildInstances(Ini.Section section)】=>获取shiro.ini配置文件键值对
->IniSecurityManagerFactory【getRealms(Map<String, ?> instances)】=>通过前面的键值对获取Realm
->IniSecurityManagerFactory【applyRealmsToSecurityManager(Collection<Realm> realms, SecurityManager securityManager)】
Realm和SecurityManager关联源码就是以上截图。