From 9511b8daad8f5e0f49b1713dbd9b2130e8d63b65 Mon Sep 17 00:00:00 2001 From: msksbr515 Date: Wed, 20 May 2026 13:25:04 +0800 Subject: [PATCH] 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 --- .../msksbr/bookmgr/runner/InitUserRunner.kt | 83 +++++++++---------- 1 file changed, 40 insertions(+), 43 deletions(-) diff --git a/src/main/kotlin/com/msksbr/bookmgr/runner/InitUserRunner.kt b/src/main/kotlin/com/msksbr/bookmgr/runner/InitUserRunner.kt index d3f9967..57c80b9 100644 --- a/src/main/kotlin/com/msksbr/bookmgr/runner/InitUserRunner.kt +++ b/src/main/kotlin/com/msksbr/bookmgr/runner/InitUserRunner.kt @@ -15,61 +15,58 @@ class InitUserRunner( val passwordEncoder: PasswordEncoder, val userMapper: UserMapper, ) : ApplicationRunner { - private val logger= LoggerFactory.getLogger(InitUserRunner::class.java) + 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() - .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) - }else{ - logger.info("found exists admin user") + logger.info("Admin user not found, creating...") + insertAdminUser() + } else { + 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() - .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) - }else{ - logger.info("found exists common user") + logger.info("Common user not found, creating...") + insertCommonUser() + } else { + 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") } } \ No newline at end of file