赞
踩
- public interface SecurityManager extends Authenticator, Authorizer, SessionManager {
- Subject login(Subject var1, AuthenticationToken var2) throws AuthenticationException;
- void logout(Subject var1);
- Subject createSubject(SubjectContext var1);
- }
看看上面这张图和源码,在shiro-core核心包里,SecurityManager管理着认证、授权、会话管理,至于如果还想用到缓存管理等等功能,那就要另外引入shiro对应的jar包。
再看看Manager的继承关系:
层层继承、层层实现。越往下面的Manager,功能越多,没一个Manager都代表了一种功能:缓存、Realm、认证、授权、会话、默认的、web。个人认为,我们利用Factory工厂实例化SecurityManager时,就是用的默认Manager(DefaultSecurityManager)。
在看看认证使用的是什么? 默认用的是ModularRealmAuthenticator类,所以无需设置SecurityManager的authenticator:
首先将一个用户抽象为一个Subject对象,通过调用对象里的方法来实现对用户的认证、授权、会话、缓存等等的操作。
比如:subject.hasRole()、subject.checkPermission()等等。
这是一个核心组件,Subject调用的操作,基本都由SecurityManager去处理并作出相应的回应,所以正如图中一样,SecurityManager管理着很多功能模块,SecurityManager是个接口,每一个功能模块都对应着一个自己的Manager,这样使得shiro框架的代码结构清晰有条理。
具体的认证器、授权器、会话管理器等等这些组件,都有自己的默认实现、默认配置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。