LogInHelper.java
package com.yd.dcap.integration.helper; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.yd.dcap.integration.EnvConfig; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.codec.binary.Base64; import org.glassfish.jersey.jackson.JacksonFeature; import javax.crypto.Cipher; import javax.ws.rs.ProcessingException; import javax.ws.rs.client.*; import javax.ws.rs.core.MediaType; import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.interfaces.RSAPublicKey; import java.security.spec.X509EncodedKeySpec; public class LogInHelper { public static String getToken(String account, String password) { Client client = ClientBuilder.newBuilder().hostnameVerifier((s1, s2) -> true).register(new JacksonFeature()).build(); WebTarget webTarget = client.target(EnvConfig.base_url + "api/user/getPublicKey"); Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); PubKey publicKey = invocationBuilder.get(PubKey.class); byte[] decoded = Base64.decodeBase64(publicKey.data); RSAPublicKey pubKey; for (int i = 0; i < 3; i++) { try { pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubKey); String outStr = Base64.encodeBase64String(cipher.doFinal(password.getBytes(StandardCharsets.UTF_8))); LoginData loginData = new LoginData(account, outStr); LoginResponse loginResponse = client.target(EnvConfig.base_url + "api/login") .request(MediaType.APPLICATION_JSON) .post(Entity.entity(loginData, MediaType.APPLICATION_JSON), LoginResponse.class); return loginResponse.data.token; } catch (ProcessingException ex) { ex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); return null; } } return null; } @Data @AllArgsConstructor @NoArgsConstructor public static class PubKey { private int code; private String data; } @Data @AllArgsConstructor @NoArgsConstructor public static class LoginData { private String account; public String password; } @Data @AllArgsConstructor @NoArgsConstructor public static class LoginResponse { public int code; public LoginResponseData data; } @Data @AllArgsConstructor @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) public static class LoginResponseData { public String token; } }
PlatformClient.java
package com.yd.dcap.integration.helper; import com.yd.dcap.integration.EnvConfig; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.jackson.JacksonFeature; import javax.ws.rs.ProcessingException; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.client.Invocation; import javax.ws.rs.core.MediaType; import java.util.HashMap; import java.util.Map; public class PlatformClient { //private Invocation.Builder builder; String token; public PlatformClient(String userName, String password) { token = LogInHelper.getToken(userName, password); } private Invocation.Builder getBuilder(String path) { ClientConfig configuration = new ClientConfig(); configuration = configuration.property(ClientProperties.CONNECT_TIMEOUT, 30000); configuration = configuration.property(ClientProperties.READ_TIMEOUT, 30000); Client client = ClientBuilder.newBuilder().withConfig(configuration).hostnameVerifier((s1, s2) -> true).register(new JacksonFeature()).build(); return client.target(EnvConfig.base_url).path(path) .request(MediaType.APPLICATION_JSON) .header("token", token); } public <T> T doPostRequest(String url, Object payload, Class<T> klass) { Invocation.Builder invoker = this.getBuilder(url); try { return invoker.post(Entity.entity(payload, MediaType.APPLICATION_JSON), klass); } catch (ProcessingException ex) { return invoker.post(Entity.entity(payload, MediaType.APPLICATION_JSON), klass); } catch (Exception e) { e.printStackTrace(); return null; } } public <T> T doPostRequest(String url, Object payload, String mtype, Class<T> klass) { Invocation.Builder invoker = this.getBuilder(url); try { return invoker.post(Entity.entity(payload, mtype), klass); } catch (ProcessingException ex) { return invoker.post(Entity.entity(payload, mtype), klass); } catch (Exception e) { e.printStackTrace(); return null; } } public <T> T doGetRequest(String url, Class<T> klass) { Invocation.Builder invoker = this.getBuilder(url); try { return invoker.get(klass); } catch (ProcessingException ex) { return invoker.get(klass); } catch (Exception e) { e.printStackTrace(); return null; } } static Map<String, PlatformClient> clientMap = new HashMap<>(); public static PlatformClient getClient(String userName, String password) { return clientMap.computeIfAbsent(userName, k -> new PlatformClient(userName, password)); } }
原文地址:http://www.cnblogs.com/panda4671/p/16837573.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性