内容简介:在学习Shiro的时候,遇到Shiro抛出出现这个异常的原因是因为身份验证出错了,但是我觉得我写的Realm应该没什么错误,最后折腾了一会,翻看了一下Shiro的一些源码,终于知道出现这个问题的原因了,于是想将过程记录下来。我在
在学习Shiro的时候,遇到Shiro抛出 org.apache.shiro.authc.AuthenticationException
异常,完整异常如下:
org.apache.shiro.authc.AuthenticationException: Authentication failed for token submission [org.apache.shiro.authc.UsernamePasswordToken - xue8, rememberMe=false]. Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException). 复制代码
出现这个异常的原因是因为身份验证出错了,但是我觉得我写的Realm应该没什么错误,最后折腾了一会,翻看了一下Shiro的一些源码,终于知道出现这个问题的原因了,于是想将过程记录下来。
解决
我在 Realm
的身份证验证方法 doGetAuthenticationInfo
添加断点进行调试
authenticationToken
获取用户
密码
getCredentials()
的时候出问题了,这就奇怪了,获取
用户名
getPrincipal()
的时候没问题,而且通过查看
authenticationToken
的源码,发现他们两个是一样的东西
用户名和密码传给doGetAuthenticationInfo
的时候都是成功的,那为什么会出错呢?在调试
doGetAuthenticationInfo
的时候,发现了username和password的储存方式不一样
username是以字符串String的类型储存的,而password是以字符数组char[]类型储存的,那会不会是因为这个问题造成的呢,而且在subject.login(token)
方法中,用户名和密码都是以字符串String储存在token中的,
为什么到了doGetAuthenticationInfo
就变了呢,于是我继续查看了
UsernamePasswordToken
的源码,会不会是因为这个对象将密码的字符串类型转成char[]类型呢
通过查看源码,看到了确实是UsernamePasswordToken
将传入的密码password从String字符串类型转成了char[]字符数组类型,到这里我也就明白了,在
Realm
的
doGetAuthenticationInfo
方法中,传入的
AuthenticationToken authenticationToken
用户名是以String方式储存的而密码是以Char[]储存的,用接收String的方式去接收Char[]类型数据肯定就不行了呢,所以我将密码改成用Char[]接收,如下
即可解决问题。
原文地址:ddnd.cn/2019/02/01/…
以上所述就是小编给大家介绍的《Shiro身份验证抛出AuthenticationException异常,解决方案》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Kubernetes 身份管理:身份验证
- Kubernetes身份验证机制演示
- Mongodb常用的身份验证方式
- 使用装饰器完成用户身份验证
- HTTP身份验证渗透测试指南
- 通过足迹进行身份识别 AI 将身份验证技术发挥到了极致
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Bulletproof Ajax中文版
Jeremy Keith / 刘申、宋薇 / 人民邮电出版社 / 2007-11 / 39.00元
本书介绍了如何构建无懈可击的Ajax Web应用程序,重点讲述如何在已有Web站点使用Ajax增强网站用户体验,从而尽可能地保证网站拥有最大限度的可移植性和亲和力,这正是目前大多数网站面临的需求。书中主要介绍了JavaScript、DOM、XMLHttpRequest、数据格式等,同时还提出了一种Hijax方法,即可以让Web应用程序平稳退化的方法。 本书适合各层次Web开发和设计人员阅读......一起来看看 《Bulletproof Ajax中文版》 这本书的介绍吧!