根据用户名和密码获取第三方token(失效时间7天)



一、根据用户名和密码获取token

  1. 定义线程安全map
    
    private static Map<String, String> tokenMap = new ConcurrentHashMap<>(4);
    
    private static final integer expireDays = 7;

  2. 刷新map
    /**
         * 刷新token
         * @param token
         */
        private void refreshTokenMap(String token) {
            if (StringUtils.isNotEmpty(token)) {
                tokenMap.clear();
                tokenMap.put("time", LocalDateTime.now().toString());
                tokenMap.put("token", token);
            }
        }

  3. 执行
    @Override
        public String getToken() {
            if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
                return null;
            }
            // 从缓存池中获取token数据
            String token = null;
            if (!tokenMap.isEmpty()) {
                String preTokenTime = tokenMap.get("time");
                // 判断当前时间是否没有超过上一次token获取时间的7天后;1小时为误差值,即超过6天23小时即重新获取token
                boolean isValid= LocalDateTime.now().isBefore(LocalDateTime.parse(preTokenTime).plusDays(expireDays).minusHours(1));
                if (isValid) {
                    token = tokenMap.get("token");
                }
            }
            if (StringUtils.isNotEmpty(token)) {
                return token;
            }
            //token获取不到或token失效则重新去请求token
            String requestUrl = url + "xxxx";
            HttpEntity requestEntity = MultipartEntityBuilder.create()
                    .setCharset(StandardCharsets.UTF_8)
                    .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
                    .addTextBody("username", username)
                    .addTextBody("password", password)
                    .build();
            HttpClientResult response = HttpClientUtils.doPost(requestUrl, requestEntity);
            if (response.getCode() != HttpStatus.OK.value()) {
                if(logger.isErrorEnabled()) {
                    logger.error("获取token时发生错误,接口地址{}, ResponseStatusCode={}, ResponseContent={}", requestUrl,
                            response.getCode(),  response.getContent());
                }
                return null;
            }
            final String content = response.getContent();
            try {
                JSONObject contentObj = JSON.parseObject(content);
                 token = contentObj.getString("token");
                // 重新缓存token
                refreshTokenMap(token);
            }catch (Exception e) {
                if(logger.isErrorEnabled()) {
                    logger.error("获取token时发生错误,JSON解析响应内容异常,responseContent={}", content);
                }
                return null;
            }
            return token;
        }




总结

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值