Browse Source

修复apptoken识别失败问题

dos 8 months ago
parent
commit
b22f8bacac

+ 11 - 0
game-common/pom.xml

@@ -89,6 +89,17 @@
             <artifactId>fastjson2</artifactId>
         </dependency>
 
+        <!-- fastjson1 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+        </dependency>
+
         <!-- io常用工具类 -->
         <dependency>
             <groupId>commons-io</groupId>

+ 3 - 0
game-common/src/main/java/com/game/common/core/domain/model/LoginUser.java

@@ -136,6 +136,9 @@ public class LoginUser implements UserDetails
     @Override
     public String getUsername()
     {
+        if(null == user){
+            return null;
+        }
         return user.getUserName();
     }
 

+ 3 - 2
game-common/src/main/java/com/game/common/utils/app/AppUserCache.java

@@ -4,12 +4,13 @@ package com.game.common.utils.app;
 import com.game.common.constant.ConstantsList;
 import com.game.common.core.redis.RedisCache;
 import com.game.common.utils.spring.SpringUtils;
+import org.redisson.api.RedissonClient;
 
 public class AppUserCache {
 
     static String getUserToken(long uid) {
-        RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
-        Object objToken = redisCache.getCacheObject("U:Token:" + uid);
+        RedissonClient redissonClient = SpringUtils.getBean(RedissonClient.class);
+        Object objToken = redissonClient.getBucket("U:Token:" + uid).get();
         if (objToken == null) {
             return "";
         } else {

+ 3 - 1
game-framework/src/main/java/com/game/framework/security/filter/JwtAuthenticationTokenFilter.java

@@ -34,7 +34,9 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
         LoginUser loginUser = tokenService.getLoginUser(request);
         if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication()))
         {
-            tokenService.verifyToken(loginUser);
+            if(!loginUser.isBusUser()) {  //app用户跳过
+                tokenService.verifyToken(loginUser);
+            }
             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
             authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
             SecurityContextHolder.getContext().setAuthentication(authenticationToken);

+ 22 - 11
game-framework/src/main/java/com/game/framework/web/service/TokenService.java

@@ -5,7 +5,13 @@ import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import javax.servlet.http.HttpServletRequest;
 
+import com.alibaba.fastjson2.JSONObject;
+import com.game.common.core.domain.entity.SysUser;
 import com.game.common.utils.app.AppUserCache;
+import com.game.common.utils.spring.SpringUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RMap;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -78,20 +84,25 @@ public class TokenService
             }
             catch (Exception e)
             {
-                if(StringUtils.isNotBlank(getOldToken(request))){
-                    //app 登录用户
-                    String uid = getOldUid(request);
-                    token = getOldToken(request);
-                    if(AppUserCache.checkHaveToken(Long.parseLong(uid),token)){
-                        LoginUser loginUser = new LoginUser();
-                        loginUser.setBusUser(true);
-                        loginUser.setUserId(Long.valueOf(uid));
-                        return loginUser;
-                    }
-                }
                 log.error("获取用户信息异常'{}'", e.getMessage());
             }
         }
+        if(StringUtils.isNotBlank(getOldToken(request))){
+            //app 登录用户
+            String uid = getOldUid(request);
+            token = getOldToken(request);
+            if(AppUserCache.checkHaveToken(Long.parseLong(uid),token)){
+                LoginUser loginUser = new LoginUser();
+                loginUser.setBusUser(true);
+                loginUser.setUserId(Long.valueOf(uid));
+                /*RedissonClient redissonClient = SpringUtils.getBean(RedissonClient.class);
+                RMap r = redissonClient.getMap("U:UserInfo:".concat(uid));
+                if(null != r){
+                    SysUser sysUser = new SysUser();
+                }*/
+                return loginUser;
+            }
+        }
         return null;
     }
 

+ 15 - 0
pom.xml

@@ -25,6 +25,7 @@
         <kaptcha.version>2.3.3</kaptcha.version>
         <pagehelper.boot.version>1.4.7</pagehelper.boot.version>
         <fastjson.version>2.0.43</fastjson.version>
+        <fastjson1.version>1.2.80</fastjson1.version>
         <oshi.version>6.5.0</oshi.version>
         <commons.io.version>2.13.0</commons.io.version>
         <poi.version>4.1.2</poi.version>
@@ -34,6 +35,7 @@
         <lombok.version>1.16.20</lombok.version>
         <swagger.core.version>1.6.2</swagger.core.version>
         <hutool.version>5.8.16</hutool.version>
+        <redission.version>3.16.2</redission.version>
     </properties>
 
     <!-- 依赖声明 -->
@@ -120,6 +122,19 @@
                 <version>${fastjson.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>org.redisson</groupId>
+                <artifactId>redisson-spring-boot-starter</artifactId>
+                <version>${redission.version}</version>
+            </dependency>
+
+            <!-- fastjson1 -->
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>fastjson</artifactId>
+                <version>${fastjson1.version}</version>
+            </dependency>
+
             <!-- Token生成与解析-->
             <dependency>
                 <groupId>io.jsonwebtoken</groupId>