| | |
| | | |
| | | import cn.hutool.http.HttpRequest; |
| | | import cn.hutool.http.HttpResponse; |
| | | import cn.hutool.log.Log; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.core.type.TypeReference; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.yuanchu.mom.exception.ErrorException; |
| | | import com.yuanchu.mom.mapper.UserMapper; |
| | | import com.yuanchu.mom.pojo.AuthApi; |
| | | import com.yuanchu.mom.pojo.Company; |
| | | import com.yuanchu.mom.pojo.Post; |
| | | import com.yuanchu.mom.pojo.Person; |
| | | 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.Objects; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @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()); |
| | | } |
| | | @Resource |
| | | private UserMapper userMapper; |
| | | |
| | | public String fetchNewAccessToken() { |
| | | HttpRequest request = HttpRequest.post("https://ztt-sso.asuncloud.net/oauth2/token") |
| | | HttpRequest request = HttpRequest.post(AuthApi.code) |
| | | .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"); |
| | | .form("client_id", AuthApi.appId) |
| | | .form("client_secret", AuthApi.appSecret); |
| | | HttpResponse response = request.execute(); |
| | | |
| | | System.out.println(response.body()); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | JsonNode jsonNode = null; |
| | | JsonNode jsonNode; |
| | | 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(); |
| | | Log.get().info("获取人事系统token:"+accessToken); |
| | | redisTemplate.opsForValue().set("access_token",accessToken,jsonNode.get("expires_in").asInt() - 60,TimeUnit.SECONDS); |
| | | return accessToken; |
| | | } catch (Exception e) { |
| | | throw new ErrorException(e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | private String accessToken ; |
| | | |
| | | //判断是否过期 |
| | | //判断是否存在 |
| | | public String getAccessToken() { |
| | | accessToken=(String) redisTemplate.opsForValue().get("access_token"); |
| | | if (accessToken == null) { |
| | | String accessToken; |
| | | if (!redisTemplate.hasKey("access_token")) { |
| | | accessToken = fetchNewAccessToken(); |
| | | }else{ |
| | | accessToken = redisTemplate.opsForValue().get("access_token")+""; |
| | | } |
| | | 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<Company> companyUrl() { |
| | | public List<Company> companyUrl() { |
| | | String accessToken = getAccessToken(); |
| | | String getToken= getToken(accessToken); |
| | | String apiUrl =AuthApi.companies; // 替换为实际的API端点URL |
| | | HttpRequest request = HttpRequest.get(apiUrl) |
| | | HttpRequest request = HttpRequest.get(AuthApi.companies) |
| | | .header("Authorization", "Bearer " + accessToken); |
| | | HttpResponse response = request.execute(); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | String body = response.body(); |
| | | List<Company> companies = null; |
| | | List<Company> companies; |
| | | try { |
| | | companies = objectMapper.readValue(body, new TypeReference<List<Company>>(){}); |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | companies = JSON.parseArray(request.execute().body(), Company.class); |
| | | }catch (Exception e){ |
| | | throw new ErrorException(e.getMessage()); |
| | | } |
| | | return companies; |
| | | return companies.stream().filter(ob->{ |
| | | if(ob.getStatus().equals("enabled")) return true; |
| | | return false; |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | |
| | | public List<Post> postUrl(String companyId) { |
| | | public List<Person> userUrl(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<Post> posts = null; |
| | | try { |
| | | posts=objectMapper.readValue(body, new TypeReference<List<Post>>() {}); |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return posts; |
| | | } |
| | | |
| | | public List<User> userUrl(String companyId) { |
| | | String accessToken = getAccessToken(); |
| | | String token = getToken(accessToken); |
| | | String apiUrl =AuthApi.simple+companyId; // 替换为实际的API端点URL |
| | | HttpRequest request = HttpRequest.get(apiUrl) |
| | | HttpRequest request = HttpRequest.get(AuthApi.simple+companyId) |
| | | .header("Authorization", "Bearer " + accessToken) |
| | | .header("Content-Type", "application/form-data"); |
| | | HttpResponse response = request.execute(); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | String body = response.body(); |
| | | List<User> user=null; |
| | | List<Person> person; |
| | | try { |
| | | user= objectMapper.readValue(body,new TypeReference<List<User>>(){}); |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | person = JSON.parseArray(request.execute().body(), Person.class); |
| | | }catch (Exception e){ |
| | | throw new ErrorException(e.getMessage()); |
| | | } |
| | | return user; |
| | | return person.stream().filter(ob->{ |
| | | if(Objects.equals(ob.getStatus(), "enabled")) { |
| | | ob.setIsLive(userMapper.selectCount(Wrappers.<User>lambdaQuery().eq(User::getAccount, ob.getEmployeeID()))); |
| | | return true; |
| | | } |
| | | return false; |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | } |