带jsk证书,请求https接口
Posted 小豪豪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带jsk证书,请求https接口相关的知识,希望对你有一定的参考价值。
首先是三个返回的实体类
BaseVo.java
package https2; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; public class BaseVo implements Serializable { private static final long serialVersionUID = 1L; public List<String> getField(Object model) { List<String> list = new ArrayList<String>(); java.lang.reflect.Method[] method = model.getClass().getDeclaredMethods();// 获取对象所有方法 for (java.lang.reflect.Method m : method) { if (m.getName().startsWith("get")) {// 获取get方法 Object o = null; try { o = m.invoke(model); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); }// 执行 if (o == null ) { list.add(""); } else { list.add(o.toString()); } } } return list; } }
PageVo.java
package https2; public class PageVo extends BaseVo { /** * */ private static final long serialVersionUID = 1L; private int current=1;//当前第几页 private int currentNum=1;//当前第几页 private int total;//总数 private int pages;//页数 private int number = 15;//每页多少条 private String column; private String order; public int getCurrentNum() { return currentNum; } public String getColumn() { return column; } public void setColumn(String column) { this.column = column; } public String getOrder() { return order; } public void setOrder(String order) { this.order = order; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public int getCurrent() { return current; } public void setCurrent(int current) { this.current = current; this.currentNum = current; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; if(this.total%this.number==0){ this.pages = this.total / this.number; }else{ this.pages = this.total / this.number + 1; } } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } }
ResultVo.java
package https2; public class ResultVo extends BaseVo{ /** * */ private static final long serialVersionUID = 1L; private String code; private String msg; private Object data; private PageVo page; public PageVo getPage() { return page; } public void setPage(PageVo page) { this.page = page; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
然后是一个工具类
package https2; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLSession; public class HostnameVerifierUtil implements HostnameVerifier { @Override public boolean verify(String hostname, SSLSession arg1) { if("localhost".equals(hostname)){ return true; } else { return false; } } }
最后是https请求工具类
package https2; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.security.GeneralSecurityException; import java.security.KeyStore; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; import cn.smartercampus.core.vo.ResultVo; import com.alibaba.fastjson.JSON; public class HttpsPost { /** * 获得KeyStore. * @param keyStorePath * 密钥库路径 * @param password * 密码 * @return 密钥库 * @throws Exception */ public static KeyStore getKeyStore(String password, String keyStorePath) throws Exception { // 实例化密钥库 KeyStore ks = KeyStore.getInstance("JKS"); // 获得密钥库文件流 FileInputStream is = new FileInputStream(keyStorePath); // 加载密钥库 ks.load(is, password.toCharArray()); // 关闭密钥库文件流 is.close(); return ks; } /** * 获得SSLSocketFactory. * @param password * 密码 * @param keyStorePath * 密钥库路径 * @param trustStorePath * 信任库路径 * @return SSLSocketFactory * @throws Exception */ public static SSLContext getSSLContext(String password, String keyStorePath, String trustStorePath) throws Exception { // 实例化密钥库 KeyManagerFactory keyManagerFactory = KeyManagerFactory .getInstance(KeyManagerFactory.getDefaultAlgorithm()); // 获得密钥库 KeyStore keyStore = getKeyStore(password, keyStorePath); // 初始化密钥工厂 keyManagerFactory.init(keyStore, password.toCharArray()); // 实例化信任库 TrustManagerFactory trustManagerFactory = TrustManagerFactory .getInstance(TrustManagerFactory.getDefaultAlgorithm()); // 获得信任库 KeyStore trustStore = getKeyStore(password, trustStorePath); // 初始化信任库 trustManagerFactory.init(trustStore); // 实例化SSL上下文 SSLContext ctx = SSLContext.getInstance("TLS"); // 初始化SSL上下文 ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); // 获得SSLSocketFactory return ctx; } /** * 初始化HttpsURLConnection. * @param password * 密码 * @param keyStorePath * 密钥库路径 * @param trustStorePath * 信任库路径 * @throws Exception */ public static void initHttpsURLConnection(String password, String keyStorePath, String trustStorePath) throws Exception { // 声明SSL上下文 SSLContext sslContext = null; // 实例化主机名验证接口 HostnameVerifierUtil hnv = new HostnameVerifierUtil(); try { sslContext = getSSLContext(password, keyStorePath, trustStorePath); } catch (GeneralSecurityException e) { e.printStackTrace(); } if (sslContext != null) { HttpsURLConnection.setDefaultSSLSocketFactory(sslContext .getSocketFactory()); } HttpsURLConnection.setDefaultHostnameVerifier(hnv); } /** * 发送请求. * @param httpsUrl * 请求的地址 * @param xmlStr * 请求的数据 */ public static ResultVo post(String httpsUrl, String xmlStr) { HttpsURLConnection urlCon = null; try { urlCon = (HttpsURLConnection) (new URL(httpsUrl)).openConnection(); urlCon.setDoInput(true); urlCon.setDoOutput(true); urlCon.setRequestMethod("POST"); urlCon.setRequestProperty("Content-Length", String.valueOf(xmlStr.getBytes().length)); urlCon.setUseCaches(false); urlCon.getOutputStream().write(xmlStr.getBytes("UTF-8")); urlCon.getOutputStream().flush(); urlCon.getOutputStream().close(); BufferedReader in = new BufferedReader(new InputStreamReader( urlCon.getInputStream())); String line; StringBuffer resultStr = new StringBuffer(); while ((line = in.readLine()) != null) { resultStr.append(line); } System.out.println(resultStr.toString()); ResultVo resultVo = JSON.parseObject(resultStr.toString(), ResultVo.class); return resultVo; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 测试方法. * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // 密码 String password = ""; // 密钥库 String keyStorePath = ""; // 信任库 String trustStorePath = ""; // 本地起的https服务 String httpsUrl = ""; // 传输文本 String xmlStr = ""; HttpsPost.initHttpsURLConnection(password, keyStorePath, trustStorePath); // 发起请求 HttpsPost.post(httpsUrl, xmlStr); } }
jar 包 fastjson-1.1.27.jar 、log4j-1.2.11.jar
链接:https://pan.baidu.com/s/1UAGUmc7PhUT0Db65YuQMiA
提取码:s70w
以上是关于带jsk证书,请求https接口的主要内容,如果未能解决你的问题,请参考以下文章
c# https请求忽略证书验证_各种编程语言忽略http的SSL证书认证