获取第三方项目中的token ,并获取数据 将数据执行至另一个接口

需求: 从本项目中访问另一个项目得token,首先得访问另一个项目的登录接口(sys/login),获得其token,若token在某一时间段内(40秒),则无需重新获取token,否则 重新获取token,然后在访问另一个项目的接口,并返回数据。

工具:使用了  Hutool一个小而全的Java工具类库。

1.安装Hutool,在项目的pom.xml的dependencies中加入以下内容:


<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

2.在yml文件中配置其路径

3.写一个配置文件 

用到了三个注解

@Component
@ConfigurationProperties(prefix = "sxjk-szgs-jiekou") 双引号中的要与yml文件中的相对应
@Data

4.获取第三方接口token

private static Map<String,String> tokenMap = null;

    @Autowired
    private SxjkSzgsJiekouConfig sxjkSzgsJiekouConfig;


    /**
     * 获取第三方项目token
     * @return
     */
    private static String token = null;
    public  String getToken() {
        if(tokenMap==null){
            tokenMap = new HashMap<>();
        }
        if(isTokenVail()){//判断token是否有值 且是否有效
//            return tokenMap.get("token");
            System.out.println("不需要获取新token");
        }else{
            long times = Calendar.getInstance().getTimeInMillis();
            //获取用户密码
            Map jsonbody = new HashMap();
            jsonbody.put("username",sxjkSzgsJiekouConfig.getUsername());
            jsonbody.put("password", sxjkSzgsJiekouConfig.getPassword());
            String json = JSONUtil.toJsonStr(jsonbody);
            //登录路径
            String loginUrl = sxjkSzgsJiekouConfig.getUrl()+sxjkSzgsJiekouConfig.getLogin_url();
            String login = HttpUtil.createPost(loginUrl).contentType("application/json")
                    .body(json).execute().body();
            Map jsonMap = JSONUtil.toBean(login, Map.class);
            if (jsonMap != null && jsonMap.get("code") != null && String.valueOf(jsonMap.get("code")).equals("200")) {
                token = String.valueOf(((Map) jsonMap.get("result")).get("token"));
                tokenMap.put("token",token);
                tokenMap.put("timestrap", String.valueOf(times));
                tokenMap.put("token_times", sxjkSzgsJiekouConfig.getTokenTimes());
//                return token;
            } else {
                return null;
            }
        }
        return tokenMap.get("token");
    }

5.计算token时间戳

 /**
     * 计算时间戳
     * @return
     */
    private boolean isTokenVail(){
        if(tokenMap.isEmpty()){
            return false;
        }else{
            //时间戳
            long timestrap = Long.parseLong(String.valueOf(tokenMap.get("timestrap")));
            Date nowtime = new Date();
            //当前时间戳
            long times = Calendar.getInstance().getTimeInMillis();
            long subtime = times - timestrap;
            long tokenTimes = Long.parseLong(String.valueOf(tokenMap.get("token_times")));
            if((tokenTimes-subtime)>20000){
                return true;
            }else{
                return false;
            }
        }

    }

6.访问第三方工具类

@Component
public  class AccessApiUtil {
    @Autowired
    private TokenUtils tokenUtils;
    /**
     * 访问接口工具类
     *
     * @return
     * @throws IOException
     */
    public String selectApi(String url, Map<String, String> map) {
        //获取token
        String token = tokenUtils.getToken();
        //发送post请求body传参并接收响应数据,也可以用from表单传参
        String result = HttpUtil.createPost(url).header("Content-Type", "application/json")
                .header("X-Access-Token",token)
                .body(JSONUtil.toJsonStr(map))
                .execute()
                .body();
        return result;
    }
}

7.测试

  /**
     * 访问第三方接口
     *
     * @return
     * @throws IOException
     */
    @PreAuthorize("@ss.hasPermi('system:whptj:accessApi')")
    @RequestMapping("/accessApi")
    public Object accessApi(@RequestBody DateVo dateVo)  {

          Map<String, String> map = new HashMap<>();//存放参数
          map.put("startDate", dateVo.getStartDate());
          map.put("endDate", dateVo.getEndDate());
          map.put("areaId", dateVo.getAreaId());
          String url = sxjkSzgsJiekouConfig.getUrl()+dateVo.getApiUrl();
        //访问第三方接口
        String result = accessApiUtil.selectApi(url, map);
        //可以有null
        return JSONObject.parseObject(result);
        //数据为null了 不显示
//        return JSONUtil.parseObj(result,true);
    }

每日一言:

鸡蛋,从外打破是食物,从内打破是生命,人生也是如此,从外打破是压力,从内打破是成长

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值