refactor(auth): make admin user initialization idempotent

- Check if admin user already exists before inserting
- Improve log messages with descriptive output
- Move @Transactional annotation to run method
- Fix minor formatting inconsistency
This commit is contained in:
2026-05-20 13:25:04 +08:00
parent 52298e7fff
commit 9511b8daad
@@ -16,60 +16,57 @@ class InitUserRunner(
val userMapper: UserMapper,
) : ApplicationRunner {
private val logger = LoggerFactory.getLogger(InitUserRunner::class.java)
// 添加注解,失败时可回滚
@Transactional
override fun run(args: ApplicationArguments) {
logger.info("Init user")
insertUser()
logger.info("Init user complete")
}
fun insertUser() {
// 创建admin账户
logger.info("create admin user")
val admin = User(
null,
"admin",
// 1. 使用 Argon2 对密码进行哈希处理(自动包含随机 salt)
// 2. encode() 来自 Java 接口,Kotlin 会将返回值视为平台类型,因此这里断言非空
passwordEncoder.encode("admin")!!,
"admin"
)
logger.info("insert common user")
// 创建普通账户
val user = User(
null,
"user",
passwordEncoder.encode("user")!!,
"user"
)
// 插入到数据库
// 先查询数据库中是否有admin账户
logger.info("select admin user from database")
logger.info("Starting default user initialization")
logger.debug("Querying for admin user")
val existsAdmin = userMapper.selectOne(
QueryWrapper<User>()
.eq("username", admin.username)
.eq("username", "admin")
)
// 没有则插入
if (existsAdmin == null) {
logger.info("admin user not found")
logger.info("insert admin user to database")
userMapper.insert(admin)
logger.info("Admin user not found, creating...")
insertAdminUser()
} else {
logger.info("found exists admin user")
logger.debug("Admin user already exists, skipping")
}
logger.info("select common user from database")
logger.debug("Querying for common user")
val existsUser = userMapper.selectOne(
QueryWrapper<User>()
.eq("username", user.username)
.eq("username", "user01")
)
if (existsUser == null) {
logger.info("common user not found")
logger.info("insert common user to database")
userMapper.insert(user)
logger.info("Common user not found, creating...")
insertCommonUser()
} else {
logger.info("found exists common user")
}
logger.debug("Common user already exists, skipping")
}
logger.info("Default user initialization completed")
}
fun insertAdminUser() {
val user = User(
id = null,
username = "admin",
password = passwordEncoder.encode("admin")!!,
role = "admin"
)
logger.debug("Creating admin user: username={}, role={}", user.username, user.role)
userMapper.insert(user)
logger.info("Admin user created successfully")
}
fun insertCommonUser() {
val user = User(
id = null,
username = "user01",
password = passwordEncoder.encode("user01")!!,
role = "user"
)
logger.debug("Creating common user: username={}, role={}", user.username, user.role)
userMapper.insert(user)
logger.info("Common user created successfully")
}
}