java 通过HttpsUrlConnection访问接口数据


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


[size=large][color=red][b]1.Http请求工具类[/b][/color][/size]

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;

}

}


[size=large][color=red][b]2.接口服务编写[/b][/color][/size]

@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查询");
}

}


[size=large][color=red][b]3.拦截器定义[/b][/color][/size]

/**
* 对请求用户进行拦截
* @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 {
}
}


[size=medium][color=red][b]4.测试代码[/b][/color][/size]

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());//请求获取数据
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值