From 82c6ea2d32d24f3a474bfbda214247eac02722c5 Mon Sep 17 00:00:00 2001 From: Unique-Jerry <10902054+unique-jerry@user.noreply.gitee.com> Date: Mon, 23 Oct 2023 20:55:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B2=E6=9F=93=E9=A2=98=E7=9B=AE=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AiInterviewer/config/UserInterceptor.java | 2 + .../controller/UserController.java | 12 +++ .../yzdx/AiInterviewer/entity/BlackToken.java | 21 ++++ .../yzdx/AiInterviewer/entity/Employee.java | 50 ---------- .../com/yzdx/AiInterviewer/entity/User.java | 2 + ...loyeeMapper.java => BlackTokenMapper.java} | 7 +- .../service/BlackTokenService.java | 15 +++ .../AiInterviewer/service/UserService.java | 16 +++- .../service/impl/BlackTokenServiceImpl.java | 30 ++++++ .../service/impl/UserServiceImpl.java | 95 ++++++++++--------- .../yzdx/AiInterviewer/utiles/TimeUtil.java | 13 +++ 11 files changed, 163 insertions(+), 100 deletions(-) create mode 100644 src/main/java/com/yzdx/AiInterviewer/entity/BlackToken.java delete mode 100644 src/main/java/com/yzdx/AiInterviewer/entity/Employee.java rename src/main/java/com/yzdx/AiInterviewer/mapper/{EmployeeMapper.java => BlackTokenMapper.java} (56%) create mode 100644 src/main/java/com/yzdx/AiInterviewer/service/BlackTokenService.java create mode 100644 src/main/java/com/yzdx/AiInterviewer/service/impl/BlackTokenServiceImpl.java diff --git a/src/main/java/com/yzdx/AiInterviewer/config/UserInterceptor.java b/src/main/java/com/yzdx/AiInterviewer/config/UserInterceptor.java index 61805c9..c6b1a48 100644 --- a/src/main/java/com/yzdx/AiInterviewer/config/UserInterceptor.java +++ b/src/main/java/com/yzdx/AiInterviewer/config/UserInterceptor.java @@ -19,6 +19,8 @@ import java.util.Map; * @CreateTime: 2022/3/24 */ public class UserInterceptor implements HandlerInterceptor { + + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Map map = new HashMap<>(); diff --git a/src/main/java/com/yzdx/AiInterviewer/controller/UserController.java b/src/main/java/com/yzdx/AiInterviewer/controller/UserController.java index 4aa53a2..3d67032 100644 --- a/src/main/java/com/yzdx/AiInterviewer/controller/UserController.java +++ b/src/main/java/com/yzdx/AiInterviewer/controller/UserController.java @@ -57,5 +57,17 @@ public class UserController { return R.success(user); } + @GetMapping("/logout") + public R adminLogout(@ApiParam("token值") String token){ + + Integer row = userService.adminLogout(token); + + if(row==0){ + return R.error("登出失败,请联系管理员!"); + } + + return R.success("退出成功!"); + + } } diff --git a/src/main/java/com/yzdx/AiInterviewer/entity/BlackToken.java b/src/main/java/com/yzdx/AiInterviewer/entity/BlackToken.java new file mode 100644 index 0000000..99edad1 --- /dev/null +++ b/src/main/java/com/yzdx/AiInterviewer/entity/BlackToken.java @@ -0,0 +1,21 @@ +package com.yzdx.AiInterviewer.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@TableName("black_token") +public class BlackToken { + @ApiModelProperty("token黑名单id") + @TableId(type = IdType.AUTO) + private Integer id; + @ApiModelProperty("用户ID") + private Integer userId; + @ApiModelProperty("token的值") + private String value; + @ApiModelProperty("创建时间") + private String createTime; +} diff --git a/src/main/java/com/yzdx/AiInterviewer/entity/Employee.java b/src/main/java/com/yzdx/AiInterviewer/entity/Employee.java deleted file mode 100644 index afdf087..0000000 --- a/src/main/java/com/yzdx/AiInterviewer/entity/Employee.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.yzdx.AiInterviewer.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -@Data -public class Employee { - @ApiModelProperty("用户id") - @TableId(type = IdType.AUTO) - private Integer id; - @ApiModelProperty("姓名") - private String name; - @ApiModelProperty("手机号码") - private String phone; - @ApiModelProperty("电子邮箱") - private String email; - @ApiModelProperty("住址") - private String address; - @ApiModelProperty("入职日期") - private Date onboardDate; - @ApiModelProperty("部门id") - private Integer departmentId; - @ApiModelProperty("公司编码") - private Integer companyEncoding; - @ApiModelProperty("职位") - private String position; - @ApiModelProperty("上级id") - private Integer superior; - @ApiModelProperty("工资") - private Double salary; - @ApiModelProperty("绩效评分") - private Double performanceScore; - @ApiModelProperty("教育背景") - private String educationalBackground; - @ApiModelProperty("工作经历") - private String workExperience; - @ApiModelProperty("性别") - private String sex; - @ApiModelProperty("年龄") - private String age; - @ApiModelProperty("员工证件照") - private String avatar; - @ApiModelProperty("员工状态,0离职,1在任") - private Integer status; - -} diff --git a/src/main/java/com/yzdx/AiInterviewer/entity/User.java b/src/main/java/com/yzdx/AiInterviewer/entity/User.java index 9a2e06d..bfbe906 100644 --- a/src/main/java/com/yzdx/AiInterviewer/entity/User.java +++ b/src/main/java/com/yzdx/AiInterviewer/entity/User.java @@ -32,4 +32,6 @@ public class User extends BaseEntity{ private String avatar; @ApiModelProperty("电子邮箱") private String email; + @ApiModelProperty("所在公司的编号") + private String companyEncoding; } diff --git a/src/main/java/com/yzdx/AiInterviewer/mapper/EmployeeMapper.java b/src/main/java/com/yzdx/AiInterviewer/mapper/BlackTokenMapper.java similarity index 56% rename from src/main/java/com/yzdx/AiInterviewer/mapper/EmployeeMapper.java rename to src/main/java/com/yzdx/AiInterviewer/mapper/BlackTokenMapper.java index e15f479..9417924 100644 --- a/src/main/java/com/yzdx/AiInterviewer/mapper/EmployeeMapper.java +++ b/src/main/java/com/yzdx/AiInterviewer/mapper/BlackTokenMapper.java @@ -1,9 +1,12 @@ package com.yzdx.AiInterviewer.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yzdx.AiInterviewer.entity.Employee; +import com.yzdx.AiInterviewer.entity.BlackToken; import org.apache.ibatis.annotations.Mapper; + @Mapper -public interface EmployeeMapper extends BaseMapper { +public interface BlackTokenMapper extends BaseMapper { + + } diff --git a/src/main/java/com/yzdx/AiInterviewer/service/BlackTokenService.java b/src/main/java/com/yzdx/AiInterviewer/service/BlackTokenService.java new file mode 100644 index 0000000..0244f22 --- /dev/null +++ b/src/main/java/com/yzdx/AiInterviewer/service/BlackTokenService.java @@ -0,0 +1,15 @@ +package com.yzdx.AiInterviewer.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yzdx.AiInterviewer.entity.BlackToken; + +public interface BlackTokenService extends IService { + + /** + * 判断token是否在黑名单里面 + * @param token 输入的token + * @return true:为黑名单token + * */ + boolean isBlackToken(String token); + +} diff --git a/src/main/java/com/yzdx/AiInterviewer/service/UserService.java b/src/main/java/com/yzdx/AiInterviewer/service/UserService.java index c8393cf..5e3c7c6 100644 --- a/src/main/java/com/yzdx/AiInterviewer/service/UserService.java +++ b/src/main/java/com/yzdx/AiInterviewer/service/UserService.java @@ -8,13 +8,27 @@ import com.yzdx.AiInterviewer.entity.User; public interface UserService extends IService { /** 管理员登录业务 - * @param phone,encoding,password + * @param phone 输入的账号 + * @param encoding 输入的公司编码 + * @param password 输入的密码 * @return boolean,ture登陆成功,false:登陆失败 * */ R adminLogin(String phone, String encoding, String password); + /** + * 根据用户id查询用户信息 + * @param userid 前端穿过来的用户id + * @return 根据id查询到的user对象 + * */ User getUserById(Integer userid); + /** + * 管理员登出 + * @param token 用户登录时返回的token + * @return 1成功,0失败 + * + * */ + Integer adminLogout(String token); } diff --git a/src/main/java/com/yzdx/AiInterviewer/service/impl/BlackTokenServiceImpl.java b/src/main/java/com/yzdx/AiInterviewer/service/impl/BlackTokenServiceImpl.java new file mode 100644 index 0000000..12cb5ce --- /dev/null +++ b/src/main/java/com/yzdx/AiInterviewer/service/impl/BlackTokenServiceImpl.java @@ -0,0 +1,30 @@ +package com.yzdx.AiInterviewer.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yzdx.AiInterviewer.entity.BlackToken; +import com.yzdx.AiInterviewer.mapper.BlackTokenMapper; +import com.yzdx.AiInterviewer.service.BlackTokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class BlackTokenServiceImpl extends ServiceImpl implements BlackTokenService { + + @Autowired + private BlackTokenMapper blackTokenMapper; + + @Override + public boolean isBlackToken(String token) { + LambdaQueryWrapper queryWrapper=new LambdaQueryWrapper<>(); + + queryWrapper.eq(BlackToken::getValue,token); + + BlackToken selectOne = blackTokenMapper.selectOne(queryWrapper); + + if(selectOne!=null){ + return true; + } + return false; + } +} diff --git a/src/main/java/com/yzdx/AiInterviewer/service/impl/UserServiceImpl.java b/src/main/java/com/yzdx/AiInterviewer/service/impl/UserServiceImpl.java index c91d4f5..b6ec13c 100644 --- a/src/main/java/com/yzdx/AiInterviewer/service/impl/UserServiceImpl.java +++ b/src/main/java/com/yzdx/AiInterviewer/service/impl/UserServiceImpl.java @@ -3,15 +3,14 @@ package com.yzdx.AiInterviewer.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yzdx.AiInterviewer.comment.R; -import com.yzdx.AiInterviewer.entity.Company; -import com.yzdx.AiInterviewer.entity.Employee; +import com.yzdx.AiInterviewer.entity.BlackToken; import com.yzdx.AiInterviewer.entity.User; -import com.yzdx.AiInterviewer.mapper.CompanyMapper; -import com.yzdx.AiInterviewer.mapper.EmployeeMapper; +import com.yzdx.AiInterviewer.mapper.BlackTokenMapper; import com.yzdx.AiInterviewer.mapper.UserMapper; import com.yzdx.AiInterviewer.service.UserService; import com.yzdx.AiInterviewer.utiles.JWT; import com.yzdx.AiInterviewer.utiles.MD5Util; +import com.yzdx.AiInterviewer.utiles.TimeUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,71 +22,45 @@ public class UserServiceImpl extends ServiceImpl implements Us @Autowired private UserMapper userMapper; - @Autowired - private CompanyMapper companyMapper; + private BlackTokenMapper blackTokenMapper; - @Autowired - private EmployeeMapper employeeMapper; @Override public R adminLogin(String phone, String encoding, String password) { + //判断账号和密码是否正确 + LambdaQueryWrapper userLambdaQueryWrapper=new LambdaQueryWrapper<>(); - //判断员工是否在该公司 - LambdaQueryWrapper queryWrapper2=new LambdaQueryWrapper<>(); - queryWrapper2.eq(Employee::getPhone,phone).eq(Employee::getCompanyEncoding,encoding); - Employee findEmployee=employeeMapper.selectOne(queryWrapper2); + userLambdaQueryWrapper.eq(User::getPhone,phone).eq(User::getCompanyEncoding,encoding); - if(findEmployee==null ||findEmployee.getStatus()==0){ + User selectUser = userMapper.selectOne(userLambdaQueryWrapper); - return R.error("输入的账号或密码错误"); + if(selectUser==null){ + return R.error("账号或密码有误,请检查输入!"); } + String salt=selectUser.getSalt(); + String selectPassword=selectUser.getPassword(); - LambdaQueryWrapper queryWrapper=new LambdaQueryWrapper(); + password = MD5Util.GetMD5Password(password, salt); - queryWrapper.eq(User::getPhone,phone); + if(!password.equals(selectPassword)){ - User user = userMapper.selectOne(queryWrapper); + return R.error("账号或密码有误,请检查输入!"); + } - //若查询用户为空 - if(user==null){ - return R.error("账号不存在,请检查输入"); + if(selectUser.getRole().equals("3")||selectUser.getRole().equals("4")){ + return R.error("账号权限不足,请联系管理员"); } - if (user.getRole().equals("3") || user.getRole().equals("4")) { - return R.error("输入的账号或密码错误"); - } - //查询的用户存在,检查密码是否正确 - String salt=user.getSalt(); - - String findPassword=user.getPassword(); - - password= MD5Util.GetMD5Password(password,salt); - - if(!findPassword.equals(password)){ - return R.error("输入的账号或密码错误"); - } - - //密码和账户都输入正确,检查公司编码是否正确 - LambdaQueryWrapper queryWrapper1=new LambdaQueryWrapper(); - - queryWrapper1.eq(Company::getEncoding,encoding); - - Company findCompany= companyMapper.selectOne(queryWrapper1); - - if(findCompany==null){ - - return R.error("输入的公司编码有误,请检查输入"); - } - //均正确,返回token密钥 - String token=JWT.getJWToken(user.getId()); + String token=JWT.getJWToken(selectUser.getId()); Map data=new HashMap<>(); data.put("token",token); data.put("encoding",encoding); + data.put("userInfo",selectUser); return R.success(data); } @@ -99,5 +72,33 @@ public class UserServiceImpl extends ServiceImpl implements Us return userMapper.selectOne(queryWrapper); } + @Override + public Integer adminLogout(String token) { + //判断token的正确性 + boolean verify = JWT.verify(token); + if(!verify){ + //若不正确返回0 + return 0; + } + //正确的话,将token存入黑名单里面 + + Integer userId = JWT.getTokenId(token); + + BlackToken blackToken=new BlackToken(); + + blackToken.setUserId(userId); + + blackToken.setValue(token); + + blackToken.setCreateTime(TimeUtil.getPreciseTime()); + + Integer rows=blackTokenMapper.insert(blackToken); + if(rows==0){ + return 0; + } + + return 1; + } + } diff --git a/src/main/java/com/yzdx/AiInterviewer/utiles/TimeUtil.java b/src/main/java/com/yzdx/AiInterviewer/utiles/TimeUtil.java index ae62d90..8f674da 100644 --- a/src/main/java/com/yzdx/AiInterviewer/utiles/TimeUtil.java +++ b/src/main/java/com/yzdx/AiInterviewer/utiles/TimeUtil.java @@ -14,5 +14,18 @@ public class TimeUtil { return time; } + /** + * 获取精确时间 + * */ + public static String getPreciseTime(){ + Date now =new Date(); + + SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + String time = simpleDateFormat.format(now); + + return time; + } + }