shiro学习06-用户以及登录-ThreadState类

这个接口用于将线程执行中的对象绑定到线程上或者在某些时候将不需要的对象从线程上解绑定。

bind方法:将对象绑定到对象上方便以后的调用。

Resotore方法:在线程结束之后如果是抛了异常之后,线程必须回复成原来的样子,这样可以保证线程在重复使用的时候的干净调用,放置出错。这个方法比最好用try  finally的方式调用。

书写格式例子

ThreadState state = //
try{
         state.bind();
         dosomething();
}finally{
    state.restore();
}
 

他得实现类:SubjectThreadState用于将subject绑定到线程上,方便使用securityUtils.getSubject()的调用。

方法:bind():

publicvoid bind() {
        SecurityManager securityManager = this.securityManager;
        if ( securityManager == null ) {
            //try just in case the constructor didn't find one at the time:
            securityManager = ThreadContext.getSecurityManager();
        }
        this.originalResources = ThreadContext.getResources();//将之前的信息存起来。
        ThreadContext.remove();//清空之前的信息
        ThreadContext.bind(this.subject);//重新绑定subject。
        if (securityManager != null) {
            ThreadContext.bind(securityManager);//重新绑定securityManager。
        }
  } 
 

Restore方法

publicvoid restore() {
        ThreadContext.remove();//将之前通过调用bind方法添加的内容情况,
        if (!CollectionUtils.isEmpty(this.originalResources)) {
            ThreadContext.setResources(this.originalResources);//再将之前在bind方法中保存的信息回复到当前线程。使当前线程能继续使用
        }
 }

总结一句话:这个类用于线程的重复使用,先将之前的信息存储起来,然后绑定subject + securityManager,最后再重新回复线程的信息,使其能够重复使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值