寫shiro的入門程序的時候有
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
對涉及的三個類的關(guān)系產(chǎn)生了好奇履怯。
打開SecurityUtils裂七,發(fā)現(xiàn)Subject和SecurityManager并沒有什么關(guān)系巍膘。
但是網(wǎng)上說Subject是由SecurityManager管理的伊群。于是更好奇了脐供。發(fā)現(xiàn)有一個奇怪的東東:
打開Builder發(fā)現(xiàn)它是Subject接口的內(nèi)部類窘游。
Builder內(nèi)部維護了SecurityManager并且在初始化的時候罐监,調(diào)用了SecurityUtils的getSecurityManger類唐责,給securityManger賦值了。然后在buildSubject方法中調(diào)用了securityManger的createSubject方法去創(chuàng)建Subject卑惜。
SecurityManager是一個接口膏执,默認的實現(xiàn)類是DefaultSecurityManger,內(nèi)部維護了一個SubjectFactory(默認實現(xiàn)類為DefaultSubjectFactory)來創(chuàng)建Subject露久。