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:
@@ -15,61 +15,58 @@ class InitUserRunner(
|
|||||||
val passwordEncoder: PasswordEncoder,
|
val passwordEncoder: PasswordEncoder,
|
||||||
val userMapper: UserMapper,
|
val userMapper: UserMapper,
|
||||||
) : ApplicationRunner {
|
) : ApplicationRunner {
|
||||||
private val logger= LoggerFactory.getLogger(InitUserRunner::class.java)
|
private val logger = LoggerFactory.getLogger(InitUserRunner::class.java)
|
||||||
|
|
||||||
// 添加注解,失败时可回滚
|
// 添加注解,失败时可回滚
|
||||||
@Transactional
|
@Transactional
|
||||||
override fun run(args: ApplicationArguments) {
|
override fun run(args: ApplicationArguments) {
|
||||||
logger.info("Init user")
|
logger.info("Starting default user initialization")
|
||||||
insertUser()
|
logger.debug("Querying for admin user")
|
||||||
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")
|
|
||||||
val existsAdmin = userMapper.selectOne(
|
val existsAdmin = userMapper.selectOne(
|
||||||
QueryWrapper<User>()
|
QueryWrapper<User>()
|
||||||
.eq("username", admin.username)
|
.eq("username", "admin")
|
||||||
)
|
)
|
||||||
// 没有则插入
|
|
||||||
if (existsAdmin == null) {
|
if (existsAdmin == null) {
|
||||||
logger.info("admin user not found")
|
logger.info("Admin user not found, creating...")
|
||||||
logger.info("insert admin user to database")
|
insertAdminUser()
|
||||||
userMapper.insert(admin)
|
} else {
|
||||||
}else{
|
logger.debug("Admin user already exists, skipping")
|
||||||
logger.info("found exists admin user")
|
|
||||||
}
|
}
|
||||||
|
logger.debug("Querying for common user")
|
||||||
logger.info("select common user from database")
|
|
||||||
val existsUser = userMapper.selectOne(
|
val existsUser = userMapper.selectOne(
|
||||||
QueryWrapper<User>()
|
QueryWrapper<User>()
|
||||||
.eq("username", user.username)
|
.eq("username", "user01")
|
||||||
)
|
)
|
||||||
if (existsUser == null) {
|
if (existsUser == null) {
|
||||||
logger.info("common user not found")
|
logger.info("Common user not found, creating...")
|
||||||
logger.info("insert common user to database")
|
insertCommonUser()
|
||||||
userMapper.insert(user)
|
} else {
|
||||||
}else{
|
logger.debug("Common user already exists, skipping")
|
||||||
logger.info("found exists common user")
|
|
||||||
}
|
}
|
||||||
|
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")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user