- 浏览: 576727 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (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 1190在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 911java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 594(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 使用多线程的场景总结
2018-04-10 14:35 1662在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 454/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1574REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 10861.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1563如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 607传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4661.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2315MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1753java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1062Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 412import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 633CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 2861、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2097import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7511.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 552注意事项hibernate配置文件必须设置自动提交否则不能插入 ... -
java 通过反射原理进行复制操作
2017-07-10 14:24 481// 这些实例的对象字段[sCode] String ...
相关推荐
2020-2021年概率论与数理统计试卷
人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。
伊坂幸太郎21册合集.mobi
dsdy-b4-v30003-1h.apk
Python实现基于Socket通信+PyQt5的仿QQ聊天系统项目源码(高分项目)开发软件: Pycharm+ Python3.6数据库:mysql8.0 本软件基于python gui图形库pyqt5编写的仿qq,采用mysql数据库存储,socket通信(tcp协议)实现,支持多账号登录,注册,单人私聊,群聊,添加好友分组等功能。 Python实现基于Socket通信+PyQt5的仿QQ聊天系统项目源码(高分项目)客户端界面目录文件:pyqt5-qq,服务端目录文件:Tcpserver Python实现基于Socket通信+PyQt5的仿QQ聊天系统项目源码(高分项目)服务端目录结构: common:存放公共的工具类代码文件目录,主要是配置文件解析工具类,数据库操作工具类,本软件主要使用的是sqlalchemy orm数据库框架。 configfile:存放配置文件目录 dto:存放数据库表模型类代码文件 Python实现基于Socket通信+PyQt5的仿QQ聊天系统项目源码(高分项目)客户端目录结构: image,res:存放资源文件,其他文件:界面及逻辑实现源码
学期期末考试试卷模板含有装订虚线.doc
植物大战僵尸杂交版 仅供学习交流使用 使用QT编写,代码简单易懂,直接编译运行即可,或者直接下载release中的release.zip,运行其中的pvz_cheating.exe 目前支持功能: 修改阳光 定时修改阳光 无冷却 金币修改(地址好像不适用,需要重新定位寻址) 基本不会更新,有问题可以提issue,欢迎pr
模拟退火算法(Simulated Annealing,SA)加入了Metropolis函数,该函数值决定了算法接受一个更劣解的概率,这个机制能帮助算法跳出局部最优。 本案例中以31个节点的测试数据做演示,基于简单的邻域搜索策略实现模拟退火,并将最终结果画图展示,本案例非常适合初学者学习,欢迎下载
课程设计基于python+mediapipe+opencv开发的手势识别系统源码(含超详细注释) .zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 课程设计基于python+mediapipe+opencv开发的手势识别系统源码(含超详细注释) .zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 课程设计基于python+mediapipe+opencv开发的手势识别系统源码(含超详细注释) .zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。设计基于python+mediapipe+opencv开发的手势识别系统源码(含超详细注释) .zip本资源中的源码都是经过本地编译过可运行的,评审分。。
A025---个人主页17.zip
QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com
医药继续教育项目完成情况报告表.doc
NX二次开发uf5327 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,还是希望提高工作效率的普通用户,NX 二次开发 Ufun 都可以帮助您实现更高效的工作流程。函数覆盖了 NX 软件的各个方面,包括但不限于建模、装配、制图、编程、仿真等。这些 API 函数可以帮助用户轻松地实现自动化、定制化和扩展 NX 软件的功能。例如,用户可以通过 Ufun 编写脚本,自动化完成重复性的设计任务,提高设计效率;或者开发定制化的功能,满足特定的业务需求。语法简单易懂,易于学习和使用。用户可以快速上手并开发出符合自己需求的 NX 功能。本资源内容 提供了丰富的中英文帮助文档,可以帮助用户快速了解和使用 Ufun 的功能。用户可以通过资源中的提示,学习如何使用 Ufun 的 API 函数,以及如何实现特定的功能。
什么是计算机视觉:使计算机具有像人那样的视觉功能--“计算机视觉的挑战是要为计算机和机器人开发具有与人类水平相当的视觉能力。机器视觉需要图像信号,纹理和颜色建模,几何处理和推理,以及物体建模。一个有能力的视觉系统应该把所有这些处理都紧密地集成在一起。源于图像处理与模式识别是人工智能的一个分支困难和研究意义
NX二次开发uf5368 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,还是希望提高工作效率的普通用户,NX 二次开发 Ufun 都可以帮助您实现更高效的工作流程。函数覆盖了 NX 软件的各个方面,包括但不限于建模、装配、制图、编程、仿真等。这些 API 函数可以帮助用户轻松地实现自动化、定制化和扩展 NX 软件的功能。例如,用户可以通过 Ufun 编写脚本,自动化完成重复性的设计任务,提高设计效率;或者开发定制化的功能,满足特定的业务需求。语法简单易懂,易于学习和使用。用户可以快速上手并开发出符合自己需求的 NX 功能。本资源内容 提供了丰富的中英文帮助文档,可以帮助用户快速了解和使用 Ufun 的功能。用户可以通过资源中的提示,学习如何使用 Ufun 的 API 函数,以及如何实现特定的功能。
QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com
高等职业教育品牌专业申报表.doc
hbase-1.4.4-bin.tar.gz 是 Apache HBase 1.4.4 版本的二进制发行包。Apache HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,它运行在 Hadoop Distributed FileSystem (HDFS) 上,提供了大数据的随机实时读写访问能力。 HBase 需要运行在 Hadoop 集群上,因此你需要先安装和配置 Hadoop。 HBase 1.4.4 通常与 Hadoop 2.x 版本兼容,但具体兼容性可能因 Hadoop 的子项目版本和特定配置而异。 你可能还需要安装 Java Development Kit (JDK) 1.8 或更高版本,因为 HBase 是用 Java 编写的。
一看就会的思维导图-C++手动模拟String的增删查改
插入排序-18-右连接查询.ev4.rar