zoukankan      html  css  js  c++  java
  • 浅析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、心得:

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

  • 相关阅读:
    iOS7以上自定义一个navigationController,并沿用系统的侧滑返回效果
    判断一个日期是否再某个日期范围内object-c 范例
    统计软件简介
    大学生对vivo手机的看法
    第二次作业,制作调查问卷
    作业一:数据软件系统的介绍及spss的操作简介
    Android WebView
    Android ListView
    ARM和x86
    android shape和selector
  • 原文地址:https://www.cnblogs.com/goloving/p/15545947.html
Copyright © 2011-2022 走看看