浅析security遇到java.lang.IllegalArgumentException:Cannot pass null or empty values to constructor问题处理
2021/11/12 22:13:09
本文主要是介绍浅析security遇到java.lang.IllegalArgumentException:Cannot pass null or empty values to constructor问题处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、问题描述
使用 Spring Security 开发登录鉴权校验时,发现部分用户报错:Reason: Cannot pass null or empty values to constructor in spring security
ERROR ***.security.JWTLoginFilter 221 - An internal error occurred while trying to authenticate the user. org.springframework.security.authentication.InternalAuthenticationServiceException: Cannot pass null or empty values to constructor at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:123) at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:144) at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:175) at com.enmox.emcs.security.JWTLoginFilter.attemptAuthentication(JWTLoginFilter.java:92)
下面报错的显示就都是 security 源码里的方法。
二、原因分析及方案解决
1、原因分析:
因为无法在 spring security 中将 null 或空值传递给构造函数。遇到这个报错大概率都是因为在实现 UserDetailService 接口,执行查库操作时发现有 null 值(如当前用户的信息用户名或者用户密码之类为 null)。那么我们就需要确定 null 值的字段,在 UserDetailsService 实现类进行断点查看即可。
2、为什么 null 会报错
查看 security 源码发现,其在创建user的时候,密码为null会报错
可以看到抛出的错误正好是遇到的错误,由此可以确定问题点。去数据库查看登录异常用户,其密码为 null,将其设为空字符串即可。
3、心得:
当自己代码没问题,报错不知道问题出在哪时,需静下心来根据报错定位,去源码里找,搜索报错信息,或许可以快速定位到问题节点。
这篇关于浅析security遇到java.lang.IllegalArgumentException:Cannot pass null or empty values to constructor问题处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南