import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustStrategy; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; /** * RestTemplate配置类 */ @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate(){ return new RestTemplate(generateHttpsRequestFactory()); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setReadTimeout(5000);//单位为ms factory.setConnectTimeout(5000);//单位为ms return factory; } public HttpComponentsClientHttpRequestFactory generateHttpsRequestFactory() { try { TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true; SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build(); SSLConnectionSocketFactory connectionSocketFactory = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier()); HttpClientBuilder httpClientBuilder = HttpClients.custom(); httpClientBuilder.setSSLSocketFactory(connectionSocketFactory); CloseableHttpClient httpClient = httpClientBuilder.build(); HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); factory.setHttpClient(httpClient); factory.setConnectTimeout(10 * 1000); factory.setReadTimeout(30 * 1000); return factory; } catch (Exception e) { throw new RuntimeException("创建HttpsRestTemplate失败", e); } } }
@Api(tags = {"sso登录"}) @RestController @RequestMapping("/api/sso/login") @Validated public class SsoLoginController {
private RestTemplate restTemplate;
@ApiOperation(value = "使用平台返回token,生成子系统token") @GetMapping("") public JwtTokenDTO generateToken(@ApiParam(value = "平台token", required = true) @RequestHeader("X-Access-Token") String SsoToken,@ApiParam(value = "平台token") @RequestHeader(value = "Working-Organization",required = false,defaultValue = "POSITION") OrganizationType organization) throws LoginException { //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.set("X-Access-Token",SsoToken); //添加请求的参数 HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(null, headers); //执行HTTP请求 ParameterizedTypeReference<SsoLogin> typeRef = new ParameterizedTypeReference<SsoLogin>() {}; ResponseEntity<SsoLogin> re = restTemplate.exchange(host, HttpMethod.GET, requestEntity, typeRef); SsoLogin ssoLogin=re.getBody(); }
}