From 0c9ff5198c54ec5d2f3bbb8c5a406d270df1e188 Mon Sep 17 00:00:00 2001
From: zhaoxiaohao <279049017@qq.com>
Date: Thu, 11 Mar 2021 11:03:21 +0800
Subject: [PATCH] 优化token验证的流程

---
 kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/controller/TokensController.java      |    2 +-
 kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/impl/RedisTokensServiceImpl.java |   28 +++++++++++++++++++++-------
 kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/ITokensService.java              |    5 +++++
 3 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/ITokensService.java b/kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/ITokensService.java
index d956ca9..446225b 100644
--- a/kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/ITokensService.java
+++ b/kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/ITokensService.java
@@ -22,5 +22,10 @@
      */
     PageResult<TokenVo> listTokens(Map<String, Object> params, String clientId);
 
+    /**
+     * 获取用户是否登录;
+     * @param map
+     * @return
+     */
     ResultBody getBeforLogin(Map<String, Object> map);
 }
diff --git a/kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/impl/RedisTokensServiceImpl.java b/kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/impl/RedisTokensServiceImpl.java
index dc7af4f..893febb 100644
--- a/kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/impl/RedisTokensServiceImpl.java
+++ b/kidgrow-uaa/kidgrow-uaa-biz/src/main/java/com/kidgrow/oauth2/service/impl/RedisTokensServiceImpl.java
@@ -6,21 +6,25 @@
 import com.kidgrow.common.model.PageResult;
 import com.kidgrow.common.model.ResultBody;
 import com.kidgrow.common.utils.StringUtils;
-import com.kidgrow.redis.template.RedisRepository;
 import com.kidgrow.oauth2.model.TokenVo;
 import com.kidgrow.oauth2.service.ITokensService;
+import com.kidgrow.redis.template.RedisRepository;
 import com.kidgrow.redis.util.RedisUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
+import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.security.oauth2.provider.OAuth2Authentication;
 import org.springframework.security.oauth2.provider.OAuth2Request;
+import org.springframework.security.oauth2.provider.token.TokenStore;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
@@ -37,6 +41,8 @@
     private RedisRepository redisRepository;
     @Autowired
     private RedisUtils redisUtils;
+    @Autowired
+    private TokenStore tokenStore;
 
     @Override
     public PageResult<TokenVo> listTokens(Map<String, Object> params, String clientId) {
@@ -87,6 +93,11 @@
         return result;
     }
 
+    /**
+     * 获取用户是否登录;
+     * @param map
+     * @return
+     */
     @Override
     public ResultBody getBeforLogin(Map<String, Object> map) {
         String name = MapUtils.getString(map, "name");
@@ -97,13 +108,16 @@
         if (StringUtils.isBlank(webApp)) {
             return ResultBody.failed("请输入应用id");
         }
-        List<Object> objectList = redisUtils.lGet(SecurityConstants.REDIS_UNAME_TO_ACCESS+webApp+":"+name,0,0
-        );
-        if(objectList!=null){
-            if (objectList.size()>0) {
-                return ResultBody.ok().data(false);
-            }else {
+        //获取token
+        Collection<OAuth2AccessToken> tokensByClientIdAndUserName = this.tokenStore.findTokensByClientIdAndUserName(webApp, name);
+        List<OAuth2AccessToken> collect = tokensByClientIdAndUserName.stream().collect(Collectors.toList());
+//        验证token
+        if(collect!=null){
+            OAuth2AccessToken oAuth2AccessToken = collect.get(collect.size() - 1);
+            if(oAuth2AccessToken.isExpired()){
                 return ResultBody.ok().data(true);
+            }else {
+                return ResultBody.ok().data(false);
             }
         }else {
             return ResultBody.ok().data(true);
diff --git a/kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/controller/TokensController.java b/kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/controller/TokensController.java
index 57a8ea6..a773064 100644
--- a/kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/controller/TokensController.java
+++ b/kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/controller/TokensController.java
@@ -32,7 +32,7 @@
         return tokensService.listTokens(params, tenantId);
     }
     /**
-     * 获取用户是否登录
+     * 获取用户是否登录;
      * @param map
      * @return
      */

--
Gitblit v1.8.0