基于SpringBoot和Vue的导师选择管理系统设计与实现
技术架构
后端采用Spring Boot框架,其内置Tomcat服务器并提供自动配置机制,简化了应用初始化流程。该框架通过起步依赖和Starter组件实现功能模块化集成,结合Spring MVC构建RESTful API接口。前端使用Vue.js框架,通过组件化开发模式实现页面动态渲染,配合Vue Router完成路由管理,利用Axios库进行HTTP通信。数据访问层采用MyBatis Plus增强工具,通过封装通用CRUD操作减少SQL编写工作量,其自动生成器可快速构建实体类和Mapper接口。
安全验证机制
系统采用基于Token的认证方案,通过拦截器实现请求权限校验。在用户登录成功后,服务端生成唯一令牌并设置1小时有效期,将令牌信息存储至数据库。每次请求时,客户端需在Header中携带Token值,拦截器通过解析令牌验证用户身份,同时校验角色权限和会话有效性。该机制有效防止CSRF攻击,确保系统访问安全性。
核心代码实现
/**
* 用户登录接口
*/
@RestController
@RequestMapping("/api")
public class AuthController {
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
@PostMapping("/signin")
public R userLogin(String username, String password) {
UsersEntity user = userService.getOne(new QueryWrapper<UsersEntity>()
.eq("username", username));
if (user == null || !user.getPassword().equals(password)) {
return R.error("账号或密码错误");
}
String authToken = tokenService.createAuthToken(user.getId(), username,
user.getRole(), 3600L);
return R.ok().put("token", authToken);
}
}
/**
* Token验证拦截器
*/
@Component
public class AuthInterceptor implements HandlerInterceptor {
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
// 跨域配置
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
// 跳过验证的接口
if (handler instanceof HandlerMethod) {
HandlerMethod method = (HandlerMethod) handler;
if (method.getMethodAnnotation(IgnoreAuth.class) != null) {
return true;
}
}
String token = request.getHeader("Authorization");
TokenEntity tokenInfo = tokenService.getTokenInfo(token);
if (tokenInfo == null) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "未登录");
return false;
}
// 设置会话信息
request.getSession().setAttribute("userId", tokenInfo.getUserId());
request.getSession().setAttribute("role", tokenInfo.getRole());
return true;
}
}
数据库设计
-- 令牌存储表
CREATE TABLE `auth_token` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`username` VARCHAR(100) NOT NULL COMMENT '用户名',
`role` VARCHAR(50) NOT NULL COMMENT '用户角色',
`token` VARCHAR(200) NOT NULL COMMENT '访问令牌',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '生成时间',
`expire_time` DATETIME NOT NULL COMMENT '过期时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 示例数据
INSERT INTO `auth_token` VALUES
(1, 1001, 'admin', 'ADMIN', 'a1b2c3d4', '2023-04-01 10:00:00', '2023-04-01 11:00:00'),
(2, 1002, 'teacher', 'TEACHER', 'e5f6g7h8', '2023-04-01 10:10:00', '2023-04-01 11:10:00');
测试验证
系统通过黑盒测试验证功能完整性,重点测试用户认证、数据操作和权限控制模块。测试用例覆盖正常流程和异常场景,包括:
- 有效/无效凭证登录测试
- 必填字段校验
- 重复数据插入检测
- 角色权限访问控制
- 会话超时处理
测试结果表明系统功能符合需求规格说明书要求,各模块逻辑正确,响应时间满足性能指标,能够稳定支持预期业务场景。