当前位置: 首页 > news >正文

“爱生活”小项目问题总结

目录

爱生活小程序

1.用户登录和注册模块遇到的问题

1.1在使用密码加密时,注册新用户,客户端响应401的问题

原因:

正确操作:

1.2在设置密码加密后,发送post登录请求,服务器出现报错java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.lang.Class java.lang.invoke.SerializedLambda.capturingClass accessible: module java.base does not "opens java.lang.invoke" to unnamed module @dbf57b3

InaccessibleObjectException 错误的原因

1.3使用没有加密的密码登录,出现Encoded password does not look like BCrypt

原因:

解决方案:

步骤:

实现效果:

2.广场发布动态遇到的问题

2.1在广场动态实体类中,我定义了一个属性imagesList,其目的是为了在上传多个图片时更好操作,但在上传图片文件时出现了报错,且在数据库中images列没有数据,Error updating database. Cause: java.lang.IllegalStateException: Type handler was null on parameter mapping for property 'imageList'.

原因:

解决方案:

最终实现效果:

忽视的细节:

2.2文件超出默认大小限制,抛出Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException:

解决方案:


爱生活小程序

1.用户登录和注册模块遇到的问题

1.1在使用密码加密时,注册新用户,客户端响应401的问题


原因:

是我的SecurityConfig.java 配置类仅定义了一个 PasswordEncoder Bean(用于密码加密),但 没有配置 Spring Security 的请求安全策略,所以导致的 /user/login 或其他接口出现 401/403 权限问题

正确操作:

让密码加密工具类继承WebSecurityConfigurerAdapter,并重写configure(HttpSecurity http)方法


再次发送注册请求,数据库中的密码即可显示为加密的状态



1.2在设置密码加密后,发送post登录请求,服务器出现报错java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.lang.Class java.lang.invoke.SerializedLambda.capturingClass accessible: module java.base does not "opens java.lang.invoke" to unnamed module @dbf57b3


问题描述:

java.lang.reflect.InaccessibleObjectException 是一种反射相关的运行时异常,通常发生在尝试通过反射访问类的私有字段或方法时。这种错误的根本原因是 Java 的模块化系统 (JPMS, Java Platform Module System),自 Java 9 起引入。模块化的目的是增强封装性和安全性,因此默认情况下,某些包不会对外部模块开放其内部实现细节。

当程序试图通过反射修改 private final 字段(如 capturingClass 或其他类似的字段),而这些字段所在的模块未显式声明对其它模块开放时,就会抛出此异常。

InaccessibleObjectException 错误的原因

这个错误是由于 Java 模块系统的强封装性导致的,具体是 MyBatis-Plus 在尝试通过反射访问 java.lang.invoke.SerializedLambda 类的私有字段时被阻止。  


询问了AI后,给出的答案是JDK版本与SpringBoot的版本不匹配:

  • 根据 Spring 官方文档和发布说明: Spring Boot 2.5.x 正式支持的最高 JDK 版本是 JDK 16

  • 使用 JDK 17 运行 Spring Boot 2.5.x 应用可能会导致以下问题: 反射访问异常(如 java.lang.reflect.InaccessibleObjectException) 模块系统限制(JPMS)引发的类加载失败 第三方库或插件不兼容 JDK 17 新特性

    于是我尝试将SpringBoot升级到更高版本,更稳定的版本2.7.18

but,仍旧报错....


继续修改,将MybatisPlus版本升级为更高的 3.5.0+ ,出现了一个新的问题,Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-05-07 17:45:08.072 ERROR 17712 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController' defined in file


解决方案:

统一MybatisPlus的版本,这样就解决了所有问题

但在再次发送登录的请求后,虽然系统能正常运行但还是出现了异常:Unable to make field private final java.lang.Class...

于是,我将不再使用手动构造QureyWrapper,而是转换为 lambdaQuery().eq(...) ,之后的问题也就迎刃而解了。


1.3使用没有加密的密码登录,出现Encoded password does not look like BCrypt

原因:
  • 在发送登录请求中发送的密码在数据库中不是有效的BCrypt格式(可能存储的是明文或使用其他加密方式)

解决方案:

启动时自动迁移,即在系统启动时就检测有无密码未加密,若未加密,则进行加密

步骤:
  1. 添加一个数据迁移方法到 UserServiceImpl

说明: 使用 @PostConstruct 在 Bean 初始化后执行。 判断密码是否为 BCrypt 格式(如果不是则加密)。 更新数据库中的密码字段


实现效果:

成功将所有用户的密码进行加密!!

再次发送请求,登陆成功!!!!


2.广场发布动态遇到的问题

2.1在广场动态实体类中,我定义了一个属性imagesList,其目的是为了在上传多个图片时更好操作,但在上传图片文件时出现了报错,且在数据库中images列没有数据,Error updating database. Cause: java.lang.IllegalStateException: Type handler was null on parameter mapping for property 'imageList'.


原因:
  1. 定义的imagesList在数据库中没有这个字段,而MyBatis Plus 会尝试将实体类中所有非空字段映射到数据库表字段,当他发现数据库中没有这个字段时就会报这个错,并且在业务逻辑类中调用了方法dynamic.setImageList(imageUrls);


解决方案:
  1. 确保 MyBatis 忽略 imageList 字段

  2. 避免设置 imageList 字段,即不要使用dynamic.setImageList(imageUrls);


最终实现效果:

忽视的细节:

上传文件时需要确认请求头是否为 Content-Type: multipart/form-data,否则也会导致数据库images为null的情况。


2.2文件超出默认大小限制,抛出Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException:

The field images exceeds its maximum permitted size of 1048576 bytes.


解决方案:

修改 application.yml 中的上传大小限制

这样可以支持最大单个文件上传为 10MB,适用于大多数图片上传场景。

相关文章:

  • 【大模型】解决最新的Dify1.3.1版本 无法基于Ollama成功添加模型
  • LabVIEW的PID参数自适应控制
  • Nacos 从入门到实践:服务注册与配置中心完整指南
  • 兔子队列?RabbitMQ详解(1)
  • Springboot中如何自定义配置类
  • 【Tools】git使用详解以及遇到问题汇总
  • 【iOS】Tagged Pointer
  • 从0开始学习大模型--Day06--大模型的相关网络架构
  • 【Bluedroid】HID DEVICE 连接的源码分析
  • LWIP的ICMP协议
  • C++模板梳理
  • 网络编程(一)网络编程入门
  • go-gin
  • Redis--常见数据类型List列表
  • LOJ 6346 线段树:关于时间 Solution
  • 深入解析STM32中断机制:从原理到外部中断实战
  • 轻量级高性能推理引擎MNN 学习笔记 01.初识MNN
  • AJAX原理
  • jenkins built-in节点如何删除
  • python 新闻 api + react js 客户端。
  • 多地警务新媒体整合:关停交警等系统账号,统一信息发布渠道
  • 王毅人民日报撰文:共商发展振兴,共建中拉命运共同体
  • 济南市委副秘书长吕英伟已任历下区领导
  • 生态环境保护督察工作条例对督察对象和内容作了哪些规定?有关负责人答问
  • 挖掘机4月销量同比增17.6%,出口增幅创近两年新高
  • 教育部:启动实施县中头雁教师岗位计划,支撑县中全面振兴