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() {
        super();
        this.subjectFactory = new DefaultSubjectFactory();
        this.subjectDAO = new DefaultSubjectDAO();
  }

public DefaultSecurityManager(Realm singleRealm) {
        this();
        setRealm(singleRealm);
  }

public DefaultSecurityManager(Collection<Realm> realms) {
        this();
        setRealms(realms);
    }

DefaultWebSecurityManager

public DefaultWebSecurityManager() {
        super();
        ((DefaultSubjectDAO) this.subjectDAO).setSessionStorageEvaluator(new DefaultWebSessionStorageEvaluator());
        this.sessionMode = HTTP_SESSION_MODE;
        setSubjectFactory(new DefaultWebSubjectFactory());
        setRememberMeManager(new CookieRememberMeManager());
        setSessionManager(new ServletContainerSessionManager());
    }

    @SuppressWarnings({"UnusedDeclaration"})
    public DefaultWebSecurityManager(Realm singleRealm) {
        this();
        setRealm(singleRealm);
    }

    @SuppressWarnings({"UnusedDeclaration"})
    public DefaultWebSecurityManager(Collection<Realm> realms) {
        this();
        setRealms(realms);
    }

 通过构造方法我们知道,RealmSecurityManager、CachingSecurityManager并没有设置默认的对象,所以这个是交给开发人员自己配置的,这也是我们需要在shiro配置文件中进行配置的。

在DefaultWebSecurityManager中默认使用的sessionManager是ServletContainerSessionManager做会话管理,其直接使用Servlet容器的会话,所以不支持不支持SessionDAO,因此如果我们想做自己的session管理,则需要使用

DefaultWebSessionManager。

猜你喜欢

转载自blog.csdn.net/ystyaoshengting/article/details/82714656