- 浏览: 579555 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (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 1195在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 921java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 604(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 使用多线程的场景总结
2018-04-10 14:35 1668在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 457/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1576REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 10961.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1570如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 614传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4711.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2331MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1758java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1066Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 413import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 645CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 2891、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2104import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7561.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 558注意事项hibernate配置文件必须设置自动提交否则不能插入 ... -
java 通过反射原理进行复制操作
2017-07-10 14:24 487// 这些实例的对象字段[sCode] String ...
相关推荐
主要介绍了Java下载https文件并上传到阿里云oss服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
NULL 博文链接:https://forlan.iteye.com/blog/2404071
NULL 博文链接:https://410063005.iteye.com/blog/1751366
在Java中,使用HttpURLConnection类可以实现Http和Https请求,但是对于Https请求,需要进行SSL验证,以确保数据的安全性。下面我们将详细介绍如何实现Https请求的工具类。 首先,需要引入相关的Java包,包括java....
主要介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,非常具有实用价值,需要的朋友可以参考下
使用httpclient和httpsurlconnection两种方法访问https网址,同时分为验证证书和不验证证书两种方法
本demo使用HttpsURLConnection方式的SSL双向认证,实现oauth2.0客户端请求方式,并且实现了普通post接口请求,及多图上传的post请求接口,做了网络请求的封装。
Android使用HttpClient和HttpsUrlConnection两种方式访问https网站
android studio实现HttpsURLConnection post请求的发送并接收
现在很多主流平台采用rest方式的OpenAPI,例如小程序、聚合接口、公司内部接口、对外接口、微信接口等,很多采用rest轻量级数据传输的方式。于是乎简单封装下rest请求api(其实就是两个简单Java类,呵呵),可以实现...
HttpsUrlConnection android网络请求类 当然还有HttpUrlConnection对应http请求,下面以百度首页为例进行请求 写一个GET请求工具类 public class NetUtlis { public static String SendUrlRequest(String s){ ...
下面小编就为大家带来一篇HttpsURLConnection上传文件流(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod( "POST"); connection.setDoOutput(true); connection.setDoInput(true); System.out.println( ...
为了使用 HttpsURLConnection 类,需要实现两个必须的接口:HostnameVerifier 和 X509TrustManager。 HostnameVerifier 接口用于验证服务器的身份,它可以检查服务器的域名是否与 SSL 证书中的域名匹配。如果不匹配...
HttpsURLConnection-Post 使用HttpURLConnection的发布方法
项目里包含一个访问tomcat 的https连接和访问普通url(www.google.com)的https连接 一定记得配置tomcat支持https 配置过程很容易 我的博客转载了方法 还有亲测jdk1.7 tomcat7.0可以
Barzahlen付款模块Java SDK(v2.0.1) 弃用通知 此SDK已不再维护,不应用于新项目。 将来可能会有更新的版本支持我们的 。...如果要使用除HttpsURLConnection以外的其他HttpClient,则可以创建自己的并实现HttpClie
用PD4ML把HTML转pdf,下载可以直接运行,包含了所需要的jar包,其中有我找了好久的页眉页脚,尤其是每页的页数显示,合成时插入图片等功能,需要的可以下载
beanutils.jar、commons-collections.jar、commons-lang.jar、commons-logging-1.1.1.jar、ezmorph-1.0.5.jar、json-lib-2.4-jdk15.jar 使用HttpURLConnection、HttpsURLConnection 以JSON形式传递数据所必须的包