shiro认证时出现报错Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - admin...

本文主要是介绍shiro认证时出现报错Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - admin...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

shiro认证时出现报错:

org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - admin, rememberMe=false] did not match the expected credentials.
在这里插入图片描述

当时出现这个问题是在生产的uat环境上出现的,说实话,挺幸运的,幸好是在uat环境上测出来的(公司的测试环境没有发现),要是上生产出现这个问题,估计得挨批评了。。。

好了,废话不多说,我来介绍一下这个报错出现的场景。当时给客户上的是两套是系统(A和B),系统里面的用户是相互独立的,但是A系统的用户是需要同步到B系统里去的,当时出现的问题就是A系统同步用户到B系统,然后A系统在使用的过程中,修改了用户的密码(密码也会同步过去),B系统里的这个用户就登录不了。当时给我的第一反应就是缓存问题,但这只是自己的怀疑而已,并没有证据。

好吧,那我们自己找证据,根据现场给过来的log日志,我们可以直接定位到shiro源码的报错位置。
org.apache.shiro.realm.AuthenticatingRealm.assertCredentialsMatch(AuthenticatingRealm.java:603)

在这里插入图片描述

通过断点,这里我们可以看见,应该是token和info里面的信息不配造成的。
在这里插入图片描述

好,那么我点doCredentialsMatch方法,好家伙!!!果然有问题,通过AuthenticationToken和AuthenticationInfo通过单词的意思,我们可以猜出来,AuthenticationToken是登录传递过来的,AuthenticationInfo是shiro里的Realm认证和授权的时候传递过来的,查看两处相关代码,有重大发现!Realm认证的时候,是从缓存中获取的用户信息!
在这里插入图片描述

那么分析到这里,问题就比较清晰了,A系统修改密码,同步密码信息的时候,是直接用SQL修改,没有刷新到B系统里的缓存!
解决问题的方法有两种,一种是去掉B系统这里的缓存。第二种是A系统同步密码信息的时候,通知B系统刷新缓存!

这篇关于shiro认证时出现报错Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - admin...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383326

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

【Shiro】Shiro 的学习教程(三)之 SpringBoot 集成 Shiro

目录 1、环境准备2、引入 Shiro3、实现认证、退出3.1、使用死数据实现3.2、引入数据库,添加注册功能后端代码前端代码 3.3、MD5、Salt 的认证流程 4.、实现授权4.1、基于角色授权4.2、基于资源授权 5、引入缓存5.1、EhCache 实现缓存5.2、集成 Redis 实现 Shiro 缓存 1、环境准备 新建一个 SpringBoot 工程,引入依赖:

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods