package com.zehong.web.controller.api; import com.alibaba.fastjson.JSONObject; import com.zehong.common.core.domain.AjaxResult; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.Signature; import java.security.spec.PKCS8EncodedKeySpec; import java.util.Base64; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/getout") public class OutController { private static final Logger LOGGER = LoggerFactory.getLogger(HttpClient.class); /** * 返回成功状态码 */ private static final int SUCCESS_CODE = 200; @GetMapping(value = "/{token}") public AjaxResult getindex(@PathVariable String token) throws Exception{ String accessKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3Z0cqRQ8HtDnuTy1bEow" + "XUZD8yG6aXW/nSIMoCLJGD0MMJpx/1SokTksPeJdUDrPZpDk+DJAohEtO2JjOuTj" + "1DPMEhSPYnyogNumECnxCL5t/cnVNaPCIdHvQjXT4McvICys7eqw1gJ64I9vM1jx" + "yIBEiSMurU84c3XAlPwoXHDtNmEIT91vZr+zSfXpGog9SIOP68oBFX+U98WgVUSY" + "w9icXlDByjVJhBK/7vpa8rkT8psgxSrDpiOpUx2aQQo45vuPGgk1mJUXW/PfE9wD" + "/i7IMxnx+aK7pvPEv7YC3x2zGiT4OHS8TZ9sgmA4BpJDU7mg40H3a26cG1evQCRR" + "iwIDAQAB"; String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDdnRypFDwe0Oe5" + "PLVsSjBdRkPzIbppdb+dIgygIskYPQwwmnH/VKiROSw94l1QOs9mkOT4MkCiES07" + "YmM65OPUM8wSFI9ifKiA26YQKfEIvm39ydU1o8Ih0e9CNdPgxy8gLKzt6rDWAnrg" + "j28zWPHIgESJIy6tTzhzdcCU/ChccO02YQhP3W9mv7NJ9ekaiD1Ig4/rygEVf5T3" + "xaBVRJjD2JxeUMHKNUmEEr/u+lryuRPymyDFKsOmI6lTHZpBCjjm+48aCTWYlRdb" + "898T3AP+LsgzGfH5orum88S/tgLfHbMaJPg4dLxNn2yCYDgGkkNTuaDjQfdrbpwb" + "V69AJFGLAgMBAAECggEBANcrJ1umsOS+sm4w2nlk4uZ9RZY35jVkxQF8wMNuYs9s" + "3nwGSK6+9Nfjqef/89fk8eBEyHuO1yBECyXAVlYlTGuJSxc27SyTmktaeDbzcfqq" + "YkLqB2AIOoH5whMIDksNOd1EYzaxCrcPO1zzBuXU8xRYLbL0/On6o/W+m5hL56gv" + "kcoc84oLHtXJ3VS+W9c3xq1cQqgFMIdg9/GN0nbPee8Uw2McYv/xmQPVXBOhQ59q" + "uuvyXhfE9W0un9QA8rGkNFvsD1NSx6mv+GXLn+yQcTIOiGmyTV8ynXKvqZ/auQYQ" + "1HLOejzgVrOIFD/2aAICph61+aX4LMTNAJzUV0SHZXECgYEA+AD7TOLRO5vKAJci" + "RBAqOUBgu3KRmd2jZQvvNrrRhPPG+hq8+HpVKOtdd6rwoGD+3Z0ewcvjoLbnQ3G0" + "GeqXWHu5OjqWXPJJyffos0XOAsiZ6NHOzzIEhclZZPKrfw1Qr8mDm5JZ5TWGN0EM" + "MFpl9IHRKPvlCkfYEtx/+c3k3gkCgYEA5MJOjk9TXn7RZXFTiizgMNJMQsKg0KPG" + "vP0NwnHskialL8vnefknMXfTNhGjV2krCppj00efEhfE+S7shZ4mil7PRWoH/YET" + "uLTbhHmy6ZhcMigJWSjHO3sWKaaR406So2lWSfSluw6XsK27Cj3f3+tKQC7GgxuX" + "QS27bekM1/MCgYAicoh1Wn/zhqUdReDVkWU8BIwrHTPKKnX6oBi/Al392JqHvNUI" + "sn1HrMGT0KORs0dTYvKVuotIlH806AM7IlGZUb4dr2uZR3ImYo/o7sY5rsFqDFJs" + "hycHqjsHgYl+oUvWzue/4SkpZDDbVeaqhLPqrWlvBuX+cpI5tHT2LroeeQKBgQDR" + "VY4VZDniSyLLNb1AwHgXtRncLcaDppuC7f7dZOsbgwm+h1U3pOxctE4vOEzE/JRK" + "i6W1/eBu6hlx/aKrU2HpVYFPAAx3ytqFN9t5ivRSFv6nV0PWtx46LBTH4Im3/Hrr" + "1sUDwEC4wE3He/OhF6X6fpHf0e4Oo/zxxCu0FIOQSQKBgQDLm4jfsykntDeViy/W" + "KzxnhMStIyEhRAJT66aveX1R6k11lTlO3aArTzfiaHiDne6R/4LTfWuHq7gyy84E" + "NFJBb7kGe1c2zOIFQ/wuVyA7KR6aN6YeTdJHYhV7RsHH4vLfwb0SBqEtBePqxKkV" + "xznrDUoIkeDx0+R/fD8uMNnRRQ=="; // 10 位随机字符串 String randomStr = randomstring(10); // 获取当前时间戳 String timeStamp = String.valueOf(System.currentTimeMillis()); String data = String.format("%s%s%s", accessKey, randomStr, timeStamp); String signMsg = ""; try { byte[] keyBytes = Base64.getDecoder().decode(privateKey); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey key = keyFactory.generatePrivate(keySpec); Signature signature = Signature.getInstance("SHA1withRSA"); signature.initSign(key); signature.update(data.getBytes(StandardCharsets.UTF_8)); signMsg = Base64.getEncoder().encodeToString(signature.sign()); } catch (Exception e) { e.printStackTrace(); } // 打印结果 System.out.println("x-access-key = " + accessKey); System.out.println("x-random-str = " + randomStr); System.out.println("x-time-stamp = " + timeStamp); System.out.println("x-access-sign = " + signMsg); Map<String,Object> map = new HashMap<>(); map.put("x-access-key" , accessKey); map.put("x-random-str" , randomStr); map.put("x-time-stamp" , timeStamp); map.put("x-access-sign" , signMsg); String a = sendPostJson("",map,token); return AjaxResult.success(a); } public String sendPostJson(String url, Map<String,Object> map, String token) throws Exception{ url = "http://61.240.155.30:30539/uni/uniauth/auth/getUserInfoByTicket?ticket="+token; JSONObject jsonObject = null; CloseableHttpClient client = null; CloseableHttpResponse response = null; try{ /** * 创建一个httpclient对象 */ client = HttpClients.createDefault(); /** * 创建一个post对象 */ HttpGet post = new HttpGet(url); /** * 设置请求的报文头部的编码 */ //post.setHeader(new BasicHeader("Content-Type", "application/json; charset=utf-8")); /** * 设置请求的报文头部的编码 */ post.setHeader(new BasicHeader("x-access-key", (String) map.get("accessKey"))); post.setHeader(new BasicHeader("x-random-str", (String) map.get("randomStr"))); post.setHeader(new BasicHeader("x-time-stamp", (String) map.get("timeStamp"))); post.setHeader(new BasicHeader("x-access-sign", (String) map.get("signMsg"))); /** * 执行post请求 */ response = client.execute(post); /** * 获取响应码 */ int statusCode = response.getStatusLine().getStatusCode(); if (SUCCESS_CODE == statusCode){ /** * 通过EntityUitls获取返回内容 */ String result = EntityUtils.toString(response.getEntity(),"UTF-8"); /** * 转换成json,根据合法性返回json或者字符串 */ try{ jsonObject = (JSONObject) com.alibaba.fastjson.JSONObject.parseObject(result); Map<String,Object> usermap = (Map<String,Object>)jsonObject.get("result"); return (String) usermap.get("tel"); }catch (Exception e){ return result; } }else{ LOGGER.error("HttpClientService-line: {}, errorMsg:{}", 146, "POST请求失败!"); } }catch (Exception e){ LOGGER.error("HttpClientService-line: {}, Exception:{}", 149, e); }finally { response.close(); client.close(); } return null; } public String randomstring(int num){ String str =""; // 获取0到n之间的随机整数 int n = 9; // 上限值 for(int i=0;i<num;i++){ str =str+(int)(Math.random() * n); } return str; } }