# 软件工程课程设计-指标体系树管理系统 **Repository Path**: tilamisu-fff/TreeManagement ## Basic Information - **Project Name**: 软件工程课程设计-指标体系树管理系统 - **Description**: 软件工程课程设计-指标体系树管理系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 3 - **Created**: 2023-05-10 - **Last Updated**: 2026-02-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 系统概述 vue+springboot+mysql+redis 1. 在前端,使用vue-admin-template脚手架搭建项目,创建前端页面结构,并配置前端路由。 2. 前端页面通过Axios库发送HTTP请求到后端API接口,请求的URL包括后端的IP地址或域名、端口号和具体的API路径。 3. 在后端,根据URL和请求方法匹配对应的Controller和方法进行处理。 4. 后端Controller调用Service层处理业务逻辑,包括使用MyBatis-Plus进行数据库操作和使用Redis进行缓存操作。 5. 后端处理完请求后,将结果封装成JSON格式的数据返回给前端。 6. 前端接收后端返回的数据,并根据业务需求进行页面的渲染和展示。 7. 整个过程通过HTTP协议进行通信,实现了前后端的数据交互和页面展示。 1. **前端页面结构**: - vue-admin-template脚手架提供了一个现成的项目结构和布局,包括侧边栏、导航栏等组件,以及多个页面组件。 - 我们根据业务需要,对这些组件进行了修改和扩展,也创建了新的页面组件 2. **路由配置**: - 在vue-admin-template中,需要在`src/router`目录下的`index.js`文件中配置前端路由。 - 路由配置决定了URL与前端页面的映射关系,以及每个URL对应的组件。 3. **HTTP请求发送**: - vue-admin-template通常使用Axios库来发送HTTP请求。可以在`src/utils/request.js`文件中配置Axios实例,设置请求拦截器和响应拦截器,以及处理请求的一些公共逻辑。 - 在前端页面的组件中,可以使用Axios库发送HTTP请求到后端API接口。 4. **后端API接口定义**: - 在Spring Boot项目中,需要定义API接口和相应的Controller来处理前端发送的请求。 - 通过在Controller的方法上使用注解(如@GetMapping、@PostMapping等)来标识API接口和请求方法,并编写相应的业务逻辑。 5. **跨域请求**: - 如果前端和后端不在同一个域名下,可能会遇到跨域请求的问题。 - 在Spring Boot项目中,可以通过配置跨域请求的过滤器或拦截器,允许来自不同域名的请求访问后端API接口。 6. **数据交互**: - 前端通过Axios库发送HTTP请求到后端API接口,后端处理请求并进行相应的业务逻辑和数据操作。 - 在后端,可以使用MyBatis-Plus操作数据库进行数据的增删改查,使用Redis进行缓存操作。 - 处理完请求后,后端将处理结果封装成JSON格式的数据返回给前端。 7. **前端页面展示**: - 前端接收后端返回的数据,并根据业务需求进行页面的渲染和展示。 - 在前端页面中使用了Element UI组件库来构建和美化界面。 # 路由配置 1. **路由配置文件**:路由配置文件位于`src/router`目录下的`index.js`文件。可以在该文件中定义前端路由,并指定每个路由对应的组件和URL路径。 2. **HTTP请求配置文件**:HTTP请求配置文件位于`src/utils/request.js`文件中。可以在该文件中配置Axios实例,并设置请求拦截器和响应拦截器。在Axios实例的配置中,可以指定默认的请求URL、请求方法、请求头等信息。 3. **环境配置文件**:环境配置文件位于`.env.`文件中,根据开发环境和生产环境进行配置。可以在这些文件中设置后端IP地址和端口号,以及其他环境相关的配置。 4. **组件中的请求URL**:在组件中使用Axios发送请求时,可以直接指定请求的URL路径,可以是相对路径或绝对路径。通常,可以在组件的`methods`中使用Axios发送请求,并在请求的URL中拼接具体的API路径,我们采取在`src/api`目录下定义API请求的方法,在`methods`中调用,使代码逻辑更加清晰。 # 拦截器 1. **请求拦截器**: - 修改请求配置:请求拦截器可以在发送请求之前对请求的配置进行修改,例如添加请求头、设置请求超时时间等。 - 鉴权和认证:请求拦截器可以在发送请求之前进行鉴权和认证,例如添加身份验证的 Token。 - 请求参数处理:请求拦截器可以对请求参数进行处理,例如对请求数据进行加密、序列化等。 - 统一错误处理:请求拦截器可以捕获请求发生的错误,并进行统一的错误处理,例如重定向到错误页面、提示用户等。 2. **响应拦截器**: - 统一数据处理:响应拦截器可以对接收到的响应数据进行统一处理,例如解析响应数据、格式化数据等。 - 错误处理:响应拦截器可以捕获服务器返回的错误信息,并进行统一的错误处理,例如显示错误提示、重新登录等。 - 统一状态码处理:响应拦截器可以对服务器返回的状态码进行统一处理,例如根据状态码进行页面跳转、权限验证等。 - 响应数据过滤:响应拦截器可以过滤或修改服务器返回的响应数据,以满足前端的需求。 # Redis缓存 使用 Redis 进行缓存有以下几个主要原因: 1. **提高性能**:Redis 是一个内存数据库,相比于传统的磁盘数据库,它具有非常高的读写速度。将经常使用的数据缓存到 Redis 中可以大大提高数据访问的速度,减轻数据库的压力,从而提高整体系统的性能和响应速度。 2. **降低数据库负载**:数据库是系统中最常遇到的瓶颈之一。通过使用 Redis 缓存,可以将频繁访问的数据存储在内存中,减少对数据库的直接访问,从而降低数据库的负载。这对于高并发的应用程序尤为重要,可以有效地减少数据库的压力,提高系统的承载能力。 3. **减少网络开销**:相对于从数据库中获取数据,从 Redis 中获取数据的网络开销更小。Redis 是内存数据库,通常部署在应用程序所在的服务器上,与应用程序之间的网络延迟较低。因此,通过缓存热门数据,可以减少从远程数据库获取数据的网络开销,提高数据的访问速度。 4. **实现数据共享**:Redis 支持分布式部署和数据复制,可以将缓存数据存储在多个节点中,实现数据的共享和高可用性。这对于分布式系统和多节点部署的应用程序非常有用,可以确保各个节点之间的数据一致性,并提供容错和故障恢复的机制。 5. **提供丰富的功能**:Redis 不仅仅是一个简单的缓存工具,它还提供了丰富的功能和数据结构,如字符串、列表、哈希表、集合、有序集合等。这些功能可以支持更复杂的应用场景,如发布/订阅、计数器、排行榜、消息队列等,为应用程序开发带来更多的灵活性和功能扩展性。 综上所述,使用 Redis 进行缓存可以提高系统性能、减轻数据库负载、降低网络开销,并提供丰富的功能和数据共享的能力,是构建高效、可扩展和可靠的应用程序的重要组成部分。 # 密码加密存储 Spring Security 中的 `PasswordEncoder` 接口是用于密码编码和密码验证的。它的主要目的是对用户密码进行安全处理,避免以明文方式存储密码,提高系统的安全性。 `PasswordEncoder` 接口定义了两个主要的方法: 1. `encode(CharSequence rawPassword)`:用于将原始密码进行编码,返回编码后的密码字符串。这个方法在用户注册或密码修改时使用。编码后的密码通常包含了加密算法所需的盐值等信息,以提高密码的安全性。 2. `matches(CharSequence rawPassword, String encodedPassword)`:用于验证原始密码和已编码密码是否匹配。这个方法在用户登录时使用。它会将用户输入的密码进行编码,并与数据库中存储的已编码密码进行比较,以验证密码的正确性。 Spring Security 提供了多种实现 `PasswordEncoder` 接口的实现类,常用的有以下几种: 1. `BCryptPasswordEncoder`:使用 BCrypt 算法对密码进行编码和验证。BCrypt 是一种密码哈希函数,它采用逐渐增加的计算成本,以防止暴力破解攻击。 2. `PasswordEncoderFactories.createDelegatingPasswordEncoder()`:这是一个工厂方法,用于创建一个委派密码编码器。根据编码后的密码的前缀选择相应的密码编码器进行编码和验证。支持的前缀包括 `{bcrypt}`、`{noop}`、`{pbkdf2}` 等。 3. 其他实现类:还有一些其他的密码编码器实现类,如 `StandardPasswordEncoder`、`MessageDigestPasswordEncoder` 等,可以根据具体需求选择合适的实现类。 使用 `PasswordEncoder` 接口及其实现类,可以在 Spring Security 中进行密码的安全编码和验证,保护用户密码的安全性。在应用程序中,通常在用户注册、密码修改、用户登录等场景下使用密码编码器来处理用户密码。