From a2f23bc97d133bcf7b950cd269eda577be4c0cac Mon Sep 17 00:00:00 2001
From: chenjiantian <214228265@qq.com>
Date: 星期一, 17 一月 2022 17:57:44 +0800
Subject: [PATCH] token优化

---
 sandu-common/src/main/java/com/sandu/common/security/TokenFilter.java |   57 +++++++++++++++++++++++----------------------------------
 1 files changed, 23 insertions(+), 34 deletions(-)

diff --git a/sandu-common/src/main/java/com/sandu/common/security/TokenFilter.java b/sandu-common/src/main/java/com/sandu/common/security/TokenFilter.java
index 0688d70..642a643 100644
--- a/sandu-common/src/main/java/com/sandu/common/security/TokenFilter.java
+++ b/sandu-common/src/main/java/com/sandu/common/security/TokenFilter.java
@@ -1,22 +1,19 @@
 package com.sandu.common.security;
 
-import com.sandu.common.redis.online.OnlineUser;
-import com.sandu.common.redis.online.OnlineUserService;
+import cn.hutool.core.util.StrUtil;
 import com.sandu.common.security.config.SecurityProperties;
-import com.sandu.common.security.jwt.JwtTokenProvider;
-import com.sandu.common.util.SpringContextHolder;
+import com.sandu.common.security.token.TokenProvider;
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.util.StringUtils;
-import org.springframework.web.filter.GenericFilterBean;
+import org.springframework.web.filter.OncePerRequestFilter;
 
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 /**
@@ -26,40 +23,32 @@
  * @author chenjiantian
  */
 @Slf4j
-public class TokenFilter extends GenericFilterBean {
+@AllArgsConstructor
+public class TokenFilter extends OncePerRequestFilter {
 
-    private final JwtTokenProvider tokenProvider;
-
-    public TokenFilter(JwtTokenProvider tokenProvider) {
-        this.tokenProvider = tokenProvider;
-    }
+    private final TokenProvider tokenProvider;
+    private final SecurityProperties properties;
 
     @Override
-    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
-            throws IOException, ServletException {
-        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
-        String token = tokenProvider.getToken(httpServletRequest);
-        SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
+        String token = request.getHeader(properties.getHeader());
 
+        if (token != null && token.startsWith(properties.getTokenStartWith())) {
+            token = token.substring(properties.getTokenStartWith().length());
+        }
 
-        if (StringUtils.hasText(token) && tokenProvider.validateToken(token)) {
-            Authentication authentication = tokenProvider.getAuthentication(token);
-            // 鏄惁浣跨敤redis缂撳瓨鐢ㄦ埛鍔熻兘
-            if (!properties.isCacheOnline()) {
+        LoginUserInfo loginUserInfo = tokenProvider.validateToken(token);
+        if (loginUserInfo != null) {
+            if (StrUtil.equals(loginUserInfo.getToken(), token)) {
+                Authentication authentication = new UsernamePasswordAuthenticationToken(
+                        loginUserInfo, null,
+                        loginUserInfo.getAuthorities());
                 SecurityContextHolder.getContext().setAuthentication(authentication);
-            } else {
-                OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
-                OnlineUser onlineUser = onlineUserService.getOne(properties.getOnlineKey() + ((UserDetails) authentication.getPrincipal()).getUsername());
-                if (onlineUser != null) {
-                    // 鍖归厤涓婂綋鍓嶇敤鎴风殑token鎵嶅悎娉曪紝闃叉jwt涓嶅彈鎺у埗
-                    if (token.equals(onlineUser.getToken())) {
-                        SecurityContextHolder.getContext().setAuthentication(authentication);
-                    }
-                }
             }
         }
 
-        filterChain.doFilter(servletRequest, servletResponse);
+
+        filterChain.doFilter(request, response);
     }
 
 }

--
Gitblit v1.9.3