Przeglądaj źródła

修改密码,退出登录

lyhzzz 3 lat temu
rodzic
commit
19f13b1752

+ 14 - 8
src/main/java/com/cdf/business/LoginService.java

@@ -2,10 +2,7 @@ package com.cdf.business;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.cdf.entity.Dept;
-import com.cdf.entity.FdkkUser;
-import com.cdf.entity.Role;
-import com.cdf.entity.User;
+import com.cdf.entity.*;
 import com.cdf.exception.BusinessException;
 import com.cdf.exception.BusinessException;
 import com.cdf.httpClient.client.FdkkClient;
 import com.cdf.httpClient.client.FdkkClient;
 import com.cdf.httpClient.request.FdkkLoginRequest;
 import com.cdf.httpClient.request.FdkkLoginRequest;
@@ -13,10 +10,7 @@ import com.cdf.httpClient.response.FdkkResponse;
 import com.cdf.request.LoginRequest;
 import com.cdf.request.LoginRequest;
 import com.cdf.common.ResultCode;
 import com.cdf.common.ResultCode;
 import com.cdf.response.LoginResponse;
 import com.cdf.response.LoginResponse;
-import com.cdf.service.IDeptService;
-import com.cdf.service.IFdkkUserService;
-import com.cdf.service.IRoleService;
-import com.cdf.service.IUserService;
+import com.cdf.service.*;
 import com.cdf.util.Base64Converter;
 import com.cdf.util.Base64Converter;
 import com.cdf.util.JwtUtil;
 import com.cdf.util.JwtUtil;
 import com.cdf.util.SecurityUtil;
 import com.cdf.util.SecurityUtil;
@@ -42,6 +36,8 @@ public class LoginService {
     private IDeptService deptService;
     private IDeptService deptService;
     @Autowired
     @Autowired
     private IRoleService roleService;
     private IRoleService roleService;
+    @Autowired
+    private IUserTokenService userTokenService;
 
 
     public LoginResponse  login(LoginRequest param) {
     public LoginResponse  login(LoginRequest param) {
         //对前端传的密码解密
         //对前端传的密码解密
@@ -71,6 +67,12 @@ public class LoginService {
         jwtMap.put("phone",user.getPhone());
         jwtMap.put("phone",user.getPhone());
         String token = JwtUtil.createJWT(-1, jwtMap);
         String token = JwtUtil.createJWT(-1, jwtMap);
         loginResponse.setToken(token);
         loginResponse.setToken(token);
+
+        UserToken userToken = new UserToken();
+        userToken.setUserId(user.getId());
+        userToken.setLoginToken(token);
+        userTokenService.saveOrUpdate(userToken);
+
         if(fdkkuser.getToken() != null){
         if(fdkkuser.getToken() != null){
             FdkkResponse fdkkResponse = fdkkClient.checkToken(fdkkuser.getToken());
             FdkkResponse fdkkResponse = fdkkClient.checkToken(fdkkuser.getToken());
             if(fdkkResponse.getCode() == 0){
             if(fdkkResponse.getCode() == 0){
@@ -91,4 +93,8 @@ public class LoginService {
         return loginResponse;
         return loginResponse;
     }
     }
 
 
+    public void logout(String token) {
+        Integer userId = JwtUtil.getId(token);
+        userTokenService.removeById(userId);
+    }
 }
 }

+ 4 - 0
src/main/java/com/cdf/common/ResultCode.java

@@ -8,12 +8,16 @@ public enum ResultCode {
     USER_NOT_EXIST(2002,"用户不存在!"),
     USER_NOT_EXIST(2002,"用户不存在!"),
     FD_USER_NOT_EXIST(2003,"四维用户不存在!"),
     FD_USER_NOT_EXIST(2003,"四维用户不存在!"),
     PHONE_EXIST(2004,"手机号码已注册!"),
     PHONE_EXIST(2004,"手机号码已注册!"),
+    OTHER_LOGIN(2005,"登录信息失效请重新登录!"),
 
 
     NOT_FDKK_TOKEN(3001,"思维看看token不存在!"),
     NOT_FDKK_TOKEN(3001,"思维看看token不存在!"),
 
 
     NOT_RECORD(4001,"没有记录"),
     NOT_RECORD(4001,"没有记录"),
     PARAM_MISS(40002,"参数缺失!"),
     PARAM_MISS(40002,"参数缺失!"),
 
 
+    OLD_PASSWORD_ERROR(50001,"原密码错误!"),
+    OLD_NEW_PASSWORD_EQ(50002,"原密码与新密码一致无需更改!"),
+
     NOT_DELETE_PARENT_DEPT(6001,"集团总部不可删除"),
     NOT_DELETE_PARENT_DEPT(6001,"集团总部不可删除"),
     NOT_DELETE_DEPT(6002,"请先删除专柜下用户"),
     NOT_DELETE_DEPT(6002,"请先删除专柜下用户"),
 
 

+ 0 - 21
src/main/java/com/cdf/controller/TotalDataController.java

@@ -1,21 +0,0 @@
-package com.cdf.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author 
- * @since 2022-05-18
- */
-@RestController
-@RequestMapping("/totalData")
-public class TotalDataController {
-
-}
-

+ 7 - 4
src/main/java/com/cdf/controller/back/LoginController.java

@@ -4,10 +4,7 @@ import com.cdf.business.LoginService;
 import com.cdf.common.ResultData;
 import com.cdf.common.ResultData;
 import com.cdf.request.LoginRequest;
 import com.cdf.request.LoginRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 @RestController
 @RestController
 @RequestMapping("/back")
 @RequestMapping("/back")
@@ -20,4 +17,10 @@ public class LoginController {
     ResultData login(@RequestBody LoginRequest param){
     ResultData login(@RequestBody LoginRequest param){
         return ResultData.ok(loginService.login(param));
         return ResultData.ok(loginService.login(param));
     }
     }
+
+    @PostMapping("/logout")
+    ResultData logout(@RequestHeader String token){
+        loginService.logout(token);
+        return ResultData.ok();
+    }
 }
 }

+ 29 - 0
src/main/java/com/cdf/controller/back/SysUserController.java

@@ -9,10 +9,13 @@ import com.cdf.common.ResultData;
 import com.cdf.entity.User;
 import com.cdf.entity.User;
 import com.cdf.exception.BusinessException;
 import com.cdf.exception.BusinessException;
 import com.cdf.request.UserRequest;
 import com.cdf.request.UserRequest;
+import com.cdf.request.UserUpdateRequest;
 import com.cdf.response.UserVo;
 import com.cdf.response.UserVo;
 import com.cdf.service.IUserService;
 import com.cdf.service.IUserService;
 import com.cdf.util.Base64Converter;
 import com.cdf.util.Base64Converter;
+import com.cdf.util.JwtUtil;
 import com.cdf.util.SecurityUtil;
 import com.cdf.util.SecurityUtil;
+import jdk.nashorn.internal.parser.Token;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
@@ -80,6 +83,32 @@ public class SysUserController {
         return ResultData.ok();
         return ResultData.ok();
     }
     }
 
 
+    @PostMapping("/updatePassword")
+    @SysLog(logType = "系统用户",value = "修改密码")
+    public ResultData updatePassword(@RequestBody UserUpdateRequest param, @RequestHeader String token){
+        Integer userId = JwtUtil.getId(token);
+        User user = userService.getById(userId);
+        if(user == null){
+            throw new BusinessException(ResultCode.USER_NOT_EXIST);
+        }
+        if(StringUtils.isBlank(param.getNewPassword()) || StringUtils.isBlank(param.getOldPassword())){
+            throw new BusinessException(ResultCode.PARAM_MISS);
+        }
+        String oldP = Base64Converter.decode(Base64Converter.subText(param.getOldPassword()));
+        String oldPMd5 = SecurityUtil.MD52(oldP);
+        if(!user.getPassword().equals(oldPMd5)){
+            throw new BusinessException(ResultCode.OLD_PASSWORD_ERROR);
+        }
+        String password = Base64Converter.decode(Base64Converter.subText(param.getNewPassword()));
+        String passwordMd5 = SecurityUtil.MD52(password);
+        if(oldPMd5.equals(passwordMd5)){
+            throw new BusinessException(ResultCode.OLD_NEW_PASSWORD_EQ);
+        }
+        user.setPassword(passwordMd5);
+        userService.saveOrUpdate(user);
+        return ResultData.ok();
+    }
+
 
 
 }
 }
 
 

+ 40 - 0
src/main/java/com/cdf/entity/UserToken.java

@@ -0,0 +1,40 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-20
+ */
+@Getter
+@Setter
+@TableName("t_user_token")
+public class UserToken implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("user_id")
+    private Integer userId;
+
+    @TableField("login_token")
+    private String loginToken;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 1 - 1
src/main/java/com/cdf/generate/AutoGenerate.java

@@ -20,7 +20,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir") ;
         String path =System.getProperty("user.dir") ;
 
 
         generate(path,"", getTables(new String[]{
         generate(path,"", getTables(new String[]{
-                "t_total_data"
+                "t_user_token"
         }));
         }));
 
 
 //        generate(path,"goods", getTables(new String[]{
 //        generate(path,"goods", getTables(new String[]{

+ 21 - 0
src/main/java/com/cdf/interceptor/BackUserInterceptor.java

@@ -5,7 +5,9 @@ import cn.hutool.jwt.JWTUtil;
 import com.cdf.common.ResultCode;
 import com.cdf.common.ResultCode;
 import com.cdf.common.ResultData;
 import com.cdf.common.ResultData;
 import com.cdf.entity.User;
 import com.cdf.entity.User;
+import com.cdf.entity.UserToken;
 import com.cdf.service.IUserService;
 import com.cdf.service.IUserService;
+import com.cdf.service.IUserTokenService;
 import com.cdf.util.JwtUtil;
 import com.cdf.util.JwtUtil;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.LogFactory;
@@ -24,6 +26,8 @@ public class BackUserInterceptor implements HandlerInterceptor {
 
 
 	@Autowired
 	@Autowired
 	private IUserService userService;
 	private IUserService userService;
+	@Autowired
+	private IUserTokenService userTokenService;
 
 
 	@Override
 	@Override
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
@@ -37,6 +41,15 @@ public class BackUserInterceptor implements HandlerInterceptor {
 		try {
 		try {
 			Integer userId = JwtUtil.getId(token);
 			Integer userId = JwtUtil.getId(token);
 			User user = userService.getById(userId);
 			User user = userService.getById(userId);
+			UserToken userToken = userTokenService.getById(userId);
+			if(userToken == null ){
+				this.needLogin(request, response);
+				return  false;
+			}
+			if(!token.equals(userToken.getLoginToken())){
+				this.otherLogin(request, response);
+				return  false;
+			}
 			if(user == null ){
 			if(user == null ){
 				this.userNotExist(request, response);
 				this.userNotExist(request, response);
 				return  false;
 				return  false;
@@ -57,6 +70,14 @@ public class BackUserInterceptor implements HandlerInterceptor {
 			e.printStackTrace();
 			e.printStackTrace();
 		}
 		}
 	}
 	}
+	private void otherLogin(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			response.getWriter().append(ResultData.errorString(ResultCode.OTHER_LOGIN));
+		} catch (IOException e) {
+			log.info("LoginInterceptor|needLogin|IOException|" + e);
+			e.printStackTrace();
+		}
+	}
 	private void userNotExist(HttpServletRequest request, HttpServletResponse response) {
 	private void userNotExist(HttpServletRequest request, HttpServletResponse response) {
 		try {
 		try {
 			response.getWriter().append(ResultData.errorString(ResultCode.USER_NOT_EXIST));
 			response.getWriter().append(ResultData.errorString(ResultCode.USER_NOT_EXIST));

+ 18 - 0
src/main/java/com/cdf/mapper/IUserTokenMapper.java

@@ -0,0 +1,18 @@
+package com.cdf.mapper;
+
+import com.cdf.entity.UserToken;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-20
+ */
+@Mapper
+public interface IUserTokenMapper extends BaseMapper<UserToken> {
+
+}

+ 9 - 0
src/main/java/com/cdf/request/UserUpdateRequest.java

@@ -0,0 +1,9 @@
+package com.cdf.request;
+
+import lombok.Data;
+
+@Data
+public class UserUpdateRequest {
+    private String oldPassword;
+    private String newPassword;
+}

+ 16 - 0
src/main/java/com/cdf/service/IUserTokenService.java

@@ -0,0 +1,16 @@
+package com.cdf.service;
+
+import com.cdf.entity.UserToken;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-20
+ */
+public interface IUserTokenService extends IService<UserToken> {
+
+}

+ 20 - 0
src/main/java/com/cdf/service/impl/UserTokenServiceImpl.java

@@ -0,0 +1,20 @@
+package com.cdf.service.impl;
+
+import com.cdf.entity.UserToken;
+import com.cdf.mapper.IUserTokenMapper;
+import com.cdf.service.IUserTokenService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-20
+ */
+@Service
+public class UserTokenServiceImpl extends ServiceImpl<IUserTokenMapper, UserToken> implements IUserTokenService {
+
+}

+ 5 - 0
src/main/resources/mapper/UserTokenMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cdf.mapper.IUserTokenMapper">
+
+</mapper>