shiro源码-登录过程

登录过程我们直接从登录方法开始看,前面的一些过程就不加赘述了。

一般我们用shiro登录时,直接获取subject对象,创建UsernamePasswordToken对象,然后直接调用subject.login方法就行了,那这里面的具体是怎么实现的呢,我们跟进去看一下。

经过subject,authenticator,realm,这里的代码逻辑很简单,直接粘出来。因为我只配了单个的realm,所以这里走的是diSingleRealmAuthentication方法,如果你配了多个realm,这里会不一样。

主要就是这里AuthenticatingRealm里的getAuthenticationInfo方法了,shiro登录的实质就是通过这个方法来获取AuthenticationInfo对象,如果获取到了,这表示登录成功,如果获取不到,这表示登录失败,抛出异常。看具体实现,我们可以看到,首先会通过getCachedAuthenticationInfo方法从缓存中获取。如果获取不到,则再通过doGetAuthenticationInfo方法获取,这个方法一般我们都会重写,自定义自己的登录方法。

先看一下getCachedAuthenticationInfo方法吧,这个方法是从缓存里面获取AuthenticationInfo对象。getAvailableAuthenticationCache方法是获取cache对象,这些都是我们配置的,缓存是否开启,配置缓存源。然后从cache中获取info对象。

doGetAuthenticationInfo方法,一般都是要重写的,主要是从你的数据源获取用户对象,获取到了再用用户对象生成一个AuthenticationInfo对象返回就行了,获取不到就抛出个异常,表示登录失败。登录成功之后,会重新创建subject,然后有一些登录成功的操作,都是用监听器来实现的。如果有需要可以根据自己的需要去配置AbstractAuthenticator中的listeners,或者重写SessionListenerAdapter,实现SessionListener接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值