- 浏览: 595553 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
server: ssl: key-store: classpath:key/rsakey.jks key-store-password: 123456 key-store-type: JKS key-alias: tomcatjks urls: /* port: 8443 non-ssl-port: 8080
1.Http请求工具类
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.json.JSONObject; public class HttpsGetData { 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[] {}; } } private static class TrustAnyHostnameVerifier implements HostnameVerifier { public boolean verify(String hostname, SSLSession session) { return true; } } /** * 返回的结果是字符串格式 * url:请求url * hearderKey:请求消息头ke值 * headerValue:请求消息头key对应的value值 * requestMethod:请求方式 * param:json请求参数 */ public String Do(String url,String hearderKey,String headerValue,String requestMethod,String param) throws Exception { String result = ""; BufferedReader in = null; try { System.out.println("请求的URL为:"+url); SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },new java.security.SecureRandom()); URL realUrl = new URL(url); // 打开URL连接 HttpsURLConnection connection = (HttpsURLConnection) realUrl.openConnection(); // 设置https相关属性 connection.setSSLSocketFactory(sc.getSocketFactory()); connection.setHostnameVerifier(new TrustAnyHostnameVerifier()); connection.setDoOutput(true); connection.setDoInput(true); // 设置通用的请求属性 connection.setRequestProperty("Content-Type", " application/json"); connection.setRequestProperty("Connection", "keep-alive"); connection.setRequestProperty(hearderKey, headerValue);//基于base基本认证 connection.setRequestMethod(requestMethod); // 建立实际的连接 connection.connect(); // 添加请求参数 if(StringUtil.isNotEmpty(param)){ OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); writer.write(param); writer.flush(); } // 读取URL的响应结果 in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8")); String line; while ((line = in.readLine()) != null) { result += line; } System.out.println("获取的结果为:"+result); } catch (Exception e) { System.out.println("发送请求出现异常!" + e); throw e; } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { //e2.printStackTrace(); throw e2; } } return result; } }
2.接口服务编写
@SuppressWarnings("unchecked") @RequestMapping(value="/getCatHosOrg",method=RequestMethod.POST) @ApiOperation(value="xxxxxx查询") public ResponseData<CatHosOrgEntity> getCatHosOrg(@RequestBody(required=false) CatHosOrgEntity catHosOrgEntity, @RequestParam(defaultValue="1",required=false) int page, @RequestParam(defaultValue="15",required=false) int size, ComebakColumn comBak){ QueryParams<xxxx> params = new QueryParams<xxxxx>(); Page pageSize = new Page(); pageSize.setPages(page); pageSize.setPageSize(size); params.setPaging(pageSize); params.setEntity(catHosOrgEntity); try { List<xxxx> catHosOrgList = this.catHosOrgService.queryEntityPage(params); jsonObjects = new ArrayList<JSONObject>(); if(comBak.getList() != null && comBak.getList().size() >0){ for(CatHosOrgEntity catHosOrgEntitys:catHosOrgList){ jsonObject = new JSONObject(); for(Field field:catHosOrgEntitys.getClass().getDeclaredFields()){ for(String list:comBak.getList()){ if(field.getName().equals(list)){ Method method = CatHosOrgEntity.class.getMethod("get"+field.getName().substring(0,1).toUpperCase()+field.getName().substring(1)); jsonObject.put(field.getName(),(Object)method.invoke(catHosOrgEntitys)); } } } jsonObjects.add(jsonObject); } return success(jsonObjects); }else { return success(catHosOrgList); } } catch (Exception e) { // TODO: handle exception return error("xxx查询"); } }
3.拦截器定义
/** * 对请求用户进行拦截 * @author */ public class MvcInteractor implements HandlerInterceptor{ protected Logger log = LoggerFactory.getLogger(MvcInteractor.class); @SuppressWarnings("all") @Override public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception { boolean flag = false; String token = request.getHeader("Authorization").substring(7); @SuppressWarnings("restriction") BASE64Encoder encoder = new BASE64Encoder(); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); PrintWriter out = null; JSONObject res = new JSONObject(); ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext()); JdbcTemplate jt = (JdbcTemplate) ac.getBean("jdbcTemplate"); AppInfoRepository ap = (AppInfoRepository) ac.getBean("appInfoRepository"); //获取用户信息 try { AppInfo appInfo = ap.findByAppId(request.getParameter("account").toString()); log.info("认证地址:"+request.getServerName()); log.info("认证端口:"+request.getServerPort()); // token验证地址 String tokenUrl = "https://"+request.getServerName()+":"+request.getServerPort()+"/oauth/token"; HttpsGetData httpsGetData = new HttpsGetData(); String tokenResult = httpsGetData.Do(tokenUrl+"?grant_type=client_credentials&scope","Authorization","Basic "+encoder.encode((appInfo.getAppId()+":"+appInfo.getAppKey()).getBytes()),"POST",null); // 转成json数据 JSONObject tokenJSon = new JSONObject(tokenResult); if(!tokenJSon.getString("access_token").equals(token)){ res.put("code", "202"); res.put("msg", "该账号无权限访问,请联系管理员!token不匹配!"); out = response.getWriter(); out.append(res.toString()); return flag; } // 判断该APP_ID下面的角色是否有权访问该URL StringBuilder sql = new StringBuilder(500); sql.append("SELECT A.INTERFACE_URL FROM APP_INTERFACE A LEFT JOIN ROLES_URL R ON A.ID = R.APP_INTERFACE_ID LEFT JOIN ROLES S ON R.ROLE_ID = S.ID WHERE S.ID IN ("); sql.append("SELECT B.ID FROM APP_ROLES A JOIN ROLES B ON A.ROLE = B.ID WHERE A.APP_ID = ? )") ; List<String> urlList = jt.query(sql.toString(),new Object[]{appInfo.getAppId()}, new RowMapper<String>() { @Override public String mapRow(ResultSet resultSet, int i) throws SQLException { return resultSet.getString("interface_url"); } }); for(String url:urlList){ if(request.getRequestURL().indexOf(url) > -1){ return true ; } } if(!flag){ res.put("code", "202"); res.put("msg", "该账号无权限访问,请联系管理员!"); out = response.getWriter(); out.append(res.toString()); } } catch (Exception e) { e.getCause(); log.error("该账号无权限访问,请联系管理员!"); } return flag; } @Override public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception { } }
4.测试代码
public static void main(String[] args) throws Exception { //String clientReq = "appId:appKey";//默认客户端ID和客户端秘钥 String client_id="appId";//默认客户端ID String client_secret = "appKey";//默认客户端秘钥 BASE64Encoder encoder = new BASE64Encoder(); BASE64Decoder decoder = new BASE64Decoder(); //String tokenUrl = "https://101.37.25.220:8091/oauth/token?grant_type=client_credentials&scope"; String tokenUrl = "https://localhost:8443/oauth/token"; HttpsGetData httpsGetData = new HttpsGetData(); List<String> list = new ArrayList<String>(); /** * 获取返回的token * 注:请求头为Authorization,值为Basic加空格加client_id:client_secret的Base64编码 */ String tokenResult = httpsGetData.Do(tokenUrl+"?grant_type=client_credentials&scope","Authorization","Basic "+encoder.encode((client_id+":"+client_secret).getBytes()),"POST",null); JSONObject tokenJSon = new JSONObject(tokenResult);//转成json数据 String token = tokenJSon.getString("access_token"); /** * 请求参数为json格式 */ JSONObject paramJson = new JSONObject(); paramJson.put("modifyDate", "2017-10-30"); // paramJson.put("facNameF","江西"); // paramJson.put("convertF","盒"); // paramJson.put("nameCn", "片"); // paramJson.put("smlNameF", "片"); // paramJson.put("normF", "2G"); /** * 返回字段为字符串的list集合 */ list.add("facNameF"); list.add("convertF"); list.add("nameCn"); list.add("smlNameF"); list.add("normF"); String params = (StringUtils.strip(list.toString(), "[]").replaceAll(" ", ""));//删除集合中的空格 /** * 分页 * 默认:page="1";size="15" * 注:请求头为Authorization,值为Bearer加空格加token */ String page = "1"; String size = "10"; // String resultUrl = "https://localhost:8443/api/v1.0/catZxmedProduct/getCatZxmedProduct?page="+page+"&size="+size+"&list="+params+"&account="+client_id; String resultUrl = "https://localhost:8443/api/v1.0/catZxmedProduct/getCatZxmedProductByDate?page="+page+"&size="+size+"&list="+params+"&account="+client_id; //String resultUrl = "https://localhost:8443/api/v1.0/demo/HXUDP0000000000000000000000034?account="+client_id; //注:若无json请求参数,则paramJson = null; httpsGetData.Do(resultUrl,"Authorization","Bearer "+token,"POST",paramJson.toString());//请求获取数据 }
发表评论
文章已被作者锁定,不允许评论。
-
java WeakHashMap学习(key是弱引用)
2018-06-21 09:31 1225在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 943java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 640(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 使用多线程的场景总结
2018-04-10 14:35 1694在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 475/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1611REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 11601.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1611如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 649传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4901.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2431MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1773java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1085Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 429import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 665CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 3161、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2144import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7841.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 580注意事项hibernate配置文件必须设置自动提交否则不能插入 ... -
java 通过反射原理进行复制操作
2017-07-10 14:24 503// 这些实例的对象字段[sCode] String ...
相关推荐
总结来说,Java实现读取证书访问HTTPS接口涉及的关键知识点包括:X.509证书、Java KeyStore、SSL/TLS协议、`HttpURLConnection`和`HttpsURLConnection`的使用、SSLContext、TrustManager和KeyManager的配置。...
在提供的代码示例中,创建了一个名为`X509TrustUtil`的类,该类实现了`X509TrustManager`接口。`X509TrustManager`是Java安全模型的一部分,负责检查服务器的证书是否可信。在`X509TrustUtil`中,三个方法`...
本篇文章将深入讲解如何使用`HttpURLConnection`类来模拟浏览器请求,并通过实例展示其在接口调用中的应用。 首先,`HttpURLConnection`是`java.net.URLConnection`的一个子类,用于处理HTTP协议。在使用`...
在Android开发中,访问Web服务是常见的需求,尤其是与服务器进行数据交互时。HttpClient和HttpsUrlConnection是Android系统中用于实现HTTP和HTTPS请求的两个主要工具。本文将深入探讨这两种方式,以及它们在处理...
Java客户端访问HTTPS服务器涉及到的是网络安全通信中的SSL/TLS协议,主要目的是确保数据传输的安全性,防止数据被篡改或窃取。在这个过程中,Java的JSSE(Java Secure Socket Extension)框架提供了实现HTTPS通信的...
Java网络编程是Java开发中的重要领域,它涵盖了网络通信的所有基本概念和技术,使得Java应用程序能够通过互联网进行数据传输和交互。本教程详细介绍了这一主题,旨在帮助初学者和有一定经验的开发者深入理解Java网络...
Java可以用来开发自己的VPNs,通过隧道技术将私有网络连接到公共网络,实现安全的远程访问。 综上所述,"Java连接实现代码"可能涵盖了上述多种网络连接技术,对于抓取Google数据这样的任务,可能使用了HTTP或HTTPS...
同时,Java也提供了SSL/TLS支持,通过HttpsURLConnection进行安全的HTTPS通信,防止数据在传输过程中被窃取或篡改。 七、实战案例 "InternetAccess"项目可能包含了实现上述功能的示例代码,例如,创建一个简单的...
- 以上两行代码的作用是告诉 Java 虚拟机信任 `tomcat.keystore` 中的证书,并使用指定的密码访问密钥库。 5. **发送 HTTPS 请求**: - 使用上述配置后的环境发送 HTTPS 请求,此时应该能正确地与服务器建立安全...
Java的`Thread`类和`Runnable`接口使得创建和管理线程变得简单。 4. URL和URLConnection:除了套接字编程,Java还提供了`java.net.URL`和`java.net.URLConnection`类,用于访问和操作网络资源,如下载文件或执行...
Java网络编程是Java开发中的重要领域,它涉及如何在不同设备之间通过网络交换数据。Java提供了丰富的API,如Socket、ServerSocket、URL、HttpURLConnection等,使得开发者能够创建高效的网络应用。以下是一些关于...
- Java网络编程主要依赖于Java的`java.net`和`java.io`包,它们提供了丰富的类和接口来处理网络连接。 - `Socket`和`ServerSocket`是Java网络编程的核心类,分别用于客户端和服务器端通信。 2. **TCP和UDP协议** ...
- **多路复用I/O(Multiplexing I/O)**:Java的Selector和Channel接口实现了I/O多路复用,通过一个线程监视多个连接。 4. **多线程与并发** - **线程池**:ExecutorService接口和ThreadPoolExecutor类用于管理...
- **输入/输出流**:`java.io.InputStream`和`java.io.OutputStream`是处理I/O的基本接口,可以用于读取和写入文件、网络连接等。 4. **网络传输**: - **HTTP协议**:使用`java.net.HttpURLConnection`或第三方...
这个代理服务可能被设计为一个灵活且安全的解决方案,允许开发者通过Java代码来控制网络通信,比如转发请求,进行数据过滤或者添加额外的安全层。以下是关于Java中实现代理服务的一些关键知识点: 1. **Java Proxy ...
Java网络编程是Java开发中的重要组成部分,它允许程序通过网络发送和接收数据,实现与远程服务器的交互。在本教程中,我们将深入探讨Java如何进行网络编程,主要围绕"访问网络资源实例"和"Applet编程实例"这两个主题...
2. **线程控制**:Java提供了一些方法来控制线程的行为,如`start()`启动线程,`sleep()`让线程休眠,`join()`等待线程完成,以及`synchronized`关键字用于同步访问共享资源。 3. **线程通信与协作**:`wait()`, `...