网站的用户在shiro中用subject表示,使用的默认类是WebDelegatingSubject,是DelegatingSubject的子类,这个WebDelegatingSubject里面含有很多很多的参数:
·PrincipalCollection:主键(或者标记的集合),
·authenticated:是否校验过,
·Host:登录的ip
·session:当前的session(经过shiro封装的)
·request:发起的请求
·response:就是平时的response
· SecurityManager:spring中配置的securityManager。
Subject的生命周期:每一次访问时都会创建一个新的subject,然后创建shiro封装后的session(封装的HttpSession),然后将这个新创建的subject绑定到ThreadContext上,然后通过securityUtils中在程序的任何地方调用getSubject时都会返回同一个subject,也就是本次请求创建的那个。由于之前存放在HttpSession中的信息还会存在,所以不会丢失信息。Subject获得httpSession的办法最终还是调用的request.getSession(true),也就是根据sessionID来获取session的。
每一次创建完成subject都会讲subject的属性存放到session中去,存放的只有两个一个是principal,一个是是否校验成功。