tomcat+https协议的接口编写及客户端访问
来源:互联网 发布:口罩行业数据 编辑:程序博客网 时间:2024/05/22 13:06
https无非就是http+ssl,也就是在http基础上进行证书上的校验,俗称安全的http
之前的一篇文章http传输json进行服务端接口与客户端对接,以及restful实现
下面在这demo基础上进行https修改
具体操作步骤:
1.对服务端进行修改,接口访问使用https
a.利用jdk自带的证书生成工具来生成一个key,keytool -genkey -alias cwh -keyalg RSA -keystore e:/keys/cwhkey
主意一下:'您的名字与姓氏是什么'这里需要注意的,你所填的到时会作为是你的域名来用
b.tomcat/conf/server.xml启用ssl(把下面的这个本身是注释掉的开启)
c.把上面tomcat配置进行修改(添加:keystoreFile="对应你生成的key文件路径",keystorePass="你的秘钥口令"):
d.ok这样就可以了,再来访问下之前做的接口地址,https://localhost:8443/springMVC/user/getUserByName/cwh,结果如下,证明ssl应用成功
e.至此似乎服务端接口采用https协议很成功,但是问题来了,之前http://localhost:8080/springMVC/user/getUserByName/cwh这个地址已经暴露过,别人直接通过这个访问不也就绕过了https了么,那么解决办法就是让http访问重定向到https去,操作如下:在tomcat目录下的conf/web.xml此文件改位置添加如下代码代码:
<security-constraint>
<web-resource-collection>
<web-resource-name>ssl</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
ok这样的话继续访问http://localhost:8080/springMVC/user/getUserByName/cwh的话会被重定向到https去:
至此https服务端完成
2.下面进行httpclient客户端编写,
在之前demo基础上进行修改,添加证书:
HttpClient httpclient = new DefaultHttpClient(); String uri = "https://localhost/springMVC/user/getUserByName/cwh";
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream instream = new FileInputStream(new File("E:/keys/cwhkey")); //密匙库的密码 trustStore.load(instream, "caiwenhao".toCharArray()); //注册密匙库 SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); //不校验域名 socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); Scheme sch = new Scheme("https", 8443, socketFactory);//8443端口 httpclient.getConnectionManager().getSchemeRegistry().register(sch);注意一下:socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);是不校验域名,如果注释掉的话,那么你访问的uri就会报如下错误:
这时我们需要把域名localhost改为你的所设置的‘您的名字与姓氏是什么’的值,https://cwh/springMVC/user/getUserByName/cwh,这里的域名cwh是我们虚拟出来的所以我们 需要去hosts文件配置下让cwh这个域名指向本地:打开C:\Windows\System32\drivers\etc,hosts文件添加127.0.0.1 cwh;
还需注意的是:Scheme sch = new Scheme("https", 8443, socketFactory);设置的是我们https的端口8443
客户端 完整代码如下:
public void HttpPostData() { try { HttpClient httpclient = new DefaultHttpClient(); String uri = "https://localhost/springMVC/user/getUserByName/cwh"; KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream instream = new FileInputStream(new File("E:/keys/cwhkey")); //密匙库的密码 trustStore.load(instream, "caiwenhao".toCharArray()); //注册密匙库 SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); //不校验域名 socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); Scheme sch = new Scheme("https", 8443, socketFactory);//8443端口 httpclient.getConnectionManager().getSchemeRegistry().register(sch); HttpPost httppost = new HttpPost(uri); JSONObject obj = new JSONObject(); HttpResponse response; response = httpclient.execute(httppost); //检验状态码,如果成功接收数据 int code = response.getStatusLine().getStatusCode(); System.out.println(code+"code"); if (code == 200) { String rev = EntityUtils.toString(response.getEntity());//返回json格式: {"id": "","name": ""} obj= JSONObject.fromObject(rev); System.out.println(obj.get("username")); User user = (User)JSONObject.toBean(obj,User.class); System.out.println("返回数据==="+user.toString()); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
- tomcat+https协议的接口编写及客户端访问
- tomcat+https协议的接口编写及客户端访问
- Android访问Https协议的接口
- https协议及 tomcat https访问设置 默认http也变成https
- tomcat配置https及访问
- tomcat 增加https安全协议访问
- ios访问tomcat接口时配置https
- Tomcat的https配置及双接口配置
- 配置Tomcat的HTTPS访问
- 配置tomcat的https访问
- 设置Tomcat的https访问
- Tomcat配置https及访问http自动跳转至https
- Tomcat配置https及访问http自动跳转至https
- 【Tomcat】配置https及访问http自动跳转至https
- Tomcat配置https及访问http自动跳转至https
- Tomcat配置https及访问http自动跳转至https
- Tomcat配置https及访问http自动跳转至https
- Tomcat配置https,及访问http自动跳转至https
- Android控件显示/隐藏时添加动画:ViewSwitcher
- Activity启动过程源码分析
- 在自动驾驶中,单线激光雷达能干什么?
- 解决“只能通过Chrome网上应用商店安装该程序”的方法
- sql 删除重复数据
- tomcat+https协议的接口编写及客户端访问
- MAC 软件下载地址
- Android错误总结
- java中使用String提取字符串中的数字(整数、负数、double)类型小数点数字
- Unity3D游戏开发之“txt配档文件的读取”
- 移动GIS
- 消息队列的适用场景
- hadoop2.7.3集成eclipse遇到的问题及解决方案
- 第3章 基本概念(6)函数