shiro的subject创建和session的创建

在我的这篇博客中已经介绍了shiro的启动过程

这次,我们来看看shiro的subject创建和session的创建。

真正执行过滤器的filter是SpringShiroFilter。SpringShiroFilter是ShiroFilterFactoryBean的内部类。

 

 过滤器拦截匹配的url后,进入到doFilter()方法。这里看OncePerRequestFilter类中的doFilter()方法。

看doFilterInternal()这里是抽象方法,在AbstractShiroFilter这个类中有具体实现。在此方法中createSubject()方法中,创建了subject。在execute()方法中,另起一个线程将subject绑定到ThreadLocal线程上。这些绑定,解绑的操作都由ThreadContext这个对象来完成。事实上,绑定在ThreadLocal上的是一个Map<Object,Object>对象,map里面放的就是subject和securityManager。

 

 

 进入到execute()方法里面看看。在execute()方法上,使用 lambda表达式申明一个匿名内部类,作为型参传递到方法里面。然后通过associateWith(callable)方法构造一个SubjectCallable对象。然后在execute()方法里面执行call方法,另起一个线程执行。

 

 

 

 

 这样另起一个线程就会执行SubjectCallable对象的call()方法。在call()方法里面调用threadState.bind()绑定subject,然后在执行匿名内部类的call()方法。

 

posted on 2020-07-18 23:26  ajax取个名字真难  阅读(721)  评论(0编辑  收藏  举报

导航