From 51b53373d150e4107a51fcf502d0598b7d82c455 Mon Sep 17 00:00:00 2001
From: liuhaonan <konodioda2333@vip.qq.com>
Date: 星期二, 18 一月 2022 11:08:12 +0800
Subject: [PATCH] 功能完善/回滚数据之后新增的填哥的代码

---
 sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java |  130 ++++++++++++++++++++++++------------------
 1 files changed, 74 insertions(+), 56 deletions(-)

diff --git a/sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java b/sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java
index 9068f02..7c57d07 100644
--- a/sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java
+++ b/sandu-common/src/main/java/com/sandu/common/security/JwtAuthenticationEntryPoint.java
@@ -1,20 +1,17 @@
 package com.sandu.common.security;
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.sandu.common.enums.ResponseStatusEnums;
-import com.sandu.common.redis.online.OnlineUser;
-import com.sandu.common.redis.online.OnlineUserService;
 import com.sandu.common.security.config.SecurityProperties;
-import com.sandu.common.security.jwt.JwtTokenProvider;
+import com.sandu.common.security.token.TokenProvider;
 import com.sandu.common.util.ResponseUtil;
-import com.sandu.common.util.SpringContextHolder;
-import io.jsonwebtoken.ExpiredJwtException;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.AuthenticationEntryPoint;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -25,70 +22,91 @@
 @Component
 public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint {
 
-    @Autowired
-    private JwtTokenProvider tokenProvider;
+    @Resource
+    private TokenProvider tokenProvider;
+    @Resource
+    private SecurityProperties properties;
 
     @Override
     public void commence(HttpServletRequest request,
                          HttpServletResponse response,
                          AuthenticationException authException) throws IOException {
 
-        String token = tokenProvider.getToken(request);
-        SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
+        String token = request.getHeader(properties.getHeader());
 
         if (!StringUtils.hasText(token)) {
+            writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_NONE.getCode(), ResponseStatusEnums.TOKEN_NONE.getMessage()));
+            return;
+        }
+
+        LoginUserInfo loginUserInfo = tokenProvider.validateToken(token);
+
+        if (loginUserInfo == null) {
             writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
             return;
         }
 
-
-        Throwable exception = tokenProvider.getException(token);
-
-        // jwt杩囨湡 鏇挎崲鏂扮殑jwt
-        if (exception instanceof ExpiredJwtException) {
-            String usernameForce = tokenProvider.getSubjectForce(token);
-            if (properties.isCacheOnline()) {
-                OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
-                OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + usernameForce);
-                if (onlineUser == null || !token.equals(onlineUser.getToken())) {
-                    // redis涓婃病鏈� 鎴栬�呬笉鏄綋鍓嶇敤鎴风殑token 杩斿洖澶辨晥
-                    writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
-                } else {
-                    // 杩斿洖杩囨湡锛屾惡甯︽柊鐨則oken
-                    String refreshToken = tokenProvider.refreshToken(token);
-                    onlineUser.setToken(refreshToken);
-                    onlineUserService.updateOne(onlineUser);
-                    writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_EXPIRED.getCode(), ResponseStatusEnums.TOKEN_EXPIRED.getMessage(), properties.getTokenStartWith() + refreshToken));
-                }
-            } else {
-                // 杩斿洖杩囨湡锛屾惡甯︽柊鐨則oken
-                String refreshToken = properties.getTokenStartWith() + tokenProvider.refreshToken(token);
-                writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_EXPIRED.getCode(), ResponseStatusEnums.TOKEN_EXPIRED.getMessage(), null));
-            }
-            return;
+        if (!StrUtil.equals(loginUserInfo.getToken(), token)) {
+            writeResponse(response, ResponseUtil.error(ResponseStatusEnums.SINGLE_LOGIN.getCode(), ResponseStatusEnums.SINGLE_LOGIN.getMessage()));
         }
 
-        // 鍏朵粬jwt瑙f瀽寮傚父
-        if (exception != null) {
-            writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
-        } else {
-            //jwt瑙f瀽姝e父 鐪嬬湅鏄笉鏄痳edis鐨勯棶棰�
-            if (properties.isCacheOnline()) {
-                String usernameForce = tokenProvider.getSubjectForce(token);
-                OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
-                OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + usernameForce);
-                if (onlineUser != null && !token.equals(onlineUser.getToken())) {
-                    // 鍜屾湇鍔″櫒淇濆瓨鐨則oken涓嶄竴鏍凤紝璇存槑鍦ㄥ叾浠栧湴鏂圭櫥褰�
-                    writeResponse(response, ResponseUtil.error(ResponseStatusEnums.SINGLE_LOGIN.getCode(), ResponseStatusEnums.SINGLE_LOGIN.getMessage()));
-                } else {
-                    // 鏈嶅姟鍣ㄦ病鏈夊湪绾跨敤鎴穞oken鎴栬�卼oken涓嶄竴鑷� 閮借繑鍥瀟oken澶辨晥
-                    writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
-                }
-            } else {
-                writeResponse(response, ResponseUtil.error(ResponseStatusEnums.FAIL.getCode(), "璁よ瘉鍑洪敊"));
-            }
-        }
-        return;
+
+//        String token = tokenProvider.getToken(request);
+//        SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
+//
+//        if (!StringUtils.hasText(token)) {
+//            writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
+//            return;
+//        }
+//
+//
+//        Throwable exception = tokenProvider.getException(token);
+//
+//        // jwt杩囨湡 鏇挎崲鏂扮殑jwt
+//        if (exception instanceof ExpiredJwtException) {
+//            String usernameForce = tokenProvider.getSubjectForce(token);
+//            if (properties.isCacheOnline()) {
+//                OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
+//                OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + usernameForce);
+//                if (onlineUser == null || !token.equals(onlineUser.getToken())) {
+//                    // redis涓婃病鏈� 鎴栬�呬笉鏄綋鍓嶇敤鎴风殑token 杩斿洖澶辨晥
+//                    writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
+//                } else {
+//                    // 杩斿洖杩囨湡锛屾惡甯︽柊鐨則oken
+//                    String refreshToken = tokenProvider.refreshToken(token);
+//                    onlineUser.setToken(refreshToken);
+//                    onlineUserService.updateOne(onlineUser);
+//                    writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_EXPIRED.getCode(), ResponseStatusEnums.TOKEN_EXPIRED.getMessage(), properties.getTokenStartWith() + refreshToken));
+//                }
+//            } else {
+//                // 杩斿洖杩囨湡锛屾惡甯︽柊鐨則oken
+//                String refreshToken = properties.getTokenStartWith() + tokenProvider.refreshToken(token);
+//                writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_EXPIRED.getCode(), ResponseStatusEnums.TOKEN_EXPIRED.getMessage(), null));
+//            }
+//            return;
+//        }
+//
+//        // 鍏朵粬jwt瑙f瀽寮傚父
+//        if (exception != null) {
+//            writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
+//        } else {
+//            //jwt瑙f瀽姝e父 鐪嬬湅鏄笉鏄痳edis鐨勯棶棰�
+//            if (properties.isCacheOnline()) {
+//                String usernameForce = tokenProvider.getSubjectForce(token);
+//                OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
+//                OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + usernameForce);
+//                if (onlineUser != null && !token.equals(onlineUser.getToken())) {
+//                    // 鍜屾湇鍔″櫒淇濆瓨鐨則oken涓嶄竴鏍凤紝璇存槑鍦ㄥ叾浠栧湴鏂圭櫥褰�
+//                    writeResponse(response, ResponseUtil.error(ResponseStatusEnums.SINGLE_LOGIN.getCode(), ResponseStatusEnums.SINGLE_LOGIN.getMessage()));
+//                } else {
+//                    // 鏈嶅姟鍣ㄦ病鏈夊湪绾跨敤鎴穞oken鎴栬�卼oken涓嶄竴鑷� 閮借繑鍥瀟oken澶辨晥
+//                    writeResponse(response, ResponseUtil.error(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage()));
+//                }
+//            } else {
+//                writeResponse(response, ResponseUtil.error(ResponseStatusEnums.FAIL.getCode(), "璁よ瘉鍑洪敊"));
+//            }
+//        }
+//        return;
 
     }
 

--
Gitblit v1.9.3