diff --git a/dy-java-applet/src/main/java/com/dyj/applet/DyAppletClient.java b/dy-java-applet/src/main/java/com/dyj/applet/DyAppletClient.java index 7a9af5672f5efa865dbf17b0089c524da172ce14..6d50953a6fda28bb84b393d63813d3607d385fb0 100644 --- a/dy-java-applet/src/main/java/com/dyj/applet/DyAppletClient.java +++ b/dy-java-applet/src/main/java/com/dyj/applet/DyAppletClient.java @@ -64,7 +64,7 @@ public class DyAppletClient extends BaseClient { AgentConfiguration agentConfiguration = configuration.getAgentConfigService().loadAgentByTenantId(tenantId, clientKey); UserTokenInfo userTokenInfo = configuration.getAgentTokenService().getUserTokenInfo(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), openId); // 利用配置信息和授权码获取新的访问令牌 - return new AppletTokenHandler(agentConfiguration).refreshToken(userTokenInfo.getRefreshToken()); + return new AppletTokenHandler(agentConfiguration).refreshToken(userTokenInfo.getRefreshToken(), openId); } @@ -89,9 +89,9 @@ public class DyAppletClient extends BaseClient { public DyResult refreshAccessToken(String openId) { DyConfiguration configuration = configuration(); AgentConfiguration agentConfiguration = configuration.getAgentConfigService().loadAgentByTenantId(tenantId, clientKey); - UserTokenInfo userTokenInfo = configuration.getAgentTokenService().getUserTokenInfo(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), openId); + String getRefreshToken = configuration.getAgentTokenService().getRefreshToken(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), openId); // 通过AccessTokenHandler处理逻辑,获取指定租户和客户端的刷新令牌 - return new AppletTokenHandler(agentConfiguration).refreshAccessToken(userTokenInfo.getRefreshToken()); + return new AppletTokenHandler(agentConfiguration).refreshAccessToken(getRefreshToken); } /** diff --git a/dy-java-applet/src/main/java/com/dyj/applet/handler/AppletTokenHandler.java b/dy-java-applet/src/main/java/com/dyj/applet/handler/AppletTokenHandler.java index a5f4713170bd5c5708c206ed4d164898fe2112eb..c51458dc87fac4dadc7b4391c3cac1d15e5270af 100644 --- a/dy-java-applet/src/main/java/com/dyj/applet/handler/AppletTokenHandler.java +++ b/dy-java-applet/src/main/java/com/dyj/applet/handler/AppletTokenHandler.java @@ -32,11 +32,15 @@ public class AppletTokenHandler extends AbstractAppletHandler { return dyResult; } - public DyResult refreshToken(String refreshToken) { + public DyResult refreshToken(String refreshToken, String openId) { RefreshTokenQuery query = new RefreshTokenQuery(); query.setClient_key(agentConfiguration.getClientKey()); query.setRefresh_token(refreshToken); - return getAuthClient().refreshToken(query); + DyResult dyResult = getAuthClient().refreshToken(query); + if (Objects.nonNull(dyResult) && dyResult.getData().getError_code() == 0) { + DyConfigUtils.getAgentTokenService().updateRefreshTokenInfo(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), dyResult.getData().getRefresh_token(), dyResult.getData().getExpires_in(), openId); + } + return dyResult; } public DyResult getClientToken() { @@ -64,7 +68,7 @@ public class AppletTokenHandler extends AbstractAppletHandler { if (Objects.nonNull(dyAppletResult) && dyAppletResult.getError_code() == 0) { DyConfigUtils.getAgentTokenService().setBizToken(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), dyAppletResult.getData().getBiz_token(), dyAppletResult.getData().getBiz_expires_in(), dyAppletResult.getData().getBiz_refresh_token(), dyAppletResult.getData().getBiz_refresh_expires_in(), openId); } - return dyAppletResult; + return dyAppletResult; } /** diff --git a/dy-java-common/src/main/java/com/dyj/common/domain/UserTokenInfo.java b/dy-java-common/src/main/java/com/dyj/common/domain/UserTokenInfo.java index 016405d7c4ba9c6efa597db0b4360febae8a4f4f..7d732960b36b745892e550752f728021bd4cb84d 100644 --- a/dy-java-common/src/main/java/com/dyj/common/domain/UserTokenInfo.java +++ b/dy-java-common/src/main/java/com/dyj/common/domain/UserTokenInfo.java @@ -1,12 +1,14 @@ package com.dyj.common.domain; import java.io.Serializable; +import java.time.LocalDateTime; /** * @author danmo * @date 2024-04-07 13:47 **/ public class UserTokenInfo implements Serializable { + private static final long serialVersionUID = 1L; private String accessToken; @@ -15,10 +17,30 @@ public class UserTokenInfo implements Serializable { private Long expiresIn; + private LocalDateTime expireTime; + private Long refreshExpiresIn; + private LocalDateTime refreshExpireTime; + private String openId; + public LocalDateTime getExpireTime() { + return expireTime; + } + + public void setExpireTime(LocalDateTime expireTime) { + this.expireTime = expireTime; + } + + public void setRefreshExpireTime(LocalDateTime refreshExpireTime) { + this.refreshExpireTime = refreshExpireTime; + } + + public LocalDateTime getRefreshExpireTime() { + return refreshExpireTime; + } + public String getAccessToken() { return accessToken; } diff --git a/dy-java-common/src/main/java/com/dyj/common/domain/vo/RefreshTokenVo.java b/dy-java-common/src/main/java/com/dyj/common/domain/vo/RefreshTokenVo.java index 3d6e601d856bd42b733f9b4d15aa919a2215daaa..e7a1418ec364177cab49e87c5dcbca9d8f197c2a 100644 --- a/dy-java-common/src/main/java/com/dyj/common/domain/vo/RefreshTokenVo.java +++ b/dy-java-common/src/main/java/com/dyj/common/domain/vo/RefreshTokenVo.java @@ -12,7 +12,7 @@ public class RefreshTokenVo extends BaseVo { /** * access_token接口调用凭证超时时间,单位(秒) */ - private Integer expires_in; + private Long expires_in; public String getRefresh_token() { @@ -23,11 +23,11 @@ public class RefreshTokenVo extends BaseVo { this.refresh_token = refresh_token; } - public Integer getExpires_in() { + public Long getExpires_in() { return expires_in; } - public void setExpires_in(Integer expires_in) { + public void setExpires_in(Long expires_in) { this.expires_in = expires_in; } diff --git a/dy-java-common/src/main/java/com/dyj/common/service/IAgentTokenService.java b/dy-java-common/src/main/java/com/dyj/common/service/IAgentTokenService.java index fa34bc086083060cf182f571e9005fffdc965d25..3f7706df43002aa97ce0dd47b68ee4da43b46dc6 100644 --- a/dy-java-common/src/main/java/com/dyj/common/service/IAgentTokenService.java +++ b/dy-java-common/src/main/java/com/dyj/common/service/IAgentTokenService.java @@ -13,8 +13,11 @@ public interface IAgentTokenService { void setUserTokenInfo(Integer tenantId, String clientKey, String accessToken, Long expiresIn, String refreshToken, Long refreshExpiresIn, String openId) throws AuthTokenNotFoundException; + void updateRefreshTokenInfo(Integer tenantId, String clientKey, String refreshToken, Long refreshExpiresIn, String openId) throws AuthTokenNotFoundException; + UserTokenInfo getUserTokenInfo(Integer tenantId, String clientKey, String openId) throws AuthTokenNotFoundException; + String getRefreshToken(Integer tenantId, String clientKey, String openId) throws AuthTokenNotFoundException; ClientTokenInfo setClientTokenInfo(Integer tenantId, String clientKey, String accessToken, Long expiresIn); diff --git a/dy-java-common/src/main/java/com/dyj/common/service/impl/CacheAgentTokenServiceImpl.java b/dy-java-common/src/main/java/com/dyj/common/service/impl/CacheAgentTokenServiceImpl.java index e440efe8f3113cd1fb08134d0edbdf81dfec3ed4..4097be344368c4ab0cfd856c20f7283bf08eb635 100644 --- a/dy-java-common/src/main/java/com/dyj/common/service/impl/CacheAgentTokenServiceImpl.java +++ b/dy-java-common/src/main/java/com/dyj/common/service/impl/CacheAgentTokenServiceImpl.java @@ -33,6 +33,17 @@ public class CacheAgentTokenServiceImpl implements IAgentTokenService { userTokenMap.put(String.format("%s_%s_%s", tenantId, clientKey, openId), userTokenInfo); } + @Override + public void updateRefreshTokenInfo(Integer tenantId, String clientKey, String refreshToken, Long refreshExpiresIn, String openId) throws AuthTokenNotFoundException { + UserTokenInfo userTokenInfo = userTokenMap.get(String.format("%s_%s_%s", tenantId, clientKey, openId)); + if (Objects.isNull(userTokenInfo)) { + throw new AuthTokenNotFoundException("token not found"); + } + userTokenInfo.setRefreshToken(refreshToken); + userTokenInfo.setRefreshExpiresIn(refreshExpiresIn); + userTokenMap.put(String.format("%s_%s_%s", tenantId, clientKey, openId), userTokenInfo); + } + @Override public UserTokenInfo getUserTokenInfo(Integer tenantId, String clientKey, String openId) throws AuthTokenNotFoundException { UserTokenInfo userTokenInfo = userTokenMap.get(String.format("%s_%s_%s", tenantId, clientKey, openId)); @@ -43,7 +54,16 @@ public class CacheAgentTokenServiceImpl implements IAgentTokenService { } @Override - public ClientTokenInfo setClientTokenInfo(Integer tenantId, String clientKey, String accessToken, Long expiresIn){ + public String getRefreshToken(Integer tenantId, String clientKey, String openId) throws AuthTokenNotFoundException { + UserTokenInfo userTokenInfo = userTokenMap.get(String.format("%s_%s_%s", tenantId, clientKey, openId)); + if (Objects.isNull(userTokenInfo)) { + throw new AuthTokenNotFoundException("token not found"); + } + return userTokenInfo.getRefreshToken(); + } + + @Override + public ClientTokenInfo setClientTokenInfo(Integer tenantId, String clientKey, String accessToken, Long expiresIn) { ClientTokenInfo clientTokenInfo = new ClientTokenInfo(); clientTokenInfo.setAccessToken(accessToken); clientTokenInfo.setExpiresIn(expiresIn); diff --git a/dy-java-web/src/main/java/com/dyj/web/DyWebClient.java b/dy-java-web/src/main/java/com/dyj/web/DyWebClient.java index 8d64371fb7d3bb9ab60d73e159f1a00631d00c29..abf1c68e71ed170ebd6b8e98b34e0ffbe16a0373 100644 --- a/dy-java-web/src/main/java/com/dyj/web/DyWebClient.java +++ b/dy-java-web/src/main/java/com/dyj/web/DyWebClient.java @@ -86,7 +86,7 @@ public class DyWebClient extends BaseClient { AgentConfiguration agentConfiguration = configuration.getAgentConfigService().loadAgentByTenantId(tenantId, clientKey); UserTokenInfo userTokenInfo = configuration.getAgentTokenService().getUserTokenInfo(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), openId); // 利用配置信息和授权码获取新的访问令牌 - return new AccessTokenHandler(agentConfiguration).refreshToken(userTokenInfo.getRefreshToken()); + return new AccessTokenHandler(agentConfiguration).refreshToken(userTokenInfo.getRefreshToken(), openId); } @@ -101,7 +101,6 @@ public class DyWebClient extends BaseClient { return new AccessTokenHandler(agentConfiguration).getClientToken(); } - /** * 带租户ID和客户端ID参数的刷新访问令牌方法。 * 使用提供的租户ID和客户端ID刷新访问令牌。 @@ -111,9 +110,9 @@ public class DyWebClient extends BaseClient { public DyResult refreshAccessToken(String openId) { DyConfiguration configuration = configuration(); AgentConfiguration agentConfiguration = configuration.getAgentConfigService().loadAgentByTenantId(tenantId, clientKey); - UserTokenInfo userTokenInfo = configuration.getAgentTokenService().getUserTokenInfo(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), openId); + String getRefreshToken = configuration.getAgentTokenService().getRefreshToken(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), openId); // 通过AccessTokenHandler处理逻辑,获取指定租户和客户端的刷新令牌 - return new AccessTokenHandler(agentConfiguration).refreshAccessToken(userTokenInfo.getRefreshToken()); + return new AccessTokenHandler(agentConfiguration).refreshAccessToken(getRefreshToken); } /** diff --git a/dy-java-web/src/main/java/com/dyj/web/handler/AccessTokenHandler.java b/dy-java-web/src/main/java/com/dyj/web/handler/AccessTokenHandler.java index 29e0adef4fea006f45fda29ce9c9fd104807fd0c..d53030de515c5da54e44b52d2cae3552e34e6a4c 100644 --- a/dy-java-web/src/main/java/com/dyj/web/handler/AccessTokenHandler.java +++ b/dy-java-web/src/main/java/com/dyj/web/handler/AccessTokenHandler.java @@ -2,7 +2,6 @@ package com.dyj.web.handler; import com.dyj.common.config.AgentConfiguration; import com.dyj.common.domain.DyResult; -import com.dyj.common.utils.DyConfigUtils; import com.dyj.common.domain.query.AccessTokenQuery; import com.dyj.common.domain.query.ClientTokenQuery; import com.dyj.common.domain.query.RefreshAccessTokenQuery; @@ -11,6 +10,7 @@ import com.dyj.common.domain.vo.AccessTokenVo; import com.dyj.common.domain.vo.ClientTokenVo; import com.dyj.common.domain.vo.RefreshAccessTokenVo; import com.dyj.common.domain.vo.RefreshTokenVo; +import com.dyj.common.utils.DyConfigUtils; import java.util.Objects; @@ -36,11 +36,15 @@ public class AccessTokenHandler extends AbstractWebHandler { return dyResult; } - public DyResult refreshToken(String refreshToken) { + public DyResult refreshToken(String refreshToken, String openId) { RefreshTokenQuery query = new RefreshTokenQuery(); query.setClient_key(agentConfiguration.getClientKey()); query.setRefresh_token(refreshToken); - return getAuthClient().refreshToken(query); + DyResult dyResult = getAuthClient().refreshToken(query); + if (Objects.nonNull(dyResult) && dyResult.getData().getError_code() == 0) { + DyConfigUtils.getAgentTokenService().updateRefreshTokenInfo(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), dyResult.getData().getRefresh_token(), dyResult.getData().getExpires_in(), openId); + } + return dyResult; } public DyResult getClientToken() { @@ -54,7 +58,11 @@ public class AccessTokenHandler extends AbstractWebHandler { RefreshAccessTokenQuery query = new RefreshAccessTokenQuery(); query.setRefresh_token(refreshToken); query.setClient_key(agentConfiguration.getClientKey()); - return getAuthClient().refreshAccessToken(query); + DyResult dyResult = getAuthClient().refreshAccessToken(query); + if (Objects.nonNull(dyResult) && dyResult.getData().getError_code() == 0) { + DyConfigUtils.getAgentTokenService().setUserTokenInfo(agentConfiguration.getTenantId(), agentConfiguration.getClientKey(), dyResult.getData().getAccess_token(), dyResult.getData().getExpires_in(), dyResult.getData().getRefresh_token(), dyResult.getData().getRefresh_expires_in(), dyResult.getData().getOpen_id()); + } + return dyResult; }