使用apache的httpclient支持SSL(https)安全协议
1.调用方法
int code = HttpClientUtils.postForReturnCode(url.toString());
2.HttpClientUtils代码
package com.sf.integration.sso.access; import java.net.URL; import java.security.Security; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.protocol.Protocol; import org.apache.commons.httpclient.protocol.ProtocolSocketFactory; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; public class HttpClientUtils { private static final Logger log = Logger.getLogger(HttpClientUtils.class); public static String get(String url) { return send("get", url); } public static String post(String url) { return send("post", url); } //返回code的方法 public static int postForReturnCode(String url) { return sendForReturnCode("post", url); } public static String send(String method, String url) { String body = "error"; HttpMethod httpMethod = null; if (method.equalsIgnoreCase("post")) { httpMethod = new PostMethod(url); // 输入网址 } else { httpMethod = new GetMethod(url); // 输入网址 } HttpClient client = new HttpClient(); try { if (url.startsWith("https:")) { supportSSL(url, client); } client.getParams().setContentCharset("UTF-8"); // 处理中午字符串 client.executeMethod(httpMethod); body = httpMethod.getResponseBodyAsString(); int code = httpMethod.getStatusCode(); System.out.println(code); } catch (Exception e) { e.printStackTrace(); } return body; } public static int sendForReturnCode(String method, String url) { int code = 403; HttpMethod httpMethod = null; if (method.equalsIgnoreCase("post")) { httpMethod = new PostMethod(url); // 输入网址 } else { httpMethod = new GetMethod(url); // 输入网址 } HttpClient client = new HttpClient(); try { if (url.startsWith("https:")) { supportSSL(url, client); } client.getParams().setContentCharset("UTF-8"); // 处理中午字符串 client.executeMethod(httpMethod); code = httpMethod.getStatusCode(); } catch (Exception e) { e.printStackTrace(); } return code; } private static void supportSSL(String url, HttpClient client) { if(StringUtils.isBlank(url)) { return; } String siteUrl = StringUtils.lowerCase(url); if (!(siteUrl.startsWith("https"))) { return; } try { setSSLProtocol(siteUrl, client); } catch (Exception e) { log.error("setProtocol error ", e); } Security.setProperty( "ssl.SocketFactory.provider","com.tool.util.DummySSLSocketFactory"); } private static void setSSLProtocol(String strUrl, HttpClient client) throws Exception { URL url = new URL(strUrl); String host = url.getHost(); int port = url.getPort(); if (port <= 0) { port = 443; } ProtocolSocketFactory factory = new DummySSLSocketFactory(); Protocol authhttps = new Protocol("https", factory, port); Protocol.registerProtocol("https", authhttps); client.getHostConfiguration().setHost(host, port, authhttps); } }
3.DummySSLSocketFactory验证代码
package com.sf.integration.sso.access; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import java.net.UnknownHostException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.SocketFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.commons.httpclient.ConnectTimeoutException; import org.apache.commons.httpclient.params.HttpConnectionParams; import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory; public class DummySSLSocketFactory implements SecureProtocolSocketFactory { private SSLContext sslcontext = null; private SSLContext createSSLContext() { SSLContext sslcontext=null; try { sslcontext = SSLContext.getInstance("SSL"); sslcontext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } return sslcontext; } private SSLContext getSSLContext() { if (this.sslcontext == null) { this.sslcontext = createSSLContext(); } return this.sslcontext; } public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket( socket, host, port, autoClose ); } public Socket createSocket(String host, int port) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket( host, port ); } public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort); } public Socket createSocket(String host, int port, InetAddress localAddress, int localPort, HttpConnectionParams params) throws IOException, UnknownHostException, ConnectTimeoutException { if (params == null) { throw new IllegalArgumentException("Parameters may not be null"); } int timeout = params.getConnectionTimeout(); SocketFactory socketfactory = getSSLContext().getSocketFactory(); if (timeout == 0) { return socketfactory.createSocket(host, port, localAddress, localPort); } else { Socket socket = socketfactory.createSocket(); SocketAddress localaddr = new InetSocketAddress(localAddress, localPort); SocketAddress remoteaddr = new InetSocketAddress(host, port); socket.bind(localaddr); socket.connect(remoteaddr, timeout); return socket; } } private static class TrustAnyTrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } } }
相关推荐
throw new RuntimeException("GET请求失败,响应码:" + responseCode); } } ``` **2. POST方法** POST方法常用于向服务器提交数据,如表单提交。HttpUtils工具类中,POST请求的实现可能如下: ```java public ...
int responseCode = conn.getResponseCode(); // 处理响应... ``` 2. **处理XML/JSON数据** WebService通常接收和返回XML或JSON格式的数据。如果服务端期望XML,你需要创建一个DOM文档,序列化为字符串;对于...
int responseCode = httpEx.getCode(); String responseMsg = httpEx.getMessage(); String errorResult = httpEx.getResult(); // ... } else { // 其他错误 // ... } Toast.makeText(x.app(), ex....
this.excelData = (XLSX.utils.sheet_to_json(ws, { header: 1 })); // 清空文件输入框 evt.target.value = ""; }; reader.readAsBinaryString(target.files[0]); } ``` 在这个例子中,`importExcel`函数...
infor:数字化转型助力制造企业蜕变.pdf
毕业论文-电视TV_新增蓝光-整站商业源码.zip
InTouch触摸式考勤终端介绍.PDF
毕业论文-日主题子主题-整站商业源码.zip
毕业论文-彩虹目录列表程序v1.3源码-整站商业源码.zip
灭火器识别数据集,识别率99.5%,分别率640x640,127张训练图,支持pasical voc xml格式的标注框
此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 开发语言:Java 框架:SSM(Spring、Spring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批和院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生和审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期和请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课和请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导和学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任和院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况。 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导和学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新和维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名和密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问和操作其权限范围内的功能和数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露和非法访问。
内容概要:本文档为2021年全国大学生电子设计竞赛的试题,针对“具有发电功能的储能小车”这一主题进行了详细的任务描述、要求说明及评分标准设定。任务要求设计并制作一款以超级电容为储能元件的手动发电智能小车,通过在特定区域内往复运动完成充电,之后按照规定执行直线行驶或沿圆形轨迹行驶的动作,并具备LED指示、液晶显示行驶距离等功能。基本要求涵盖小车的充电、启动控制、行驶距离等;发挥部分则增加了循迹行驶、硬币探测等挑战性任务。文档还对竞赛规则、测试条件等做了明确说明; 适合人群:参加全国大学生电子设计竞赛的高职高专组学生; 使用场景及目标:①为参赛队伍提供具体的设计与制作指导;②确保各参赛队伍理解竞赛规则、评分标准,以便准备比赛; 阅读建议:仔细研读任务要求和评分细则,确保设计方案符合所有规定,同时关注发挥部分以争取更高分数。
内容概要:本文详细介绍了汽车BCM(车身控制模块)程序源代码的关键功能和技术细节。首先探讨了BCM对外部灯光(如前照灯、转向灯、雾灯等)和内部灯光(如顶灯、门灯等)的精确控制机制,确保驾驶员和乘客的安全与舒适。其次,阐述了BCM对前后雨刮和洗涤系统的智能控制,提升车辆在恶劣天气条件下的能见度。接着,讲解了遥控钥匙(RKE)和门锁系统的运作方式,使车主能够远程操控车辆。最后,深入分析了CAN/LIN通讯和ISO15765诊断协议的应用,确保车辆各模块之间的高效协同和故障诊断。文中还展示了部分伪代码示例,帮助读者更好地理解BCM的具体实现。 适用人群:汽车电子工程师、嵌入式软件开发者、汽车爱好者。 使用场景及目标:适用于希望深入了解汽车BCM工作原理的技术人员,旨在掌握BCM在灯光控制、雨刮洗涤、遥控及通讯等方面的具体实现方法,从而应用于实际项目开发或故障排查。 其他说明:本文不仅提供了理论知识,还附有简单代码示例,便于读者理解和实践。
毕业论文-深蓝AI智能名片小程序1.7.1-整站商业源码.zip
# 基于springboot的“考研资讯平台”的设计与实现(源码+数据库+文档+PPT) - 开发语言:Java - 数据库:MySQL - 技术:springboot - 工具:IDEA/Ecilpse、Navicat、Maven
VMware 17最新安装包
内容概要:本文详细介绍了一种基于英飞凌TC27xC平台的电动汽车电机控制器设计方案。该方案涵盖了原理图、Bom清单、代码及其分析。文中首先概述了方案的整体架构,接着深入解析了原理图中的关键组件,如PWM信号用于控制电机速度和方向,以及ADC用于实时监控电流和电压。随后,提供了详细的Bom清单,列出了所有必要的电子元件。代码部分则分为初始化代码、电机控制代码和代码分析,展示了模块化的编程思路,确保系统的稳定性和易维护性。最后,介绍了该方案在实际电动汽车中的成功应用,强调了其对提升驾驶体验和安全性的贡献。 适合人群:从事电动汽车研发的技术人员、硬件工程师、嵌入式软件开发人员。 使用场景及目标:适用于正在研究或开发电动汽车电机控制系统的人群,旨在帮助他们理解和实现高效的电机控制解决方案。 其他说明:本文不仅提供了理论和技术细节,还分享了实践经验,有助于读者更好地掌握相关技术和应用场景。
java必读之代码大全笔记
20张人脸面部不同区域分割、有标签
此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 开发语言:Java 框架:SSM(Spring、Spring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批和院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生和审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期和请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课和请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导和学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任和院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况。 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导和学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新和维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名和密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问和操作其权限范围内的功能和数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露和非法访问。