JHipster项目使用JDL Studio生成类后默认认证失败求助
解决JHipster导入JDL后无法登录但能新增用户的问题
嗨,我碰到过好几个JHipster用户遇到这种情况——用JDL生成实体后登录炸了,但新增用户没问题,从你的堆栈来看,核心就是登录时系统找不到admin用户,大概率是JDL操作不小心改了用户相关的配置或者数据库结构,给你几个具体的排查方向:
1. 先查你的JDL文件有没有踩坑
你回忆下,JDL里有没有碰过User实体相关的配置?比如:
- 是不是给
User加了必须填的关联字段,但初始化数据里的admin用户根本没这些值? - 有没有改
User的主键类型、login或者email这些核心属性? - 有没有用
relationship指令不小心把User和其他实体绑死了,导致查询用户时因为关联数据缺失报错?
要是JDL真动了User实体,要么把那部分代码改回去,要么给admin用户的初始化数据补全缺失的字段。
2. 检查自动生成的数据库迁移脚本
JHipster导入JDL后会自动生成Flyway/Liquibase的迁移脚本,这些脚本很可能不小心改了jhi_user表的结构:
- 打开
src/main/resources/db/migration下的新增脚本,看看有没有给jhi_user加了非空字段,但没给现有admin用户赋值? - Flyway看V开头的sql文件,Liquibase看changelog的xml/yaml文件
- 要是发现有问题脚本,要么修改脚本给admin补数据,要么回滚迁移,重新生成正确的JDL脚本
3. 直接去数据库里查admin用户的状态
既然能新增用户,说明写入没问题,那直接查jhi_user表:
- admin用户的记录还在吗?
activated字段是不是true?- 有没有核心字段(比如
login)被改成空或者无效值了?
要是admin数据有问题,要么手动在数据库里修复,要么重新跑一遍JHipster的初始化脚本,把admin用户插回去。
4. 看看AccountResource的代码逻辑
从堆栈看错误出在AccountResource.getAccount()第107行,这个方法是拿当前登录用户信息的:
- 是不是JDL生成的代码改了查询逻辑?比如原本只查用户表,现在非要关联其他实体,但关联的数据不存在?
- 比如代码里可能是
userRepository.findOneByLogin(login).orElseThrow(...),如果login对应用户查不到,或者关联查询报错,就会抛这个异常。
要是查询逻辑被改坏了,把AccountResource恢复成原来的代码就行,或者调整查询语句确保能正确找到用户。
5. 清理缓存重新构建试试
有时候就是编译缓存搞的鬼:
- 执行
./mvnw clean install(Maven)或者./gradlew clean build(Gradle)彻底清理构建 - 重启应用,用浏览器隐身模式登录(避免缓存的旧会话)
- 开发环境的话,还可以重启数据库,重新跑一遍迁移脚本
内容的提问来源于stack exchange,提问作者Diego Zacarias
相关产品推荐
相关产品推荐

