浅析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、心得:

  当自己代码没问题,报错不知道问题出在哪时,需静下心来根据报错定位,去源码里找,搜索报错信息,或许可以快速定位到问题节点。

posted @   古兰精  阅读(2596)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-11-12 浅析Web Worker使用技巧及实战场景
点击右上角即可分享
微信分享提示