带jsk证书,请求https接口

时间:2023-03-09 03:05:33
带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