浅析security遇到java.lang.IllegalArgumentException:Cannot pass null or empty values to constructor问题处理
JAVA 处理 to Cannot or 遇到 浅析 null
2023-09-11 14:19:54 时间
一、问题描述
使用 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、心得:
当自己代码没问题,报错不知道问题出在哪时,需静下心来根据报错定位,去源码里找,搜索报错信息,或许可以快速定位到问题节点。
相关文章
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
- Word处理控件Aspose.Words功能演示:如何使用 Java 从模板动态生成 Word 文档
- 介绍一个轻量级java的swf处理库
- Java IO: 字符流的Buffered和Filter
- java 常用正则表达式匹配工具类RegExpUtil.java
- Java并发JUC(java.util.concurrent)JMM内存模型
- JAVA单元测试框架-3-Parameter-DataProvider 参数处理
- 34 异常机制 异常体系结构 Java把异常当做对象来处理 并定义一个基类java.lang.Throwable作为所有异常的超类 Error Exception
- 第七节:详细讲解Java中的日期,java.util.date
- Java经典实例:处理单个字符串
- JAVA异常处理之finally中最好不要使用return
- java生成6位随机数字
- Scala操作Hbase空指针异常java.lang.NullPointerException处理
- JAVA多线程实现的四种方式
- android源码-事件分发处理机制(上)- java层事件分发流程
- 支付宝支付java服务端处理
- Java代码调用存储过程和存储方法
- Java_并发工具包 java.util.concurrent 用户指南(转)
- Java AES加解密报错javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher的问题原因及2种解决方式
- Java编程常用数据转换:String与int互转、Date与String互转、BigDecimal与int比较(报错operator > cannot be applied to java.math.BigDecimal,int)
- Java实现3DES加密解密(DESede/ECB/PKCS5Padding使用)
- Java Web项目整体异常处理机制
- Java 处理 XML 的三种主流技术及介绍
- Java -- 容器使用 Set, List, Map, Queue
- Java之旅(二)--- ServletContext
- Java hutool/java 常用方法
- Java IO节点流和处理流