这个类更简单,只是提供当前线程的subject和应用中唯一的securityUtils。源码如下:
public static Subject getSubject() { Subject subject = ThreadContext.getSubject(); if (subject == null) { subject = (new Subject.Builder()).buildSubject(); ThreadContext.bind(subject); } return subject; }
从之前的源码中我们知道了每一次访问都会重新建立subject然后绑定到当前线程,所以这个就很简单了,因为当前线程中获得subject不会是null。只有在没有配置shirofilter的应用中才会出现当前线程中subject==null的情况。
同样的情况适用于securityManager,也是从当前线程中获取。securityManager是在绑定subejct到当前线程的时候顺便绑定的,以为securityManager是构成subject的元素之一。