当前位置:首页 > 技术 > 正文内容

基于SpringBoot和Vue的导师选择管理系统设计与实现

访客 技术 2026年6月19日 1

技术架构

后端采用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');

测试验证

系统通过黑盒测试验证功能完整性,重点测试用户认证、数据操作和权限控制模块。测试用例覆盖正常流程和异常场景,包括:

  • 有效/无效凭证登录测试
  • 必填字段校验
  • 重复数据插入检测
  • 角色权限访问控制
  • 会话超时处理

测试结果表明系统功能符合需求规格说明书要求,各模块逻辑正确,响应时间满足性能指标,能够稳定支持预期业务场景。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。