公告

记录一下自己学习和生活中的所见所闻

Skip to content

用户中心项目总结

总结一些项目中学到的业务逻辑等知识

image.png

这里就一个用户表

注册功能逻辑

  1. 用户在前端输入账户和密码、以及校验码(todo)​
  2. 校验用户的账户、密码、校验密码是否符合要求 ​
    • 账户不小于 4 位(自己扩展校验)​
    • 密码不小于 8 位​
    • 账户不能重复​
    • 账户不包含特殊字符​
    • 密码和校验密码相同​
  3. 对密码进行加密(千万不能明文存储到数据库中)​
  4. 向数据库插入用户数据

返回值 boolean 或者 long

校验逻辑使用第三方库 commons-lang3 或者hutools等 这样直接调用,写起来方便

登录功能逻辑

登录接口​

  1. 接收参数:用户账户、密码​
  2. 请求类型:POST​

    请求参数很长时不建议用 GET​

  3. 请求体:JSON格式的数据​
  4. 返回值:用户信息(脱敏

逻辑

  1. 校验用户账户和密码是否合法 ​
    • 非空​
    • 账户不小于 4 位​
    • 密码不小于 8 位​
    • 账户不包含特殊字符​
  2. 校验密码是否输入正确,要和数据库中的密文密码对比
  3. 用户脱敏,隐藏敏感信息,防止数据库中的字段泄露​
  4. 我们要记录用户的登录态(session),将其存到服务器上(用后端SpringBoot框架封装的服务器tomcat去记录) ​
    • cookie​
  5. 返回安全的脱敏后的用户信息

采用逻辑删除

yml
mybatis-plus:​
  global-config:​
    db-config:​
      logic-delete-field: isDelete # 全局逻辑删除字段名​
      logic-delete-value: 1 # 逻辑已删除值​
      logic-not-delete-value: 0 # 逻辑未删除值

User.Java中添加逻辑删除字段

java
import com.baomidou.mybatisplus.annotation.TableLogic;​

public class User {​
    // 其他字段...​

    @TableLogic
    private Integer isDelete;​
}

登录态管理

Cookie 和 Session

  1. 连接服务器端后,得到一个 session 状态(匿名会话),返回给前端​
  2. 登陆成功后,得到了登陆成功的 session ,并且给该 session 设置一些值(比如用户信息),返回给前端一个设置 cookie 的“命令” ​
    • session ⇒ cookie​
  3. 前端接收到后端的命令后,设置 cookie ,保存到浏览器内​
  4. 前端再次请求后端的时候(相同的域名),在请求头中带上 cookie去请求​
  5. 后端拿到前端传来的 cookie ,找到对应的 session​
  6. 后端从 session 中可以取出基于该 session 存储的变量(用户的登陆信息、登录名)

:::details那么我们要用什么呢? UserService 与 UserServiceImpl 中添加 HttpServletRequest request 也就是使用request请求 :::

Java
// 4. 记录用户的登录态  
request.getSession().setAttribute(USER_LOGIN_STATE, safetyUser);
Java
/**  
* 用户登录态键  
*/  
String USER_LOGIN_STATE = "userLoginState";

登录态是一个常量,这里就是要记录一下

封装request请求

封装专门用来接收请求参数的对象 model.domain 包建立一个 request 包,新建 UserRegisterRequest.java 类

为什么要这么做呢

controller层倾向于请求参数本身的校验,最好不要涉及到业务逻辑本身 业务逻辑主要写在service层

用户管理功能

其实就是对用户进行增删改查

  1. 查询用户​
    • 允许根据用户名查询​
  2. 删除用户

用户注销功能

需要返回什么参数?​

查看登录时的逻辑,用户登陆成功,session 中保存了用户的登录态,反之,注销,移除登录态即可

用户校验

仅适用于用户可信的情况​

先让用户自己填:2-5 位星球编号​

  • 后台补充对编号的校验​
    • 长度校验​
    • 唯一性校验​
  • 前端补充输入框,适配后端​ ​

后期拉取星球数据,定期清理违规用

后端代码优化

通用反馈对象

image.png

将之前所有的请求使用 BaseResponse 封装一下

自定义异常及错误代码

common 包下新建 ErrorCode.java

全局异常处理器

image.png

部署

用户中心项目部署上线