123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package com.kmall.admin.haikong.task;
- import com.fasterxml.jackson.core.type.TypeReference;
- import com.kmall.admin.haikong.client.HaiKongMemberTemplate;
- import com.kmall.admin.haikong.constant.Constants;
- import com.kmall.admin.haikong.dto.AccessTokenDTO;
- import com.kmall.admin.haikong.utils.Response;
- import com.kmall.admin.utils.jackson.JacksonUtil;
- import com.kmall.manager.manager.redis.JedisUtil;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- import org.springframework.util.StringUtils;
- import java.io.IOException;
- import java.util.Objects;
- import java.util.Optional;
- /**
- * 刷新会员系统token定时任务
- * @author lhm
- * @createDate 2021-10-30
- */
- @Component
- public class MemberSysAccessTokenRefreshTask {
- private static final Logger log = LoggerFactory.getLogger(MemberSysAccessTokenRefreshTask.class);
- @Autowired
- private HaiKongMemberTemplate haiKongMemberTemplate;
- @Scheduled(cron = "0/30 * * * * ?")
- public void refresh() {
- String refreshToken = JedisUtil.get(Constants.MEMBER_SYS_REFRESH_TOKEN_REDIS_KEY);
- String accessToken = JedisUtil.get(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY);
- // if (!StringUtils.isEmpty(refreshToken) && !StringUtils.isEmpty(accessToken)) {
- // return;
- // }
- boolean a = false;
- if (StringUtils.isEmpty(refreshToken)) {
- try {
- log.info("accessToken和refreshToken缓存都为空!开始刷新缓存......");
- String accessTokenJson = haiKongMemberTemplate.getAccessToken();
- a = true;
- handleResponse(accessTokenJson, a);
- log.info("accessToken和refreshToken缓存都为空!刷新缓存完成......");
- } catch (Exception e) {
- log.error(e.getMessage() + "====>", e);
- }
- } else if (!StringUtils.isEmpty(refreshToken)) {
- try {
- String refreshAccessTokenJson = haiKongMemberTemplate.refreshAccessToken(refreshToken);
- handleResponse(refreshAccessTokenJson, a);
- } catch (Exception e) {
- log.error(e.getMessage() + "====>", e);
- }
- }
- }
- private void handleResponse(String json, Boolean a) {
- Response<AccessTokenDTO> response = null;
- try {
- response = JacksonUtil.getObjectMapper().readValue(json, new TypeReference<Response<AccessTokenDTO>>() {
- });
- } catch (IOException e) {
- log.error("解析海控会员系统响应结果失败!", e);
- return;
- }
- if (Objects.nonNull(response) && response.getSuccess()) {
- AccessTokenDTO accessTokenDTO = response.getData();
- JedisUtil.del(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY);
- JedisUtil.set(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY, JacksonUtil.toJson(accessTokenDTO), (60 * 60 * 2) - (60 * 10));
- if (a) {
- JedisUtil.del(Constants.MEMBER_SYS_REFRESH_TOKEN_REDIS_KEY);
- JedisUtil.set(Constants.MEMBER_SYS_REFRESH_TOKEN_REDIS_KEY, Optional.ofNullable(accessTokenDTO.getRefreshToken()).orElse(""), (60 * 60 * 24 * 7));
- }
- } else if (Objects.nonNull(response) && !response.getSuccess() && Response.ErrorCodeEnum.INVALID_REFRESH.getErrorCode().equals(response.getErrorCode())) {
- log.info("海控会员系统RefreshToken已失效,重新获取AccessToken与RefreshToken!");
- JedisUtil.del(Constants.MEMBER_SYS_REFRESH_TOKEN_REDIS_KEY);
- refresh();
- } else {
- log.error("请求海控会员系统AccessToken返回响应为空!");
- }
- }
- public String getAccessToken() throws Exception {
- String accessTokenJson = JedisUtil.get(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY);
- if (StringUtils.isEmpty(accessTokenJson)) {
- refresh();
- accessTokenJson = JedisUtil.get(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY);
- AccessTokenDTO accessTokenDTO = JacksonUtil.fromStringJson(accessTokenJson, AccessTokenDTO.class);
- if (Objects.isNull(accessTokenDTO)) {
- log.error("accessToken数据转为对象失败!");
- throw new Exception("accessToken数据转为对象失败!");
- }
- return accessTokenDTO.getAccessToken();
- } else {
- AccessTokenDTO accessTokenDTO = JacksonUtil.fromStringJson(accessTokenJson, AccessTokenDTO.class);
- if (Objects.isNull(accessTokenDTO)) {
- log.error("accessToken数据转为对象失败!");
- throw new Exception("accessToken数据转为对象失败!");
- }
- return accessTokenDTO.getAccessToken();
- }
- }
- }
|