SecurityManager系列
下面这张图是从网上找的securityManager的结构图,说明如下
1.在Web项目中使用的DefaultWebSecurityManager这个类,是继承了DefaultSecurityManager这个类,并且实现了
WebSecurityManager接口,图中没有提现出来。
2.图中除了DefaultSecurityManager之外,其他的都是抽象类
3.各个类及抽象类的有参构造方法如下表格,注意是有参构造方法
CachingSecurityManager | public CachingSecurityManager() {} |
RealmSecurityManager | public RealmSecurityManager() { super(); } |
AuthenticatingSecurityManager | public AuthenticatingSecurityManager() { super(); this.authenticator = new ModularRealmAuthenticator(); } |
AuthorizingSecurityManager | public AuthorizingSecurityManager() { super(); this.authorizer = new ModularRealmAuthorizer(); } |
SessionsSecurityManager | public SessionsSecurityManager() { super(); this.sessionManager = new DefaultSessionManager(); applyCacheManagerToSessionManager(); } |
DefaultSecurityManager |
public DefaultSecurityManager() { public DefaultSecurityManager(Realm singleRealm) { public DefaultSecurityManager(Collection<Realm> realms) { |
DefaultWebSecurityManager |
public DefaultWebSecurityManager() { @SuppressWarnings({"UnusedDeclaration"}) @SuppressWarnings({"UnusedDeclaration"}) |
通过构造方法我们知道,RealmSecurityManager、CachingSecurityManager并没有设置默认的对象,所以这个是交给开发人员自己配置的,这也是我们需要在shiro配置文件中进行配置的。
在DefaultWebSecurityManager中默认使用的sessionManager是ServletContainerSessionManager做会话管理,其直接使用Servlet容器的会话,所以不支持不支持SessionDAO,因此如果我们想做自己的session管理,则需要使用
DefaultWebSessionManager。