From f7ea5773570beb5ad8c6efb5c1cf743294ee079b Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Sun, 24 Jan 2021 14:16:04 +0800
Subject: [PATCH] modify

---
 zq-erp/src/main/java/com/matrix/system/common/interceptor/ApiUserLoginInterceptor.java |  129 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 129 insertions(+), 0 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/common/interceptor/ApiUserLoginInterceptor.java b/zq-erp/src/main/java/com/matrix/system/common/interceptor/ApiUserLoginInterceptor.java
new file mode 100644
index 0000000..4fe5642
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/common/interceptor/ApiUserLoginInterceptor.java
@@ -0,0 +1,129 @@
+package com.matrix.system.common.interceptor;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.matrix.component.redis.RedisClient;
+import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.core.constance.MatrixConstance;
+import com.matrix.core.pojo.AjaxResult;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.core.tools.RSAUtils;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.dao.SysUsersDao;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.SysVipInfoDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author wzy
+ * @date 2020-12-21
+ **/
+@Component
+public class ApiUserLoginInterceptor implements HandlerInterceptor {
+
+    @Autowired
+    private RedisClient redisClient;
+
+    @Value("${login_private_key}")
+    private String privateKey;
+
+    @Value("${evn}")
+    private String evn;
+
+    @Autowired
+    private SysUsersDao sysUsersDao;
+
+    private final String TOKEN_HEADER = "Authorization";
+    private final String TOKEN_START_WITH = "Bearer ";
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        if ("dev".equals(evn)) {
+            SysUsers sysUsers = sysUsersDao.selectById(1012L);
+            request.getSession().setAttribute(MatrixConstance.LOGIN_KEY, sysUsers);
+            return true;
+        }
+
+        String token = resolveToken(request);
+        AjaxResult ajaxResult = new AjaxResult();
+        ajaxResult.setStatus(AjaxResult.STATUS_LOGIN_INVALID);
+
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/json; charset=utf-8");
+        if (StringUtils.isBlank(token)) {
+            ajaxResult.setInfo("login time out");
+            response.getWriter().write(new ObjectMapper().writeValueAsString(ajaxResult));
+            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+            return false;
+        }
+
+        String userStr = redisClient.getCachedValue(token);
+//        redisClient.resetExpire(token);
+        if (StringUtils.isBlank(userStr)) {
+            ajaxResult.setInfo("login time out");
+            response.getWriter().write(new ObjectMapper().writeValueAsString(ajaxResult));
+            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+            return false;
+        }
+
+        SysUsers sysUsers = JSONObject.parseObject(userStr, SysUsers.class);
+        request.getSession().setAttribute(MatrixConstance.LOGIN_KEY, sysUsers);
+        return true;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+        request.getSession().removeAttribute(MatrixConstance.LOGIN_KEY);
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+
+    }
+
+    /**
+     * 解析token  token_timestamp_url
+     *
+     * @param request
+     * @return
+     */
+    private String resolveToken(HttpServletRequest request) {
+        String headToken = request.getHeader(TOKEN_HEADER);
+        String sb = request.getRequestURI();
+
+        if (StringUtils.isNotBlank(headToken) && headToken.startsWith(TOKEN_START_WITH)) {
+            // 去掉令牌前缀
+            String rsaToken = headToken.replace(TOKEN_START_WITH, "");
+
+            try {
+                String decryptToken = new String(RSAUtils.decryptByPrivateKey(rsaToken, privateKey));
+
+                String[] s = decryptToken.split("_");
+                if (s == null || s.length != 3) {
+                    return "";
+                }
+
+                LogUtil.info("请求路径:{} -- {}", sb, s[2]);
+                if (!sb.equals(s[2])) {
+                    return "";
+                }
+
+                return s[0];
+            } catch (Exception e) {
+                LogUtil.info("#token解析错误:{}#", e);
+                return "";
+            }
+
+        }
+
+        return "";
+    }
+}

--
Gitblit v1.9.1