From d21e551b42746e5c689c96e584042e418083ff9b Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Thu, 11 Mar 2021 16:06:18 +0800
Subject: [PATCH] tokenUtils更新

---
 screen-manage/pom.xml                                                                |    5 
 screen-manage/src/main/resources/application-dev.yml                                 |    4 
 screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java            |    9 +
 screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java          |   16 ++
 screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java      |   13 ++
 screen-common/src/main/java/com/moral/exception/TokenException.java                  |   72 ++++++++++++
 screen-common/src/main/java/com/moral/util/TokenUtils.java                           |   86 ++++++++------
 screen-common/src/main/java/com/moral/constant/Constants.java                        |   19 +++
 screen-manage/src/main/java/com/moral/api/controller/AccountController.java          |   30 +++-
 screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java |   82 ++++++++-----
 10 files changed, 259 insertions(+), 77 deletions(-)

diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java
index d824510..945ef27 100644
--- a/screen-common/src/main/java/com/moral/constant/Constants.java
+++ b/screen-common/src/main/java/com/moral/constant/Constants.java
@@ -15,6 +15,16 @@
      */
     public static final String MSG_OPERATION_FAILED = "���������������";
 
+    /*
+    * token������
+    * */
+    public static final String MSG_TOKEN_ERROR = "token������������������������";
+
+    /*
+    * token������������
+    * */
+    public static final String MSG_TOKEN_CREATE_ERROR = "token���������������������������������";
+
     /**
      * ������������code
      */
@@ -24,6 +34,15 @@
      */
     public static final int CODE_OPERATION_FAILED = -1;
 
+    /**
+     * token������������
+     */
+    public static final int CODE_TOKEN_ERROR = -10;
+
+    /*
+    * token������������
+    * */
+    public static final int CODE_TOKEN_CREATE_ERROR = -11;
 
 
 }
diff --git a/screen-common/src/main/java/com/moral/exception/TokenException.java b/screen-common/src/main/java/com/moral/exception/TokenException.java
new file mode 100644
index 0000000..e8bdc1c
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/exception/TokenException.java
@@ -0,0 +1,72 @@
+package com.moral.exception;
+
+/**
+ * @ClassName TokenException
+ * @Description Token������
+ * @Author ���������
+ * @Date 2021/3/11 14:54
+ * @Version TODO
+ **/
+public class TokenException extends RuntimeException {
+
+    /**
+     * ���������
+     */
+    private int code;
+
+    /**
+     * ������������
+     */
+    private String msg;
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    public TokenException() {
+        super();
+    }
+
+    public TokenException(String msg) {
+        super(msg);
+        this.msg = msg;
+    }
+
+    public TokenException(Throwable t) {
+        super(t);
+    }
+
+    public TokenException(String msg, Throwable t) {
+        super(msg);
+        this.msg = msg;
+    }
+
+    public TokenException(int code, String msg) {
+        super(msg);
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public TokenException(int code, String msg, Throwable t) {
+        super(msg, t);
+        this.code = code;
+        this.msg = msg;
+    }
+
+    /**
+     * Getter method for property <tt>code</tt>.
+     *
+     * @return property value of code
+     */
+    public int getCode() {
+        return code;
+    }
+
+    /**
+     * Getter method for property <tt>msg</tt>.
+     *
+     * @return property value of msg
+     */
+    public String getMsg() {
+        return msg;
+    }
+}
diff --git a/screen-common/src/main/java/com/moral/util/TokenUtils.java b/screen-common/src/main/java/com/moral/util/TokenUtils.java
index 77d2d17..7900fa2 100644
--- a/screen-common/src/main/java/com/moral/util/TokenUtils.java
+++ b/screen-common/src/main/java/com/moral/util/TokenUtils.java
@@ -1,5 +1,8 @@
 package com.moral.util;
 
+import com.moral.constant.Constants;
+import com.moral.exception.TokenException;
+import com.sun.org.apache.bcel.internal.classfile.ConstantString;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -31,13 +34,7 @@
     }
 
     //token��������� ������������
-    private static final int validity_time = 60*60*24*7;
-    //token������,������������
-    public static final int error = -1;
-    //token������
-    public static final int timeout = -2;
-    //token���������������������
-    public static final int valid = 1;
+    private static final int validity_time = 60*30;
 
     /**
      * @Description: ������token
@@ -46,69 +43,86 @@
      * @Author: ���������
      * @Date: 2021/3/10
      */
-    public static Map<String, Object> getToken(String uid, Map<String, Object> userInfo) {
-        Map<String, Object> result = new HashMap<>();
+    public static String getToken(String uid, Map<String, Object> userInfo) {
         //������������token
         try {
             //������token
             String token = TokenEncryptUtils.encoded(uid + "/" + System.currentTimeMillis() / 1000);
             //������������token
             String oldToken = (String) redisTemplate.opsForHash().get("user_token", uid);
-            if(oldToken!=null)
+            if (oldToken != null)
                 redisTemplate.delete(oldToken);
             //���token���������value���
             redisTemplate.opsForValue().set(token, userInfo);
             redisTemplate.expire(token, validity_time, TimeUnit.SECONDS);
             //���token���������Hash���
-            redisTemplate.opsForHash().put("user_token",uid,token);
-
-            result.put("code", valid);
-            result.put("token",token);
-        }catch (Exception e){
-            e.printStackTrace();
-            log.error(e.getMessage());
-            result.put("code",error);
+            redisTemplate.opsForHash().put("user_token", uid, token);
+            return token;
+        } catch (Exception e) {
+            log.error("token���������������"+e.getMessage());
+            throw new TokenException(Constants.CODE_TOKEN_CREATE_ERROR,Constants.MSG_TOKEN_CREATE_ERROR);
         }
-        return result;
+
     }
 
     /**
      * @Description: ������token
      * @Param: [type, token] type��� ���������������manage  ���������������api
-     * @return: java.util.Map<java.lang.String                               ,                               java.lang.Object>
+     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
      * @Author: ���������
      * @Date: 2021/3/10
      */
-    public static Map<String, Object> checkToken( String token) {
-        Map<String, Object> result = new HashMap<>();
+    public static void checkToken(String token) {
         try {
             String[] tokenArray = TokenEncryptUtils.decoded(token).split("/");
             //������token������������
             if (tokenArray.length != 2) {
-                result.put("code", error);
-                result.put("msg", "���������token");
-                return result;
+                throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR);
             }
             //������token������������
-            int tokenTime = Integer.parseInt(tokenArray[1]);
-            if ((System.currentTimeMillis() / 1000) - tokenTime > validity_time) {
-                result.put("code", timeout);
-                result.put("msg", "���������������������������������������");
-                return result;
+            if (!redisTemplate.hasKey(token)) {
+                throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR);
             }
-            result.put("code", valid);
-            return result;
         } catch (Exception e) {
             log.error("token���������������token������" + e.getMessage());
-            result.put("code", error);
-            result.put("msg", "���������token");
-            return result;
+            throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR);
         }
     }
 
-    //������token������������������
+    /**
+     * @Description: ������token������������������
+     * @Param: [token]
+     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
+     * @Author: ���������
+     * @Date: 2021/3/11
+     */
     public static Map<String, Object> getUserInfoByToken(String token) {
         Map<String, Object> userInfo = (Map<String, Object>) redisTemplate.opsForValue().get(token);
+        if(userInfo==null)
+            throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR);
         return userInfo;
     }
+
+    /**
+     * @Description: ������token
+     * @Param: [uid, token]
+     * @return: void
+     * @Author: ���������
+     * @Date: 2021/3/11
+     */
+    public static void destoryToken(String uid, String token) {
+        redisTemplate.delete("token");
+        redisTemplate.opsForHash().delete("user_token", uid);
+    }
+
+    /**
+    * @Description: token������
+            * @Param: [token]
+            * @return: void
+            * @Author: ���������
+            * @Date: 2021/3/11
+            */
+    public static void extendTokenTime(String token)  {
+        redisTemplate.expire(token, validity_time, TimeUnit.SECONDS);
+    }
 }
diff --git a/screen-manage/pom.xml b/screen-manage/pom.xml
index 165d0b7..2589b24 100644
--- a/screen-manage/pom.xml
+++ b/screen-manage/pom.xml
@@ -18,6 +18,11 @@
             <version>1.0-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java b/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java
index 17dc780..b836014 100644
--- a/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java
+++ b/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java
@@ -7,6 +7,7 @@
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import java.util.ArrayList;
@@ -34,4 +35,12 @@
         regisration.addPathPatterns("/**/**");//������������������
         regisration.excludePathPatterns(excludePath);//���������������������
     }
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
+        registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+        WebMvcConfigurer.super.addResourceHandlers(registry);
+    }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/controller/AccountController.java b/screen-manage/src/main/java/com/moral/api/controller/AccountController.java
index 5b3ff22..779cea6 100644
--- a/screen-manage/src/main/java/com/moral/api/controller/AccountController.java
+++ b/screen-manage/src/main/java/com/moral/api/controller/AccountController.java
@@ -3,31 +3,47 @@
 import com.moral.api.service.ManageAccountService;
 import com.moral.constant.ResultMessage;
 import com.moral.util.ObjectUtils;
-import io.netty.util.internal.ObjectUtil;
-import io.swagger.annotations.Api;
+import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
 
 @Slf4j
-@Api(tags = {"������������"})
+@Api(tags = {"������������������"})
 @RestController
 @RequestMapping("/account")
 public class AccountController {
     @Resource
     ManageAccountService accountService;
+    @Autowired
+    @Qualifier("tokenRedisTemplate")
+    RedisTemplate redisTemplate;
+
 
     @PostMapping("login")
-    public ResultMessage login(@RequestBody Map<String,Object> paramters){
-        if(!ObjectUtils.checkParamAndMap(paramters,"account","password"))
-            return  ResultMessage.fail("���������������");
+    public ResultMessage login(@RequestBody Map<String, Object> paramters) {
+        if (!ObjectUtils.checkParamAndMap(paramters, "account", "password"))
+            return ResultMessage.fail("���������������");
+
         Map<String, Object> result = accountService.login(paramters);
-        if((int)result.get("accountId")<0)
+
+        if ((int) result.get("accountId") < 0)
             return ResultMessage.fail(result);
         return ResultMessage.ok(result);
     }
 
 
+    @PostMapping("logout")
+    public ResultMessage logout(@RequestBody Map<String, Object> paramters, HttpServletRequest request) {
+
+        return null;
+    }
+
+
 }
diff --git a/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java b/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
index b43234f..2e62d5b 100644
--- a/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
+++ b/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
@@ -2,6 +2,7 @@
 
 import com.moral.constant.Constants;
 import com.moral.constant.ResultMessage;
+import com.moral.exception.TokenException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ControllerAdvice;
@@ -22,7 +23,7 @@
     @ResponseStatus(HttpStatus.OK)
     public ResultMessage handleException(Exception ex) {
         log.error(ex.getMessage());
-        log.error(ex.getStackTrace().toString());
+        ex.printStackTrace();
         return  ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "������������");
     }
 
@@ -36,4 +37,14 @@
         return ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "������������������������");
     }
 
+    /**
+     * ������TokenException������
+     */
+    @ExceptionHandler({TokenException.class})
+    @ResponseBody
+    @ResponseStatus(HttpStatus.OK)
+    public ResultMessage handleTokenException(TokenException ex) {
+        return ResultMessage.fail(ex.getCode(),ex.getMsg());
+    }
+
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java b/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java
index ad23a22..875edd7 100644
--- a/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java
@@ -14,5 +14,21 @@
  * @since 2021-03-09
  */
 public interface ManageAccountService extends IService<ManageAccount> {
+    /**
+    * @Description: ������������
+            * @Param: [paramters]
+            * @return: java.util.Map<java.lang.String,java.lang.Object>
+            * @Author: ���������
+            * @Date: 2021/3/11
+            */
     Map<String, Object> login(Map<String, Object> paramters);
+
+    /**
+    * @Description: ������������
+            * @Param: [paramters]
+            * @return: java.util.Map<java.lang.String,java.lang.Object>
+            * @Author: ���������
+            * @Date: 2021/3/11
+            */
+    Map<String, Object> logout(Map<String, Object> paramters);
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
index b76ddbe..53aee77 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -39,9 +39,16 @@
     @Resource
     ManageMenuMapper manageMenuMapper;
 
-
+    /**
+     * @Description: ������
+     * @Param: [paramters]
+     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
+     * @Author: ���������
+     * @Date: 2021/3/11
+     */
+    @Override
     public Map<String, Object> login(Map<String, Object> paramters) {
-        Map<String,Object> result = new HashMap<>();
+        Map<String, Object> result = new HashMap<>();
         //������������
         String cyrpAccount = (String) paramters.get("account");
         String cyrpPassword = (String) paramters.get("password");
@@ -52,59 +59,68 @@
         QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>();
         wrapper.eq("account", account);
         ManageAccount manageAccount = accountMapper.selectOne(wrapper);
-        if(ObjectUtils.isEmpty(manageAccount)){
-            result.put("accountId",-1);
-            result.put("msg","���������������");
+        if (ObjectUtils.isEmpty(manageAccount)) {
+            result.put("accountId", -1);
+            result.put("msg", "���������������");
             return result;
         }
         //������������������������
-        if(manageAccount.getIsDelete().equals("1")){
-            result.put("accountId",-2);
-            result.put("msg","������������������");
+        if (manageAccount.getIsDelete().equals("1")) {
+            result.put("accountId", -2);
+            result.put("msg", "������������������");
             return result;
         }
         //������������
-        if(!MD5Utils.saltMD5Verify(password,manageAccount.getPassword())){
-            result.put("accountId",-3);
-            result.put("msg","���������������������");
+        if (!MD5Utils.saltMD5Verify(password, manageAccount.getPassword())) {
+            result.put("accountId", -3);
+            result.put("msg", "���������������������");
             return result;
         }
         //������������
         List<ManageRole> roles = roleMapper.getManageRoleByAccountId(manageAccount.getId());
-        if(ObjectUtils.isEmpty(roles)){
-            result.put("accountId",-4);
-            result.put("msg","������������������������");
+        if (ObjectUtils.isEmpty(roles)) {
+            result.put("accountId", -4);
+            result.put("msg", "������������������������");
             return result;
         }
         //������������
         List<ManageMenu> menus = manageMenuMapper.getParentChildrenMenusByRoles(roles);
-        if(ObjectUtils.isEmpty(menus)){
-            result.put("accountId",-5);
-            result.put("msg","������������������������");
+        if (ObjectUtils.isEmpty(menus)) {
+            result.put("accountId", -5);
+            result.put("msg", "������������������������");
             return result;
         }
 
         //������������token,���������������������������������
-        Map<String,Object> userInfo = new HashMap<>();//���������������������������������������
-        userInfo.put("accountId",manageAccount.getId());//������Id
-        userInfo.put("userName",manageAccount.getUserName());//������������
-        userInfo.put("roles",roles);//������������
-        userInfo.put("menus",menus);//������������
-        Map<String, Object> tokenResult = TokenUtils.getToken(String.valueOf(manageAccount.getId()), userInfo);
-        if(tokenResult.get("code").equals(TokenUtils.error)){
-            result.put("accountId",-6);
-            result.put("msg","������token������");
-            return result;
-        }
+        Map<String, Object> userInfo = new HashMap<>();//���������������������������������������
+        userInfo.put("accountId", manageAccount.getId());//������Id
+        userInfo.put("userName", manageAccount.getUserName());//������������
+        userInfo.put("roles", roles);//������������
+        userInfo.put("menus", menus);//������������
+        String token = TokenUtils.getToken(String.valueOf(manageAccount.getId()), userInfo);
+
 
         //������������������
-        result.put("accountId",manageAccount.getId());//������Id
-        result.put("userName",manageAccount.getUserName());//������������
-        result.put("roles",roles);//������������
-        result.put("menus",menus);//������������
-        result.put("token",tokenResult.get("token"));
+        result.put("accountId", manageAccount.getId());//������Id
+        result.put("userName", manageAccount.getUserName());//������������
+        result.put("roles", roles);//������������
+        result.put("menus", menus);//������������
+        result.put("token", token);
         return result;
     }
 
+    /**
+     * @Description: ������
+     * @Param: [paramters]
+     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
+     * @Author: ���������
+     * @Date: 2021/3/11
+     */
+    @Override
+    public Map<String, Object> logout(Map<String, Object> paramters) {
+
+        return null;
+    }
+
 
 }
diff --git a/screen-manage/src/main/resources/application-dev.yml b/screen-manage/src/main/resources/application-dev.yml
index 426aa21..77f43ef 100644
--- a/screen-manage/src/main/resources/application-dev.yml
+++ b/screen-manage/src/main/resources/application-dev.yml
@@ -114,6 +114,10 @@
   interceptor:
     exclude:
       - /account/login
+      - /swagger-ui.html
+      - /swagger-resources/**
+      - /webjars/**
+      - /account/logout
 AES:
   KEY:
     AD42F7787B035B7580000EF93BE20BAD

--
Gitblit v1.8.0