注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.xjava
先上一张图:git
图1 SecurityContextHolderStrategy的三个实现类github
它里面使用的是ThreadLocal,以下List-1所示:spring
List-1 spa
private static final ThreadLocal<SecurityContext> contextHolder = new ThreadLocal<SecurityContext>();
它里面使用的是InheritableThreadLocal,以下List-2所示:code
List-2blog
private static final ThreadLocal<SecurityContext> contextHolder = new InheritableThreadLocal<SecurityContext>();
ThreadLocal和InheritableThreadLocal之间是有区别的,InheritableThreadLocal的做用更广,这里就再也不深刻。get
它里面使用的是静态属性,以下List-3所示:源码
List-3it
private static SecurityContext contextHolder;