学习的时候在自定义的Realm的doGetAuthenticationInfo方法中显示根据token查询user信息,然后对身份信息进行了username,password验证,但是看公司的项目中并没有进行特别的验证,只是判断了一下user是否为空,然后直接封装了SimpleAuthenticationInfo。觉得很奇怪。
查看shiro源码才知道:
首先在进入自定义Realm之前,会经过AuthenticatingRealm这个类的getAuthenticationInfo方法
getAuthenticationInfo在assertCredentialsMatch中如果不匹配会抛出异常,而经过上级各种的捕获,最后会返回false。
所以在自定义的Realm中的doGetAuthenticationInfo方法中我们只需要根据token进行查询然后检查下是否为空以及其他自定义的条件,最后封装成SimpleAuthenticationInfo返回就行了。
网友评论