最近博主和其他小伙伴跟导师一块开发中铁局一体化平台项目,该项目主要的目的是从中铁局测试环境平台请求接口返回的json数据,然后对json进行转换,并存入本地数据库,要保证本地数据库与中铁局测试环境平台的数据一致,简单来说,就是中铁局数据发生改变,本地也要发生改变。
在请求中铁局一体化平台Hr测试系统接口时,编辑器报了一个错,如下:
java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
该错的大致意思就是请求时缺少SSL证书,jdk环境不支持,那么该怎么办呢,中铁局一体化平台那边提供的Hr测试平台该怎么测试数据呢,下面我来慢慢道来。
SSL证书是 数字证书 的一种,类似于驾驶证、护照和营业执照的电子副本。 因为配置在服务器上,也称为SSL服务器证书。 SSL 证书 [1] 就是遵守 SSL协议 ,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。 SSL证书通过在客户端浏览器和 Web服务器 之间建立一条SSL安全通道(Secure socket layer (SSL)安全协议是由Netscape Communication公司设计开发。
SSL的重要性
因为SSL证书在目前企业项目开发中,都采用SSL证书来进行网络间的通信及数据传输,用的人多,自然要用
使用SSL证书的好处
SSL可以解决什么问题?
机密性问题:防止网上交易时黑客盜走客户的银行卡,帐号等机密信息。
完整性问题:防止非法恶意篡改客户的银行卡号等个人信息。
真实身份认证:验证网站的真实性,树立可信赖的企业形象,辨别钓鱼网站。
交易不可否认:保证每笔交易都有可靠的记录
提高搜索排名顺序,数据推荐参考,为SEo的目标和网站增强了安全系数
打开网址:中国金融认证中心CFCA证书
打开如下界面
在开篇,博主标记了一个小错误,如下:
java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
这个问题如何解决?
将ca.cer、root.cer文件拷贝到java环境中的security目录:
打开cmd窗口,进入到java环境中的security目录:
执行以下命令将ca.cer导入到cacerts文件中:
keytool -import -alias ca -keystore cacerts -storepass changeit -trustcacerts -file ca.cer
执行命令将root.cer导入到cacerts文件中:
keytool -import -alias root -keystore cacerts -storepass changeit -trustcacerts -file root.cer
访问接口,获取Hr系统的所有二级单位集合,获取后为JSON串,经过工具类转换,将JSON字符串映射至实体类,映射必须前,JSON串中的键必须与实体类字段名对应。
经过以下转换,将JSON串转为对象集合
PbJsonUtils工具类
public static List toList(String jsonStr,Class clz){
GsonBuilder gb=new GsonBuilder();
Type type1 = new ParameterizedTypeImpl(clz);
return (List) gb.enableComplexMapKeySerialization().create().fromJson(jsonStr, type1);
}
class ParameterizedTypeImpl implements ParameterizedType {
Class clazz;
public ParameterizedTypeImpl(Class clz) {
clazz = clz;
}
@Override
public Type[] getActualTypeArguments() {
//返回实际类型组成的数据
return new Type[]{
clazz};
}
@Override
public Type getRawType() {
//返回原生类型,即HashMap
return List.class;
}
@Override
public Type getOwnerType() {
//返回Type对象
return null;
}
}
调用接口成功,如下:
至此,问题完美解决,接下来就是要将拿到的数据存入本地数据库,并实时与Hr测试平台系统数据更新,上方改变本地变,需要及时改变数据。
SSL证书是项目中一个比较重要的技术点,使用它,大大提升了系统的安全性与可维护性。
如果你觉得博主写的不错的话,不妨给博主个鼓励,一键三连(点赞,关注,评论)吧~