Browse Source

token缓存时间戳处理

zhouy 3 tháng trước cách đây
mục cha
commit
680787c33f

+ 4 - 4
src/main/java/com/uas/eis/core/SSOTokenManager.java

@@ -21,22 +21,22 @@ public class SSOTokenManager {
     /**
      * 多线程安全的获取共享token方法
      */
-    public static String getSsoAuthToken(String  ssoAuth) {
-        TokenInfo tokenInfo = tokenCache.get(ssoAuth);
+    public static String getToken(String  tokenKey) {
+        TokenInfo tokenInfo = tokenCache.get(tokenKey);
         if (tokenInfo == null || tokenInfo.expirationTime-60*3*1000 < System.currentTimeMillis()) {
             return null;
         }
         logger.info("获取缓存token,token:{},过期时间:{}",tokenInfo.token,tokenInfo.expirationTime);
         return tokenInfo.token;
     }
-    public static void setSsoAuthToken(String ssoAuth, String token, long expirationTime) {
+    public static void setToken(String tokenKey, String token, long expirationTime) {
         TokenInfo tokenInfo = new TokenInfo();
         tokenInfo.token = token;
         tokenInfo.expirationTime = expirationTime;
         logger.info("设置token,token:{},过期时间:{},系统时间:{}",token,expirationTime,System.currentTimeMillis());
         lock.lock();
         try {
-            tokenCache.put(ssoAuth, tokenInfo);
+            tokenCache.put(tokenKey, tokenInfo);
         }finally {
             lock.unlock();
         }

+ 9 - 5
src/main/java/com/uas/eis/sdk/NetEasySDK.java

@@ -24,6 +24,7 @@ public class NetEasySDK {
     private QiyeOpenPlatSDK sdkInstance;
 
     private final String authSSOTokenKey = "NETEASY_SSO_TOKEN" ;
+    private final String accessTokenKey = "NETEASY_ACCESS_TOKEN" ;
 
     public void initSDK() {
         QiyeOpenPlatSDKConfig qiyeOpenPlatSDKConfig = QiyeOpenPlatSDKConfig.builder()
@@ -39,18 +40,21 @@ public class NetEasySDK {
         this.sdkInstance= new QiyeOpenPlatSDK("dev", qiyeOpenPlatSDKConfig);
         // 查看文档,应用获取token
         R<AppLoginResp> appLoginR = sdkInstance.appLogin(netEasyConfig.getAuthCode());
-        sdkInstance.getQiyeOpenPlatSDKConfig().setupToken((AppLoginResp) appLoginR.getDataBean(AppLoginResp.class));
+        AppLoginResp appLoginResp = (AppLoginResp)appLoginR.getDataBean(AppLoginResp.class);
+        sdkInstance.getQiyeOpenPlatSDKConfig().setupToken(appLoginResp);
+        //时区问题,提前失效token,提前9小时
+        SSOTokenManager.setToken(accessTokenKey, appLoginResp.getAccessToken(), appLoginResp.getAccessTokenExpiredTime().getTime()-9*60*60*1000);
     }
 
     public QiyeOpenPlatSDK getSDKInstance(){
-        if (sdkInstance == null) {
+        if (sdkInstance == null || SSOTokenManager.getToken(accessTokenKey) == null) {
             initSDK();
         }
-        return sdkInstance;
+        return this.sdkInstance;
     }
 
     public String getSsoAuthToken () {
-        String ssoAuthToken = SSOTokenManager.getSsoAuthToken(authSSOTokenKey);
+        String ssoAuthToken = SSOTokenManager.getToken(authSSOTokenKey);
         logger.info("获取缓存ssoAuthToken,key:{}",ssoAuthToken);
         if (ssoAuthToken == null) {
             QiyeOpenPlatSDKConfig qiyeOpenPlatSDKConfig = QiyeOpenPlatSDKConfig.builder()
@@ -67,7 +71,7 @@ public class NetEasySDK {
             // 查看文档,应用获取token
             R<SsoLoginResp> ssoLoginRespR = sdkInstance.ssoAuthToken(netEasyConfig.getAuthCode());
             SsoLoginResp ssoLoginResp = ssoLoginRespR.getDataBean(SsoLoginResp.class);
-            SSOTokenManager.setSsoAuthToken(authSSOTokenKey, ssoLoginResp.getSsoAuthToken(), ssoLoginResp.getSsoAuthTokenExpiredTime().getTime()-8*60*60*1000);
+            SSOTokenManager.setToken(authSSOTokenKey, ssoLoginResp.getSsoAuthToken(), ssoLoginResp.getSsoAuthTokenExpiredTime().getTime()-8*60*60*1000);
             return ssoLoginResp.getSsoAuthToken();
         } else {
             logger.info("从缓存中获取ssoAuthToken:token{}",ssoAuthToken);

+ 43 - 1
src/test/java/com/uas/eis/NetEasyTest.java

@@ -1,16 +1,30 @@
 package com.uas.eis;
 
+import com.netease.qiye.qiyeopenplatform.common.dto.login.AppLoginResp;
+import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK;
+import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDKConfig;
+import com.netease.qiye.qiyeopenplatform.sdk.dto.R;
+import com.uas.eis.core.config.NetEasyConfig;
+import com.uas.eis.sdk.NetEasySDK;
 import com.uas.eis.serviceImpl.NetEasyService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = {UasEisApplication.class})
 public class NetEasyTest {
     @Autowired
     private NetEasyService netEasyService;
+    @Autowired
+    private NetEasySDK netEasySDK;
+
+    @Resource
+    private NetEasyConfig netEasyConfig;
     @Test
     public void initOrg() throws Exception {
         netEasyService.initNetEasyOrg();
@@ -29,6 +43,34 @@ public class NetEasyTest {
     }
     @Test
     public void ssoLogin() throws Exception {
-        netEasyService.ssoLogin("zhuad");
+        System.out.println(netEasyService.ssoLogin("yangxin"));
+    }
+    @Test
+    public void getMsg() throws Exception {
+        netEasyService.getUnreadMsg("zhuad");
+    }
+
+    @Test
+    public void refreshToken() throws Exception {
+
+//        QiyeOpenPlatSDKConfig qiyeOpenPlatSDKConfig = QiyeOpenPlatSDKConfig.builder()
+//                //应用ID
+//                .appId(netEasyConfig.getAppId())
+//                //企业OpenID
+//                .orgOpenId(netEasyConfig.getCropId())
+//                //服务地址信息
+//                .urlPrefix(netEasyConfig.getServerUrl())
+//                .build();
+//
+//        //创建SDK实例
+//        QiyeOpenPlatSDK sdkInstance = new QiyeOpenPlatSDK("dev", qiyeOpenPlatSDKConfig);
+//        AppLoginResp appLoginResp = new AppLoginResp();
+//        appLoginResp.setAccessToken("50a3e14102f945f49bd8abecb029c147");
+//        appLoginResp.setRefreshToken("2ee0a626585a4247934aa1055972e35a");
+//        sdkInstance.getQiyeOpenPlatSDKConfig().setupToken(appLoginResp);
+//        System.out.println(sdkInstance.refreshToken().getDataBean(AppLoginResp.class).getRefreshTokenExpiredTime().getTime());
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+       System.out.println(instanceSDK.getQiyeOpenPlatSDKConfig().getAccessTokenExpiredEnd().getTime());
+        System.out.println(System.currentTimeMillis());
     }
 }