Shiro身份验证----subject提交

  

获取subject对象

1、SecurityUtils.getSubject()

2、调用的是ThreadContext

2、从ThreadContext获取Subject

1、其内部有静态创建了ThreadLocal<Map<Object,Object>>

2、获取subject的key:org.apache.shiro.util.ThreadContext_SUBJECT_KEY

3、WebDelegationgSubject

3、调用login方法

1、创建usernamepasswordtoken

此处验证Remember是否启用

             2、进入login方法

1、clear run as identities internal

清除内部运行身份

2、获取session,无则不创建,有删除RUN_AS_PRINCIPALS_SESSION_KEY的值

注意:

获取session方法在DelegationgSubject类中,

4、调用securitymanager的login方法:

该实例对象为DefaultSecurityManager

1、info = authenticate(token);

该步为了获取用户真实信息

1、获取realms,并进行验证

2、ModularRealmAuthenticator为realm管理

2、返回info若是为空则表示验证不成功

notifyfail(token, info);

成功则:notifySuccess(token, info);

此处有AuthenticationListener监听器:

监听验证登录情况:

可以扩展ip限制登录次数,该用用户短时间不能在登录

5、返回到login方法执行createsubject(token,info,subject)

6、

1、创建SubjectContext:

subject容器:1、sessionid等所有信息

subject容器:1、设置用户验证成功true

2、存入token和info

3、存入existing即subject

7、调用createSubject(context)

以下是方法讲解:

1、copy将context中属性全部复制到DefaultSecurityManager中的DefaultSubjectcontext

2、查看容器里有没有securitymanager,无则从ThreadContext创建

3、查看容器里面有没有session(暂时不懂其方法)

4、查看容器里面有没有用户信息

5、通过context创建subuject

1、

2、查看容器里有没有securitymanager,无则从ThreadContext创建

最终:创建WebDelegatingSubject

注意此处的SessionEnabled修改为true了,之前所有创建session都为false导致创建失败

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值