1.已知API及功能
带token访问
添加head Cookie token=MKErXRTeUq5aKzzvYRZkHuvq5QsAKeS2mQ8eDekv headers处添加 Cookie token=....
获取token
http://10.127.2.119:5050/v2-beta/token {"code":"fiberhome:fh123456","authProvider":"localAuthConfig"} 生成Token
获取环境id
http://10.127.2.119:5050/v2-beta/projects?limit=-1&sort=name
获取所有栈列表
http://10.127.2.119:5050/v2-beta/projects/1a5/stacks
获取栈下所有服务
http://10.127.2.119:5050/v2-beta/projects/1a5/stacks/1st5/services
2.分布实现API功能
Entity实体类
JwtToken
import lombok.Data;
@Data
public class JwtToken {
private String type;
private String message;
private String status;
private String code;
private String jwt;
private String user;
private String userType;
}
Datas 中间实体类
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
public class Datas {
@JsonProperty("data")
private List<DataDetail> detailList;
}
DataDetail
import lombok.Data;
@Data
public class DataDetail {
private String name;
private String id;
private String state;
private String accountId;
}
配置类
import lombok.Data;
import org.springframework.context.annotation.Configuration;
/**
*
* @author lifc
* @since 2020-10-28
*/
@Data
@Configuration
public class RanCherConfig {
/**
* fitMgr 申请token使用的code
*/
private String code = "fiberhome:fh123456";
/**
* fitMgr 申请token使用的authProvider
*/
private String authProvider = "localAuthConfig";
/**
* fitMgr申请token的服务地址
*/
private String ranCherAuthUrl = "http://10.127.2.119:5050/v2-beta/token";
/**
* 获取环境id的服务地址
*/
private String ranCherIdUrl = "http://10.127.2.119:5050/v2-beta/projects?limit=-1&sort=name";
/**
* 获取所有栈列表的服务前缀地址
*/
private String ranCherListUrl = "http://10.127.2.119:5050/v2-beta/projects/";
}
Controller层
import com.fitmgr.ces.client.rancher.RanCherClient;
import com.fitmgr.ces.client.rancher.eneity.DataDetail;
import com.fitmgr.ces.client.rancher.eneity.JwtToken;
import com.fitmgr.ces.common.config.RanCherConfig;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.Serializable;
import java.util.List;
@Data
@Slf4j
@Validated
@RestController
public class RestTemplateController implements Serializable {
@Autowired
private RanCherClient ranCherClient;
@Autowired
private RanCherConfig ranCherConfig;
@GetMapping("/test")
public JwtToken test() {
return ranCherClient.tokenAuth(ranCherConfig.getCode(), ranCherConfig.getAuthProvider());
}
@GetMapping("/test1")
public List<DataDetail> test1() {
return ranCherClient.getId();
}
@GetMapping("/test2")
public List<DataDetail> test2() {
return ranCherClient.getList();
}
@GetMapping("/test3")
public List<DataDetail> test3() {
return ranCherClient.getService();
}
}
RanCherClient 实现接口功能
import com.fitmgr.ces.client.rancher.eneity.DataDetail;
import com.fitmgr.ces.client.rancher.eneity.Datas;
import com.fitmgr.ces.client.rancher.eneity.JwtToken;
import com.fitmgr.ces.common.config.RanCherConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Auther: lifc
* @Date:Create in 14:32 2020/10/29
*/
@Component
public class RanCherClient implements Serializable {
@Resource(name = "CesRestTemplate")
private RestTemplate restTemplate;
@Autowired
private RanCherConfig ranCherConfig;
/**
* 获取访问服务需要的token
*
* @param code
* @param authProvider
* @return jwtToken
*/
public JwtToken tokenAuth(String code, String authProvider) {
String url = ranCherConfig.getRanCherAuthUrl();
Map<String, String> request = new HashMap<>();
request.put("code", code);
request.put("authProvider", authProvider);
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/json");
HttpEntity req = new HttpEntity<>(request, requestHeaders);
ResponseEntity<JwtToken> tokenResponseEntity = restTemplate.postForEntity(url, req, JwtToken.class);
JwtToken jwtToken = tokenResponseEntity.getBody();
return jwtToken;
}
/**
* 获取外层ID和NAME列表
*
* @return List<DataDetail>
*/
public List<DataDetail> getId() {
String url = ranCherConfig.getRanCherIdUrl();
String oriJwt = tokenAuth(ranCherConfig.getCode(), ranCherConfig.getAuthProvider()).getJwt();
String jwt = "token=" + oriJwt;
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/json");
requestHeaders.add("Cookie", jwt);
HttpEntity req = new HttpEntity<>(requestHeaders);
ResponseEntity<Datas> datasResponseEntity = restTemplate.exchange(url, HttpMethod.GET, req, Datas.class);
Datas datas = datasResponseEntity.getBody();
List<DataDetail> dataDetails = datas.getDetailList();
return dataDetails;
}
/**
* 获取NAME为 Default 的列表
*
* @return List<DataDetail>
*/
public List<DataDetail> getList() {
List<DataDetail> OridataDetails = getId();
for (DataDetail dataDetail : OridataDetails) {
String name = dataDetail.getName();
if (name != null && name != "" && name.equals("Default")) {
String id = dataDetail.getId();
String OriUrl = ranCherConfig.getRanCherListUrl();
String url = OriUrl + id + "/stacks/";
String oriJwt = tokenAuth(ranCherConfig.getCode(), ranCherConfig.getAuthProvider()).getJwt();
String jwt = "token=" + oriJwt;
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/json");
requestHeaders.add("Cookie", jwt);
HttpEntity req = new HttpEntity<>(requestHeaders);
ResponseEntity<Datas> datasResponseEntity = restTemplate.exchange(url, HttpMethod.GET, req, Datas.class);
Datas datas = datasResponseEntity.getBody();
List<DataDetail> dataDetails = datas.getDetailList();
return dataDetails;
}
}
return null;
}
/**
* 获取NAME为 fitmgr 的列表
*
* @return List<DataDetail>
*/
public List<DataDetail> getService() {
List<DataDetail> OridataDetail = getList();
for (DataDetail dataDetail : OridataDetail) {
if (dataDetail.getName().equals("fitmgr")) {
String id = dataDetail.getId();
String accountID = dataDetail.getAccountId();
String url = ranCherConfig.getRanCherListUrl() + accountID + "/stacks/" + id + "/services";
String oriJwt = tokenAuth(ranCherConfig.getCode(), ranCherConfig.getAuthProvider()).getJwt();
String jwt = "token=" + oriJwt;
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/json");
requestHeaders.add("Cookie", jwt);
HttpEntity req = new HttpEntity<>(requestHeaders);
ResponseEntity<Datas> datasResponseEntity = restTemplate.exchange(url, HttpMethod.GET, req, Datas.class);
Datas datas = datasResponseEntity.getBody();
List<DataDetail> dataDetails = datas.getDetailList();
return dataDetails;
}
}
return null;
}
}
RestTemplate配置文件
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
/**
*
* @author lcy
* @since 2020-04-07
*/
@Configuration
public class RestTemplateConfig {
@Bean(name="CesRestTemplate")
public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException{
final HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
//设置过期时间
factory.setConnectionRequestTimeout(50000);
factory.setReadTimeout(50000);
final SSLContextBuilder builder = new SSLContextBuilder();
try {
//全部信任 不做身份鉴定
builder.loadTrustMaterial(null, (X509Certificate[] x509Certificate, String s) -> true);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw e;
} catch (KeyStoreException e) {
throw e;
}
SSLConnectionSocketFactory socketFactory = null;
try {
//客户端支持SSLv2Hello,SSLv3,TLSv1,TLSv1
socketFactory = new SSLConnectionSocketFactory(builder.build(), new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
//为自定义连接器注册http与https
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", new PlainConnectionSocketFactory()).register("https", socketFactory).build();
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(registry);
poolingHttpClientConnectionManager.setMaxTotal(500);
final CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).setConnectionManager(poolingHttpClientConnectionManager).setConnectionManagerShared(true).build();
factory.setHttpClient(httpClient);
final RestTemplate restTemplate = new RestTemplate(factory);
return restTemplate;
}
}
postFortEntity() + getBody() = postForObject
都是获取响应体
RestTemplate 还有PUT,DELETE方法
用于修改或删除 已获得的第三方接口内容
exchange 方法 4种请求方式都支持