内容简介:在学习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 将身份验证技术发挥到了极致
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Building Websites with Joomla!
H Graf / Packt Publishing / 2006-01-20 / USD 44.99
This book is a fast paced tutorial to creating a website using Joomla!. If you've never used Joomla!, or even any web content management system before, then this book will walk you through each step i......一起来看看 《Building Websites with Joomla!》 这本书的介绍吧!