shiro mgt包下SessionsSecurityManager类

2021SC@SDUSC
SessionsSecurityManager类继承关系图:
在这里插入图片描述
Shiro 支持SecurityManager类层次结构,它将所有session操作委托给一个包装SessionManager实例。 也就是说,这个类实现了SessionManager接口中的方法,但实际上,这些方法只是对底层“真实” SessionManager实例的传递调用。
此类或其父类未实现的其余SecurityManager方法由子类实现。
为了与此层次结构中的其他类保持一致,以及 Shiro 尽可能减少配置的愿望,将在实例化时为所有依赖项创建合适的默认实例。

私有变量

private SessionManager sessionManager;

此安全管理SessionManager使用的内部委托SessionManager管理所有应用程序的Session

方法分析

setSessionManager

public void setSessionManager(SessionManager sessionManager) {
        this.sessionManager = sessionManager;
        afterSessionManagerSet();
    }

设置将用于支持此实现的SessionManager方法调用的底层委托SessionManager实例。
此SecurityManager实现不提供支持继承的SessionManager接口的逻辑,而是将这些调用委托给内部SessionManager实例。
如果未设置SessionManager实例,则会为现有运行时环境自动创建和初始化默认实例

getSessionManager

public SessionManager getSessionManager() {
        return this.sessionManager;
    }

返回此安全管理器的内部委托SessionManager

afterCacheManagerSet

protected void afterCacheManagerSet() {
        super.afterCacheManagerSet();
        applyCacheManagerToSessionManager();
    }

调用super.afterCacheManagerSet()然后立即调用applyCacheManagerToSessionManager()以确保根据需要将CacheManager应用于 SessionManager。

afterEventBusSet

protected void afterEventBusSet() {
        super.afterEventBusSet();
        applyEventBusToSessionManager();
    }

如有必要,在 SessionManager 上设置任何已配置的 EventBus

applyCacheManagerToSessionManager

protected void applyCacheManagerToSessionManager() {
        if (this.sessionManager instanceof CacheManagerAware) {
            ((CacheManagerAware) this.sessionManager).setCacheManager(getCacheManager());
        }
    }

确保内部委托SessionManager被注入新设置的CacheManager以便它可以将其用于其内部缓存需求。
注意:如果 SessionManager 实例实现了CacheManagerAware接口,则此实现仅将 CacheManager 注入到 SessionManager 中

applyEventBusToSessionManager

protected void applyEventBusToSessionManager() {
        EventBus eventBus = getEventBus();
        if (eventBus != null && this.sessionManager instanceof EventBusAware) {
            ((EventBusAware)this.sessionManager).setEventBus(eventBus);
        }
    }

确保内部委托SessionManager注入了新设置的EventBus以便它可以将其用于其内部事件需求。

注意:如果 SessionManager 实例实现了EventBusAware接口,则此实现仅将 EventBus 注入 SessionManager

start

public Session start(SessionContext context) throws AuthorizationException {
        return this.sessionManager.start(context);
    }

.sessionManager开始

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值