Shiro异常java.lang.IllegalArgumentException: Odd number of characters的解决方案

本文详细解析了在使用Apache Shiro框架进行用户身份验证时遇到的Oddnumberofcharacters异常,阐述了这一错误通常源于数据库中存储的密码不是经过加密的密文,并指导如何正确配置Shiro的HashedCredentialsMatcher以确保密码匹配过程的顺利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.lang.IllegalArgumentException: Odd number of characters.
    at org.apache.shiro.codec.Hex.decode(Hex.java:128) ~[shiro-core-1.3.2.jar:1.3.2]
    at org.apache.shiro.codec.Hex.decode(Hex.java:107) ~[shiro-core-1.3.2.jar:1.3.2]
    at org.apache.shiro.codec.Hex.decode(Hex.java:95) ~[shiro-core-1.3.2.jar:1.3.2]
    at org.apache.shiro.authc.credential.HashedCredentialsMatcher.getCredentials(HashedCredentialsMatcher.java:353) ~[shiro-core-1.3.2.jar:1.3.2]
    at org.apache.shiro.authc.credential.HashedCredentialsMatcher.doCredentialsMatch(HashedCredentialsMatcher.java:380) ~[shiro-core-1.3.2.jar:1.3.2]
    at org.apache.shiro.realm.AuthenticatingRealm.assertCredentialsMatch(AuthenticatingRealm.java:597) ~[shiro-core-1.3.2.jar:1.3.2]

原因很简单,就是你从数据库中查出来的数据不是密文的,
在realm文件中,身份验证最后一句话一般这么写,这里传入的第二个参数password必须是密文的,是你使用的加密方式的密文 , 比如 mD5 ,sha256等

return new SimpleAuthenticationInfo(token.getPrincipal(), password, salt, getName());
当你在使用Spring Boot和Shiro集成的时候,遇到`java.lang.NoClassDefFoundError: javax/servlet/Filter`这个错误,通常是因为缺少了Servlet API相关的依赖。Servlet API是Java Servlet规范的一部分,它定义了一些核心组件如Filter,用于Web应用程序处理请求。 解决这个问题的步骤通常是: 1. **添加依赖**:检查你的pom.xml文件或者build.gradle文件,确认已经包含了Servlet API的依赖。对于Maven,可以添加如下依赖: ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <!-- 或者最新的版本 --> <scope>provided</scope> <!-- Spring Boot默认会提供这层API,所以这里是提供的意思 --> </dependency> ``` 如果是Gradle,添加类似这样的: ```groovy implementation 'javax.servlet:javax.servlet-api:4.0.1' ``` 2. **配置Spring Boot**:由于Spring Boot会在运行时自动排除对已包含功能的第三方库的依赖,如果Servlet是作为Spring Boot自动包含的部分(即`web` starter),确保你不需要手动排除这一依赖。 3. **检查类路径**:确保你的项目构建过程中,Tomcat或Web服务器能够找到这个缺失的类,可能需要调整启动类或者配置文件中的类加载路径设置。 4. **重启应用**:最后,清理并重新启动你的Spring Boot应用,看看是否解决了问题。 如果你按照上述步骤仍然遇到问题,可能是其他环境变量设置错误或者有其他的类冲突,建议查看详细的日志以获取更多线索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值