创建一个SQL脚本文件,例如 create_admin.sql:
-- ============================================
-- 创建管理员账号
-- ============================================
USE `books_db`;
-- 方法1:直接插入(如果确定不存在)
INSERT INTO `users` (`username`, `nickname`, `password`, `role`, `status`, `created_at`, `updated_at`)
VALUES ('admin', '管理员', '0192023a7bbd73250516f069df18b500', 'admin', 1, NOW(), NOW());
-- 方法2:安全插入(如果已存在则跳过)
INSERT INTO `users` (`username`, `nickname`, `password`, `role`, `status`, `created_at`, `updated_at`)
SELECT 'admin', '管理员', '0192023a7bbd73250516f069df18b500', 'admin', 1, NOW(), NOW()
WHERE NOT EXISTS (SELECT 1 FROM `users` WHERE `username` = 'admin');
-- 方法3:如果已存在admin用户,更新其角色为管理员
UPDATE `users`
SET `role` = 'admin', `status` = 1, `updated_at` = NOW()
WHERE `username` = 'admin' AND (`role` IS NULL OR `role` != 'admin');
默认密码: admin123
MD5加密后: 0192023a7bbd73250516f069df18b500
方式1:使用在线工具
admin123方式2:使用Java代码
import com.yu.book.util.PasswordUtil;
public class Test {
public static void main(String[] args) {
String password = "admin123";
String encrypted = PasswordUtil.encrypt(password);
System.out.println("密码: " + password);
System.out.println("MD5: " + encrypted);
// 输出:0192023a7bbd73250516f069df18b500
}
}
方式3:使用MySQL函数
SELECT MD5('admin123');
-- 输出:0192023a7bbd73250516f069df18b500
方式1:使用命令行
mysql -u root -p books_db < create_admin.sql
方式2:使用MySQL客户端
-- 1. 连接到MySQL
mysql -u root -p
-- 2. 选择数据库
USE books_db;
-- 3. 执行SQL语句
source create_admin.sql;
-- 或者直接复制粘贴SQL语句执行
方式3:使用数据库管理工具
books_db如果你想创建其他管理员账号,修改SQL脚本:
-- 创建自定义管理员账号
-- 用户名:myadmin
-- 密码:mypassword123
-- 需要先计算密码的MD5值
-- 计算MD5(在MySQL中执行)
SELECT MD5('mypassword123');
-- 假设输出:5f4dcc3b5aa765d61d8327deb882cf99
-- 插入管理员账号
INSERT INTO `users` (`username`, `nickname`, `password`, `role`, `status`, `created_at`, `updated_at`)
SELECT 'myadmin', '我的管理员', '5f4dcc3b5aa765d61d8327deb882cf99', 'admin', 1, NOW(), NOW()
WHERE NOT EXISTS (SELECT 1 FROM `users` WHERE `username` = 'myadmin');
创建文件:book/src/main/java/com/yu/book/admin/util/AdminAccountUtil.java
package com.yu.book.admin.util;
import com.yu.book.domain.User;
import com.yu.book.mapper.UserMapper;
import com.yu.book.util.PasswordUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 管理员账号工具类
* 用于创建和管理管理员账号
*/
@Component
public class AdminAccountUtil {
@Autowired
private UserMapper userMapper;
/**
* 创建管理员账号
* @param username 用户名
* @param password 密码(明文)
* @param nickname 昵称
* @return 创建结果
*/
public String createAdmin(String username, String password, String nickname) {
// 检查用户名是否已存在
User existingUser = userMapper.selectByUsername(username);
if (existingUser != null) {
// 如果用户已存在,更新为管理员
existingUser.setRole("admin");
existingUser.setPassword(PasswordUtil.encrypt(password));
existingUser.setStatus(1);
userMapper.update(existingUser);
return "用户已存在,已更新为管理员账号";
}
// 创建新管理员账号
User admin = new User();
admin.setUsername(username);
admin.setPassword(PasswordUtil.encrypt(password)); // 密码加密
admin.setNickname(nickname != null ? nickname : "管理员");
admin.setRole("admin"); // 设置为管理员角色
admin.setStatus(1); // 状态:1-激活,0-禁用
userMapper.insert(admin);
return "管理员账号创建成功";
}
/**
* 创建默认管理员账号(admin/admin123)
*/
public String createDefaultAdmin() {
return createAdmin("admin", "admin123", "管理员");
}
}
方式1:创建测试类
创建文件:book/src/test/java/com/yu/book/admin/AdminAccountTest.java
package com.yu.book.admin;
import com.yu.book.admin.util.AdminAccountUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class AdminAccountTest {
@Autowired
private AdminAccountUtil adminAccountUtil;
@Test
public void testCreateDefaultAdmin() {
String result = adminAccountUtil.createDefaultAdmin();
System.out.println(result);
}
@Test
public void testCreateCustomAdmin() {
String result = adminAccountUtil.createAdmin("myadmin", "mypassword123", "我的管理员");
System.out.println(result);
}
}
方式2:创建初始化类(应用启动时自动创建)
创建文件:book/src/main/java/com/yu/book/admin/config/AdminInitConfig.java
package com.yu.book.admin.config;
import com.yu.book.admin.util.AdminAccountUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
/**
* 应用启动时自动创建默认管理员账号
*/
@Component
public class AdminInitConfig implements CommandLineRunner {
@Autowired
private AdminAccountUtil adminAccountUtil;
@Override
public void run(String... args) throws Exception {
// 应用启动时自动创建默认管理员账号
String result = adminAccountUtil.createDefaultAdmin();
System.out.println("管理员账号初始化: " + result);
}
}
# 运行测试类
mvn test -Dtest=AdminAccountTest
# 或者使用IDE运行测试
在 AdminController.java 中添加接口:
/**
* 创建管理员账号(仅用于初始化,生产环境应删除或添加权限控制)
*/
@PostMapping("/create")
public Result<String> createAdmin(@RequestBody AdminCreateDTO createDTO) {
try {
// 参数验证
if (createDTO == null || createDTO.getUsername() == null || createDTO.getUsername().trim().isEmpty()) {
return Result.error("用户名不能为空");
}
if (createDTO.getPassword() == null || createDTO.getPassword().trim().isEmpty()) {
return Result.error("密码不能为空");
}
if (createDTO.getPassword().length() < 6) {
return Result.error("密码长度不能少于6位");
}
// 检查用户名是否已存在
User existingUser = userMapper.selectByUsername(createDTO.getUsername());
if (existingUser != null) {
// 如果用户已存在,更新为管理员
existingUser.setRole("admin");
existingUser.setPassword(PasswordUtil.encrypt(createDTO.getPassword()));
existingUser.setStatus(1);
userMapper.update(existingUser);
return Result.success("用户已存在,已更新为管理员账号");
}
// 创建新管理员账号
User admin = new User();
admin.setUsername(createDTO.getUsername());
admin.setPassword(PasswordUtil.encrypt(createDTO.getPassword()));
admin.setNickname(createDTO.getNickname() != null ? createDTO.getNickname() : "管理员");
admin.setRole("admin");
admin.setStatus(1);
userMapper.insert(admin);
return Result.success("管理员账号创建成功");
} catch (Exception e) {
return Result.error("创建失败: " + e.getMessage());
}
}
创建文件:book/src/main/java/com/yu/book/admin/dto/AdminCreateDTO.java
package com.yu.book.admin.dto;
/**
* 创建管理员DTO
*/
public class AdminCreateDTO {
private String username;
private String password;
private String nickname;
// Getters and Setters
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
使用curl命令:
curl -X POST http://localhost:8081/api/admin/create \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "admin123",
"nickname": "管理员"
}'
使用Postman:
http://localhost:8081/api/admin/createContent-Type: application/jsonBody(JSON):
{
"username": "admin",
"password": "admin123",
"nickname": "管理员"
}
-- 查询所有管理员账号
SELECT id, username, nickname, role, status, created_at
FROM users
WHERE role = 'admin';
-- 验证密码(查看MD5值)
SELECT username, password, role
FROM users
WHERE username = 'admin';
curl -X POST http://localhost:8081/api/admin/login \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "admin123"
}'
成功响应:
{
"code": 200,
"message": "登录成功",
"data": {
"id": 1,
"username": "admin",
"nickname": "管理员",
"role": "admin",
"token": "admin_token_1"
}
}
http://localhost:8081/pages/login.htmladminadmin123方法1:使用SQL
-- 新密码:newpassword123
-- 先计算MD5
SELECT MD5('newpassword123');
-- 假设输出:abc123def456...
-- 更新密码
UPDATE users
SET password = 'abc123def456...', updated_at = NOW()
WHERE username = 'admin' AND role = 'admin';
方法2:使用Java代码
User user = userMapper.selectByUsername("admin");
user.setPassword(PasswordUtil.encrypt("newpassword123"));
userMapper.update(user);
使用任意一种方法,只需修改用户名和密码即可:
-- 创建第二个管理员
INSERT INTO `users` (`username`, `nickname`, `password`, `role`, `status`, `created_at`, `updated_at`)
SELECT 'admin2', '管理员2', MD5('password123'), 'admin', 1, NOW(), NOW()
WHERE NOT EXISTS (SELECT 1 FROM `users` WHERE `username` = 'admin2');
-- 将指定用户升级为管理员
UPDATE users
SET role = 'admin', updated_at = NOW()
WHERE username = '普通用户名';
-- 禁用管理员账号(不能登录,但数据保留)
UPDATE users
SET status = 0, updated_at = NOW()
WHERE username = 'admin' AND role = 'admin';
-- 删除管理员账号(谨慎操作)
DELETE FROM users
WHERE username = 'admin' AND role = 'admin';
重置密码:
-- 重置为默认密码 admin123
UPDATE users
SET password = '0192023a7bbd73250516f069df18b500', updated_at = NOW()
WHERE username = 'admin' AND role = 'admin';
当前使用 MD5 加密。
注意: MD5不是最安全的加密方式,生产环境建议使用 BCrypt 或 Argon2。
升级到BCrypt的示例:
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String encrypted = encoder.encode("admin123");
创建管理员账号有三种主要方法:
推荐流程:
创建时间: 2024年
最后更新: 2024年