KnowledgeSpace-后端
操作说明
超级管理员
- 
一位
 - 
可注册用户(目前仅ROOT)
 - 
可修改用户为管理员
 - 
可创建任意用户的文件夹(请勿创建他人的根目录)
 - 
删除他人文件夹或文件
 - 
不可删除自身
 - 
管理员↓
 
管理员
- 可添加用户
 - 可修改用户信息(姓名,密码)
 - 可删除用户
 - 角色↓
 
用户
- 自身信息
- 可上传、删除头像
 - 可修改用户名,密码
 - 可重置密码
 - 可设置邮箱
 - 可删除自己
 
 - 文件夹
- 可创建文件夹
 - 可修改文件夹名
 - 可删除除根目录外的自身的文件夹
 
 - 文件
- 可创建md文档
 - 可上传文件(md,word,pdf)
 - 可修改文件名
 - 可修改文件内容(md,word)
 - 可删除自身的文件
 
 - 通用↓
 
通用
- 可分页查询用户
 - 可通过姓名查询(模糊匹配)
 - 可查看用户文件夹
 - 可查看文件内容(md,word)
 
数据库
报错
端口占用
问题: 使用IDEA运行Spring Boot项目时,提示端口被占用.Web server failed to start. Port 8000 was already in use.
解决方法 1.更换端口 在更换多个端口后,依然报错。
2.查看是什么占用的端口
发现端口并没有被占用。
3.最终解决
除了端口确实被占用之外,还有一种可能就是端口属于系统保留端口,idea也会报端口被占用。
我们使用netsh interface ipv4 show excludedportrange protocol=tcp查看
我们发现我们之前使用的端口在7985~8084范围内。 知道原因后,我们有两个中解决方法: 一:选择这些端口范围之外的端口。 二:使用命令行修改动态端口的范围,使得这个保留端口的范围避开我们需要的端口范围。
原文链接:https://blog.csdn.net/zhengshuangyue/article/details/123181832
接口文档的配置
检查 Knife4j 配置
确保 Knife4j 配置正确,特别是在 Spring Boot 项目中,需要正确配置 Knife4j 的依赖和相关参数。
Maven 依赖配置示例:
xml复制代码<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.2</version>
</dependency>
Spring Boot 配置示例(application.yml)(如果下面的配置文件写了,这里可忽略):
knife4j:
  enable: true
  openapi:
    title: "Your API Documentation"
    version: 1.0
    contact:
      name: "Your Contact Name"
      email: "[email protected]"
      url: "https://yourwebsite.com"
    license:
      name: "Apache License 2.0"
      url: "https://www.apache.org/licenses/LICENSE-2.0.html"
确保配置中的参数正确,特别是 enabled: true 表示启用 Swagger UI。
- 
knife4j.enable: 启用 Knife4j。设置为true表示启用 Knife4j 功能,可以访问生成的 Swagger UI 页面查看 API 文档。 - 
knife4j.openapi.title: 设置 OpenAPI 文档的标题。此标题将显示在 Swagger UI 页面上,通常用来描述 API 文档的名称或项目名称。在这个例子中,标题被设置为 "Your API Documentation"。 - 
knife4j.openapi.version: 设置 OpenAPI 文档的版本号。此版本号将显示在 Swagger UI 页面上,帮助用户了解当前文档的版本。在这个例子中,版本号被设置为1.0。 - 
knife4j.openapi.contact: 设置联系人信息:
knife4j.openapi.contact.name: 设置 API 文档的联系人姓名。knife4j.openapi.contact.email: 设置 API 文档的联系人邮箱地址。knife4j.openapi.contact.url: 设置 API 文档的联系地址 URL,通常是相关项目或组织的网站链接。
 - 
knife4j.openapi.license: 设置许可证信息:
knife4j.openapi.license.name: 设置 API 文档的许可证名称,例如 Apache License 2.0。knife4j.openapi.license.url: 设置 API 文档的许可证 URL,通常是具体许可证条款的网址链接,供用户查阅详细信息。
 
在config文件夹里写Knife4jConfig配置文件
package com.happlay.ks.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2) // 使用 OAS 3.0 文档类型
                .apiInfo(new ApiInfoBuilder()
                            .title("接口文档")
                            .description("KnowledgeSpace")
                            .version("1.0")
                            .build())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.happlay.ks.controller")) // 与对应的Controller层一致
                .paths(PathSelectors.any())
                .build();
    }
}
创建工具类-common
工具类(Utility Class)是指那些包含一组静态方法或常量的类,这些方法或常量通常是与特定任务或一组相关任务相关联的。工具类不持有任何状态,不创建实例,提供的是一些通用功能,供其他类和组件调用。
工具类的特点
- 静态方法:工具类中的方法通常是静态的,因为它们不需要依赖类的实例来调用。
 - 不可实例化:通常通过私有构造函数(private constructor)来防止实例化。
 - 通用性强:提供通用、复用的功能,简化其他类的开发工作。
 
工具类的作用
- 代码复用:将通用的功能抽取到工具类中,避免代码重复,提高代码的复用性。
 - 代码清晰:将杂乱的工具性代码集中到工具类中,使得业务类的逻辑更加清晰。
 - 维护性高:集中管理通用功能,如果需要修改某个通用功能,只需要修改工具类中的方法。
 
DTO,VO,POJO

实现邮箱验证
为了使用谷歌的邮箱来发送邮件,你需要配置SMTP服务器,并确保你的应用可以通过Gmail的SMTP服务器发送邮件。以下是实现这个功能的完整流程,包括代码示例:
1. 添加依赖
确保在pom.xml中添加了spring-boot-starter-mail依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2. 配置邮件属性
在application.properties或application.yml中添加Gmail SMTP配置:
  spring:
  mail:
    host: smtp.163.com
    port: 587
    username: your-[email protected]
    password: your-email-password
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
            fallback: false
- spring.mail.host: smtp.gmail.com
- 指定邮件服务器的主机地址为 
smtp.gmail.com,这是用于发送邮件的Gmail SMTP服务器地址。 
 - 指定邮件服务器的主机地址为 
 - spring.mail.port: 587
- 设置邮件服务器的端口号为 
587,这是Gmail SMTP服务器的TLS加密连接端口。 
 - 设置邮件服务器的端口号为 
 - spring.mail.username: [email protected]
- 指定用于登录SMTP服务器的邮箱账号,这里替换为你的Gmail邮箱地址。
 
 - spring.mail.password: your-password
- 设置用于登录SMTP服务器的邮箱密码,这里替换为你的Gmail邮箱密码。这是敏感信息,应该保护好,避免直接暴露在公开的代码仓库中。
 
 - spring.mail.properties.mail.smtp.auth: true
- 配置SMTP认证机制为开启,确保可以使用指定的用户名和密码进行SMTP服务器的认证。
 
 - spring.mail.properties.mail.smtp.starttls.enable: true
- 开启STARTTLS支持,这是一种安全传输协议,用于在SMTP连接中启用TLS加密。
 
 - spring.mail.properties.mail.smtp.ssl.trust: smtp.gmail.com
- 配置SMTP服务器的SSL信任,指  定信任的SMTP服务器地址为 
smtp.gmail.com,确保与Gmail SMTP服务器建立安全连接。 
 - 配置SMTP服务器的SSL信任,指  定信任的SMTP服务器地址为 
 
3. 创建邮件服务类
创建一个服务类来处理邮件发送逻辑:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
@Service
public class EmailService {
    @Resource
    private JavaMailSender mailSender;
    public void sendVerificationCode(String fromEmail, String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(fromEmail);  // 直接设置完整的发件人邮箱地址
        message.setTo(to);
        message.setSubject(subject);
        message.setText(text);
        mailSender.send(message);
    }
}
