【JAVA 项目】JT后台管理开发文档

表设计

user表设计

字段名称 数据类型 是否为空 备注
id int N 用户编号,PK主键
username varchar(80) Y 用户名
password varchar(80) Y 登录密码 加密之后的密文 加密API
phone varchar(20) Y 手机号
email varchar(40) Y 邮箱
status tinyint Y 0-1 布尔类型值 0-false 1-true 启用还是禁用
created datetime Y 创建时间 每张表里需要单独定义 可以进行封装优化
updated datetime Y 修改时间 每张表里需要单独定义 可以进行封装优化

【JAVA 项目】JT后台管理开发文档


用户登陆操作

用户登陆业务实现流程

  • 步骤1: 用户输入完用户名和密码之后,点击登录按钮

  • 步骤2: 准备username/password数据,向后台服务器发送请求,请求类型: post类型

  • 步骤3: 后台服务器接收用户的请求参数 username/password

  • 步骤4: 根据用户名和密码查询数据库
    结果: 有数据 用户名和密码正确 | 没有结果 用户名和密码错误

  • 步骤5: 后端服务器应该返回一个业务回执 标识业务逻辑是否正确执行
    假设: status 200 正确, 201 表示失败

  • 步骤6: 前端服务器根据用户的200/201 提示用户操作成功/操作失败.

用户登录验证接口

说明:一般做前后端交互时,必须有业务接口文档。 文档中详细阐述了 业务需求 / url地址 /参数 / 返回值信息 等要素。

前后端严格按照业务接口文档进行编码。

  • 请求路径: /user/login
  • 请求方式: POST
  • 请求参数
参数名称 参数说明 备注
username 用户名 不能为空
password 密码 不能为空
  • 响应数据 SysResult对象
参数名称 参数说明 备注
status 状态信息 200表示服务器请求成功 201表示服务器异常
msg 服务器返回的提示信息 可以为null
data 服务器返回的业务数据 返回密钥token信息

返回值格式如下:

{"status":200,"msg":"服务器调用成功!","data":"1e893a97634847b3a8b499b173bea620"}

前端

后端

创建BasePojo 类

创建包: com.jt.pojo
创建类: BasePojo .java

//pojo基类,完成2个任务,2个日期,实现序列化
@Data
@Accessors(chain=true)
public class BasePojo implements Serializable{
	@TableField(fill = FieldFill.INSERT)
	private Date created;	//表示入库时需要赋值
	@TableField(fill = FieldFill.INSERT_UPDATE)
	private Date updated;	//表示入库/更新时赋值.
}

创建User类

创建包: com.jt.pojo
创建类: User.java

@Data //动态生成get/set方法
@TableName("user") //对象与表一一对应
@Accessors(chain = true) //链式加载结构
public class User extends BasePojo{
    @TableId(type = IdType.AUTO)//ID主键自增
    private Integer id;
    private String username;
    private String password;
    private String phone;
    private String email;
    private Boolean status;
    @TableField(exist = false)  //该属性在表中不存在
    private Role role;  //定义role角色数据
}

创建SysResult类(系统返回值)

关于SysResult对象的说明: 该对象用来实现后端与前端业务的交互
业务执行正确 status=200 业务执行错误 status=201
概念: 前后端交互的层级 定义为 VO层
【JAVA 项目】JT后台管理开发文档

创建包: com.jt.vo
创建类: User.java

//作用: 实现前后端交互
@Data
@Accessors(chain = true)
@NoArgsConstructor  //无参构造
@AllArgsConstructor //全参构造
public class SysResult implements Serializable { //规范的写法
    private Integer status;  //状态码  200 201
    private String msg;      //服务器返回的提示信息
    private Object data;     //服务器返回的业务数据

    //重载:  方法名称相同,参数不同
    //为了用户使用VO对象 更加的方便 重载一些方法 简化程序的调用
    public static SysResult fail(){
        return new SysResult(201, "业务执行失败",null);
    }
    
    //1.不带参数的正确返回
    public static SysResult success(){
        return new SysResult(200, "服务器处理成功", null);
    }

    //2.带返回值的正确返回  用户传递什么/返回值就是什么
    public static SysResult success(Object data){
        return new SysResult(200, "服务器处理成功", data);
    }

    //3.带返回值,携带提示信息
    public static SysResult success(String msg,Object data){
        return new SysResult(200, msg,data);
    }

}

编辑UserController类

业务要求: 完成用户信息校验,并且返回特定的token数据

 /**
     * 业务需求:用户登陆校验
     * 类型:POST
     * URL: /user/login
     * 参数: username/password json串 {username: "xxx", password: "xxx"}
     * 返回值: SysResult对象  data的String类型的信息 token
     * 用户名/密码 admin123/admin123456
     */
    @PostMapping("/login")
    public SysResult login(@RequestBody User user){
        //1.根据用户名和密码校验 返回token Service层中完成
        String token = userService.login(user);
        //2. token 有值业务正确   | null 业务操作失败
        if(token == null){
            return SysResult.fail();
        }
        return SysResult.success(token);
    }

编辑UserServiceImpl实现类

/**
     * 需求:
     *      1.根据用户名和密码查询数据库
     *      2.将密码进行加密处理 md5加密方式
     *      3.如果用户名和密码正确 返回token
     *      4 UUID: 每次生成的UUID几乎不重复.   重复概率 2^128/1
     *        b809cd3e-f4fa-11eb-b396-52152e05da50
     * @param user  作用: 在未来生成API文档时 有效果 一般都是默认的
     * @return
     */
    @Override
    public String login(User user) {
        //1.将密码进行加密的处理
        String password = user.getPassword(); //明文
        //2. 将字符串 转化为字节数组
        byte[] passByte = password.getBytes();
        //将明文加密
        String md5Pass = DigestUtils.md5DigestAsHex(passByte);
        //3. 根据用户名和密文查询数据库
        //Sql: select * from user where uname="xxx" and ps="xx"
        //根据对象中不为null的属性充当where条件!!!!
        user.setPassword(md5Pass);
        QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
        //从数据库中获取结果
        User userDB = userMapper.selectOne(queryWrapper);
        
        if(userDB == null){ //用户名和密码错误 返回null
            return null;    //业务流程结束
        }
        
        //如果程序执行到这一行,则数据用户的输入正确的. 返回token
        String token = UUID.randomUUID().toString().replace("-","");
        return token;
    }


前端

后端

前端

后端

前端

后端

前端

后端

前端

后端

前端

后端

前端

后端

前端

后端

前端

后端

前端

后端

前端

后端

上一篇:idea 错误: 找不到或无法加载主类 com.jt.SpringBootRun


下一篇:12-京淘权限管理子系统(练一个)