package com.yuanchu.mom.util; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.yuanchu.mom.pojo.AuthApi; import com.yuanchu.mom.pojo.Company; import com.yuanchu.mom.pojo.Post; import com.yuanchu.mom.pojo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.Duration; import java.util.List; import java.util.concurrent.TimeUnit; @Component public class HeaderToken { @Resource private RedisTemplate redisTemplate; public static void main(String[] args) { HttpRequest request = HttpRequest.post("https://ztt-sso.asuncloud.net/oauth2/token") .header("Content-Type", "application/x-www-form-urlencoded") .form("grant_type", "client_credentials") .form("client_id", "8b2f2c7e-2ab9-4718-8193-c0c636dceba8") .form("client_secret", "db59b70d28ab1865aafe4008f59d4760"); HttpResponse response = request.execute(); System.out.println(response.body()); } public String fetchNewAccessToken() { HttpRequest request = HttpRequest.post("https://ztt-sso.asuncloud.net/oauth2/token") .header("Content-Type", "application/x-www-form-urlencoded") .form("grant_type", "client_credentials") .form("client_id", "8b2f2c7e-2ab9-4718-8193-c0c636dceba8") .form("client_secret", "db59b70d28ab1865aafe4008f59d4760"); HttpResponse response = request.execute(); System.out.println(response.body()); ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode = null; try { jsonNode = objectMapper.readTree(response.body()); String accessToken = jsonNode.get("access_token").asText(); redisTemplate.opsForValue().set("access_token",accessToken); redisTemplate.expire("access_token", dataTime("access_token"), TimeUnit.SECONDS); } catch (JsonProcessingException e) { e.printStackTrace(); } return null; } private String accessToken ; //判断是否过期 public String getAccessToken() { accessToken=(String) redisTemplate.opsForValue().get("access_token"); if (accessToken == null) { accessToken = fetchNewAccessToken(); } return accessToken; } //判断 token 是否已存在 public String getToken(String token) { String o = redisTemplate.opsForValue().get(token).toString(); if (o != null && !o.isEmpty()) { return o; }else{ redisTemplate.expire(token,dataTime("access_token"),TimeUnit.SECONDS); String tokens = redisTemplate.opsForValue().get(token).toString(); return tokens; } // 获取 token // accessToken = fetchNewAccessToken(); // return accessToken; } //获取token过期时间 public Long dataTime(String token){ Long access_token = redisTemplate.getExpire(token); if(access_token != null && access_token >60) { redisTemplate.expire(token, access_token - 60 ,TimeUnit.SECONDS); return access_token - 60; }//就直接调用 return null; } //调用 public List companyUrl() { String accessToken = getAccessToken(); String getToken= getToken(accessToken); String apiUrl =AuthApi.companies; // 替换为实际的API端点URL HttpRequest request = HttpRequest.get(apiUrl) .header("Authorization", "Bearer " + accessToken); HttpResponse response = request.execute(); ObjectMapper objectMapper = new ObjectMapper(); String body = response.body(); List companies = null; try { companies = objectMapper.readValue(body, new TypeReference>(){}); } catch (JsonProcessingException e) { e.printStackTrace(); } return companies; } public List postUrl(String companyId) { String accessToken = getAccessToken(); String token = getToken(accessToken); String apiUrl =AuthApi.post+companyId; // 替换为实际的API端点URL HttpRequest request = HttpRequest.get(apiUrl) .header("Authorization", "Bearer " + accessToken); HttpResponse response = request.execute(); ObjectMapper objectMapper = new ObjectMapper(); String body = response.body(); List posts = null; try { posts=objectMapper.readValue(body, new TypeReference>() {}); } catch (JsonProcessingException e) { e.printStackTrace(); } return posts; } public List userUrl(String companyId) { String accessToken = getAccessToken(); String token = getToken(accessToken); String apiUrl =AuthApi.simple+companyId; // 替换为实际的API端点URL HttpRequest request = HttpRequest.get(apiUrl) .header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/form-data"); HttpResponse response = request.execute(); ObjectMapper objectMapper = new ObjectMapper(); String body = response.body(); List user=null; try { user= objectMapper.readValue(body,new TypeReference>(){}); } catch (JsonProcessingException e) { e.printStackTrace(); } return user; } }