一、登录逻辑分析
登录的身份分为管理员和商家,管理员可以管理用户等信息,而商家只能管理自己的相关信息,如商品信息等。要实现不同的身份登录,使用简单工厂模式实现。简单工厂模式参考文章设计模式 | 简单工厂模式及典型应用 - 知乎 (zhihu.com)进行介绍学习。本项目中创建一个后端登录接口AdminLoginService.java,让管理员EmployeeService和商家MerchandiserService分别继承接口,对其中的方法分别进行实现。如下图所示:
图1-1 登录之简单工厂模式
Controller层接收前端发的请求,通过调用Service的方法,识别不同的身份,返回不同的数据,实现登录操作。
二、具体实现之基础准备
1、后台登录模型 LoginReq.java
@Getter
@Setter
@ApiModel(value = "后台登录模型")
public class LoginReq {
@NotBlank(message = "账号不能为空")
@ApiModelProperty(value = "账号",required = true)
private String account;
@NotBlank(message = "密码不能为空")
@ApiModelProperty(value = "密码",required = true)
private String password;
@NotBlank(message = "验证码不能为空")
@ApiModelProperty(value = "验证码",required = true)
private String code;
@NotBlank(message = "验证码令牌不能为空")
@ApiModelProperty(value = "验证码令牌",required = true)
private String uuid;
@NotBlank(message = "账号类型不能为空")
@ApiModelProperty(value = "账号类型(admin管理员,merchandiser商家)",required = true)
private String type;
}
2、后台登录响应模型 AdminLoginResp.java
@Getter
@Setter
@ApiModel(value = "后台登录响应模型")
public class AdminLoginResp {
@ApiModelProperty(value = "主键")
private Long id;
@ApiModelProperty(value = "用户名")
private String name;
@ApiModelProperty(value = "头像")
private String avatar;
@ApiModelProperty(value = "权限(admin管理员,merchandiser商家)")
private List<String> permissions;
@ApiModelProperty(value = "令牌")
private String uuid;
@ApiModelProperty(value = "令牌过期时间")
private Date expired;
@ApiModelProperty(value = "是否超级管理员")
private Long root;
/**
* 是否是管理员 Jso