From 42e8cb4d1c9655e161df8088473d0b943d879e37 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 14 Dec 2021 11:54:58 +0800
Subject: [PATCH] 20211214

---
 src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java |   94 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 94 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
new file mode 100644
index 0000000..c14164d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
@@ -0,0 +1,94 @@
+package cc.mrbird.febs.common.interceptor;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.utils.AppContants;
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.common.utils.SpringContextUtil;
+import cc.mrbird.febs.video.entity.VideoMemberEntity;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.asymmetric.KeyType;
+import cn.hutool.crypto.asymmetric.RSA;
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Slf4j
+public class LoginInterceptor implements HandlerInterceptor {
+
+    private final RedisUtils redisUtils = SpringContextUtil.getBean(RedisUtils.class);
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        String headerToken = request.getHeader("token");
+        if (StringUtils.isBlank(headerToken)) {
+            responseUnAuth(response);
+            return false;
+        }
+
+        String token = resolveToken(headerToken);
+
+        if (token == null || AppContants.TIME_OUT.equals(token)) {
+            responseUnAuth(response);
+            return false;
+        }
+
+        String userJsonStr = redisUtils.getString(token);
+        if (StringUtils.isBlank(userJsonStr)) {
+            responseUnAuth(response);
+            return false;
+        }
+        VideoMemberEntity member = JSON.parseObject(userJsonStr, VideoMemberEntity.class);
+
+        request.getSession().setAttribute("member", member);
+        return true;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+
+    }
+
+    private void responseUnAuth(HttpServletResponse response) throws IOException {
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/json; charset=utf-8");
+        response.getWriter().write(new ObjectMapper().writeValueAsString(new FebsResponse().code(HttpStatus.UNAUTHORIZED)));
+    }
+
+    private String resolveToken(String token) {
+        try {
+            RSA rsa = new RSA(AppContants.PRIVATE_KEY, null);
+            String[] tokens = StrUtil.split(rsa.decryptStr(token, KeyType.PrivateKey), "_");
+            if (verifyTokenExpired(Long.parseLong(tokens[1]))) {
+                return tokens[0];
+            } else {
+                return AppContants.TIME_OUT;
+            }
+        } catch (Exception e) {
+            log.error("#解析token异常#", e);
+            return null;
+        }
+    }
+
+    private Boolean verifyTokenExpired(Long time) {
+        boolean isDebug = true;
+        if (!isDebug) {
+            long currentTime = System.currentTimeMillis();
+            return currentTime - time <= 30000;
+        }
+        return true;
+    }
+}
+

--
Gitblit v1.9.1