<%-- Created by IntelliJ IDEA. User: xvshanshan Date: 2023/7/3 Time: 9:23 To change this template use File | Settings | File Templates. --%> <%@ page import="weaver.conn.RecordSet" %> <%@ page import="weaver.general.BaseBean" %> <%@ page import="weaver.general.Util" %> <%@ page import="com.alibaba.fastjson.JSONObject" %> <%@ page import="com.alibaba.fastjson.JSONArray" %> <%@ page import="java.util.regex.Pattern" %> <%@ page import="java.util.regex.Matcher" %> <%@ page import="java.io.*" %> <%@ page import="weaver.hrm.User" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="java.util.*" %> <%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ page import="org.apache.http.impl.client.CloseableHttpClient" %> <%@ page import="org.apache.http.impl.client.HttpClients" %> <%@ page import="org.apache.http.client.methods.HttpPost" %> <%@ page import="com.alibaba.fastjson.JSON" %> <%@ page import="org.apache.http.entity.StringEntity" %> <%@ page import="org.apache.http.client.methods.CloseableHttpResponse" %> <%@ page import="org.apache.http.HttpStatus" %> <%@ page import="org.apache.http.HttpEntity" %> <%@ page import="org.apache.http.util.EntityUtils" %> <%@ page import="org.apache.http.client.ClientProtocolException" %> <%@ page import="weaver.hrm.HrmUserVarify" %> <%@ page import="java.net.URL" %> <%@ page import="java.net.HttpURLConnection" %> <%@ page import="org.apache.http.HttpException" %> <%@ page import="org.apache.http.client.HttpClient" %> <%@ page import="org.apache.commons.httpclient.methods.PostMethod" %> <%@ page import="org.apache.commons.httpclient.params.HttpMethodParams" %> <%@ page import="org.apache.http.NameValuePair" %> <%@ page import="org.apache.http.message.BasicNameValuePair" %> <%@ page import="org.apache.http.client.entity.UrlEncodedFormEntity" %> <%! //获取分页sql public static String getPaginationSql(String sql, String orderby, int pageNo, int pageSize) { String execSql = ""; RecordSet rs = new RecordSet(); String dbType = rs.getDBType(); // String dbType = "oracle"; // String dbType = "sqlserver"; int firstResult = 0; int endResult = 0; // 返回分页sql if("oracle".equals(dbType)){ // rownum firstResult = pageNo * pageSize + 1; endResult = (pageNo - 1) * pageSize; execSql = " select * from ( select tabUN2.*,rownum as my_rownum from ( select tableUN.*,rownum as r from ( " + sql + orderby + ") tableUN " + ") tabUN2 where r < " + firstResult + " ) where my_rownum > " + endResult; }else if("sqlserver".equals(dbType)){ sql="select *,row_number()OVER("+orderby+") as rn from ("+sql+") newt"; execSql = "select * from ( " + sql+")fy " + " where rn between ("+pageNo+"-1)*"+pageSize+"+1 and "+pageNo+"*"+pageSize+" "; }else { // 使用 ROW_NUMBER OVER()分页 firstResult = pageNo * pageSize + 1; endResult = (pageNo - 1) * pageSize; execSql = " select * from ( select tabUN2.*,rownum as my_rownum from ( select tableUN.*,rownum as r from ( " + sql + orderby +") tableUN ) tabUN2 where r < " + firstResult + " ) where my_rownum > " + endResult; } rs.writeLog("execSql---->"+execSql); return execSql; } private boolean isEmpty(String str) { if ("".equals(str) ||"(null)".equals(str) || str == null) { return true; } else { return false; } } /** * 获取指定类型的src值的集合 * @param htmlStr * @param type 标签名称 * @return */ public static Set getSrcStr(String htmlStr, String type) { Set srcs = new HashSet(); String src = ""; Pattern p_src; Matcher m_src; // String regEx_img = "]*?>"; //图片链接地址 String regEx_src = "<"+type+".*src\\s*=\\s*(.*?)[^>]*?>"; p_src = Pattern.compile (regEx_src, Pattern.CASE_INSENSITIVE); m_src = p_src.matcher(htmlStr); while (m_src.find()) { // 得到数据 src = m_src.group(); // 匹配中的src数据 Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(src); while (m.find()) { srcs.add(m.group(1)); } } return srcs; } public String httpPostRequest(String param,String url,String token){ BaseBean baseBean = new BaseBean(); JSONObject jsonObject = new JSONObject(); String responseBody=""; try { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); JSONObject jsonString = JSON.parseObject(param); //设置请求体参数 StringEntity entity = new StringEntity(param,"utf-8"); baseBean.writeLog("entity-param->"+param); baseBean.writeLog("entity-->"+entity); entity.setContentEncoding("utf-8"); baseBean.writeLog("entity-utf-8->"+entity); httpPost.setEntity(entity); //设置请求头部 httpPost.setHeader("Content-Type", "application/json"); if(token != null && !"".equals(token)){ httpPost.setHeader("Authorization",token); } //执行请求,返回请求响应 CloseableHttpResponse response = httpClient.execute(httpPost); //请求返回状态码 int statusCode = response.getStatusLine().getStatusCode(); baseBean.writeLog("statusCode状态码->"+statusCode); //请求成功 if (statusCode == HttpStatus.SC_OK && statusCode <= HttpStatus.SC_TEMPORARY_REDIRECT) { //取出响应体 HttpEntity entity2 = response.getEntity(); //从响应体中解析出token responseBody = EntityUtils.toString(entity2, "utf-8"); // jsonObject = JSONObject.parseObject(responseBody); baseBean.writeLog("responseBody->"+responseBody); // baseBean.writeLog("jsonObject->"+jsonObject); //token = jsonObject.getString("access_token"); } else { //请求失败 throw new ClientProtocolException("请求失败,响应码为:" + statusCode); } } catch (Exception e) { e.printStackTrace(); } return responseBody; } /** * 向指定URL发送GET方法的请求 * * @param url 发送请求的URL * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { BaseBean bb = new BaseBean(); String result = ""; String responseMessage=""; BufferedReader in = null; HttpURLConnection connection = null; try { URL getUrl = new URL(url + "?" + param); bb.writeLog("getUrl-->"+getUrl); // 打开和URL之间的连接 connection = (HttpURLConnection) getUrl.openConnection(); // 在connect之前,设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); connection.setRequestProperty("Charsert", "UTF-8"); // 配置本次连接的Content-type,form表单是"application/x-www-form-urlencoded",json是"application/json"等 // 根据需求自己调整Content-type connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 设置连接主机服务器的超时时间:15000毫秒 connection.setConnectTimeout(15000); // 设置读取远程返回的数据时间:60000毫秒 connection.setReadTimeout(60000); // 设置连接方式:get connection.setRequestMethod("GET"); // 建立实际的连接,可不写,注意connection.getOutputStream会隐含的进行connect。 connection.connect(); // 获取所有响应头字段 Map> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { bb.writeLog(key + "--->" + map.get(key)); } // 定义BufferedReader输入流来读取URL的响应 if (connection.getResponseCode() == 200) { in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line; while ((line = in.readLine()) != null) { result += line; } } } catch (Exception e) { bb.writeLog("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } if (connection != null) { //关闭连接 connection.disconnect(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } /** * 向指定 URL 发送POST方法的请求 * * @param url 发送请求的 URL * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param) { BaseBean bb = new BaseBean(); String result = ""; PrintWriter out = null; BufferedReader in = null; HttpURLConnection connection = null; try { URL postUrl = new URL(url); bb.writeLog("getUrl-->"+postUrl); // 打开和URL之间的连接 connection = (HttpURLConnection) postUrl.openConnection(); // 在connect之前,设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); connection.setRequestProperty("Charsert", "UTF-8"); connection.setConnectTimeout(15000); connection.setReadTimeout(60000); // 发送POST请求必须设置如下两行,参数要放在http正文内 connection.setDoOutput(true); connection.setDoInput(true); // 默认是 GET方式 connection.setRequestMethod("POST"); // Post 请求不使用缓存 connection.setUseCaches(false); // 配置本次连接的Content-type,form表单是"application/x-www-form-urlencoded",json是"application/json"等 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.connect(); // 参数要放在http正文内 //1.获取URLConnection对象对应的输出流 out = new PrintWriter(connection.getOutputStream()); //2.中文有乱码的需要将PrintWriter改为如下 //out=new OutputStreamWriter(conn.getOutputStream(),"UTF-8") out.print(param); out.flush(); //也可以使用DataOutputStream // DataOutputStream dos=new DataOutputStream(httpConn.getOutputStream()); // dos.writeBytes(param); // dos.flush(); // dos.close(); // 定义BufferedReader输入流来读取URL的响应 if (connection.getResponseCode() == 200) { in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line; while ((line = in.readLine()) != null) { result += line; } } } catch (Exception e) { bb.writeLog("发送 POST 请求出现异常!" + e); e.printStackTrace(); } finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } if (connection != null) { //关闭连接 connection.disconnect(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } /** * 发送 http post 请求,参数以form表单键值对的形式提交。 */ public static String httpPostForm(String url,Map params, Map headers,String encode){ BaseBean bb = new BaseBean(); if(encode == null){ encode = "utf-8"; } String content = null; CloseableHttpResponse httpResponse = null; CloseableHttpClient closeableHttpClient = null; try { closeableHttpClient = HttpClients.createDefault(); HttpPost httpost = new HttpPost(url); //设置header if (headers != null && headers.size() > 0) { for (Map.Entry entry : headers.entrySet()) { httpost.setHeader(entry.getKey(),entry.getValue()); } } bb.writeLog("url="+url+"header="+headers+"encode="+encode); bb.writeLog("params="+params); //组织请求参数 List paramList = new ArrayList (); if(params != null && params.size() > 0){ Set keySet = params.keySet(); for(String key : keySet) { paramList.add(new BasicNameValuePair(key, params.get(key))); } } httpost.setEntity(new UrlEncodedFormEntity(paramList, encode)); httpResponse = closeableHttpClient.execute(httpost); HttpEntity entity = httpResponse.getEntity(); content = EntityUtils.toString(entity, encode); } catch (Exception e) { e.printStackTrace(); }finally{ try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } try { //关闭连接、释放资源 closeableHttpClient.close(); } catch (IOException e) { e.printStackTrace(); } return content; } %> <% RecordSet rs = new RecordSet(); BaseBean bb=new BaseBean(); Map params = new HashMap<>();//参数 Map headers = new HashMap<>();//headers JSONArray array = new JSONArray(); String ST ="";//获取ST bb.writeLog("进入getCockpit.jap-->"); User user = HrmUserVarify.getUser(request, response); int uid = user.getUID(); session = request.getSession(true); String certified_token = Util.null2String(session.getAttribute("certified_token")); bb.writeLog("获取sessionTGT=="+certified_token); bb.writeLog("uid-->"+uid); //查询邮箱号 //http://${单点系统地址}/sso_server/api/v1/thirdSystem/getList // String httpPostRequest="https://www.baidu.com/"; String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl"));//获取ST的url String cockpitUrl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","cockpitUrl")); String thirdUrl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","thirdUrl"));//获取下流系统 //thirdUrl //获取ST,带着下游系统 if (!isEmpty(certified_token)){ params = new HashMap<>();//参数 params.put("tgt",certified_token); headers = new HashMap<>();//headers headers.put("API_KEY",API_KEY); headers.put("MACH_ID","123"); headers.put("MACH_TYPE","0"); headers.put("MACH_IP","127.0.0.1"); String result = httpPostForm(thirdUrl,params,headers,null); org.json.JSONObject thirdMsg = new org.json.JSONObject(result); bb.writeLog("进入thirdMsg-->"+thirdMsg); //String addressUrl="http://${单点系统地址}/sso_server/api/v1/tickets/createST"; params = new HashMap<>();//参数 params.put("tgt",certified_token); params.put("service",cockpitUrl); bb.writeLog("==STparams-->"+params); headers = new HashMap<>();//headers headers.put("API_KEY",API_KEY); headers.put("MACH_ID","123"); headers.put("MACH_TYPE","0"); headers.put("MACH_IP","127.0.0.1"); // String param="?user_at_domain%3D"+email; String responseInfo = httpPostForm(url,params,headers,null); bb.writeLog("进入TGT-->"+certified_token); bb.writeLog("进入接口地址-->"+url); bb.writeLog("进入responseInfo-->"+responseInfo); if (isEmpty(responseInfo)){ out.print("单点系统接口返回值为null"); return; }else { org.json.JSONObject stMsg = new org.json.JSONObject(responseInfo); if(stMsg.has("ST")){ ST = Util.null2String(stMsg.get("ST").toString()); }else{ out.print(Util.null2String(stMsg.getString("message"))); return; } String loginUrl = ""; boolean isEm = Util.null2String(request.getHeader("user-agent")).indexOf("E-Mobile") > -1; if(isEm == true){ bb.writeLog("是否进来了"); //loginUrl="http://123.151.115.199:8080/bi/APPFW?proc=1&action=viewer&hback=true&db=%E6%99%BA%E6%85%A7%E6%96%B9%E7%95%A5/%E5%89%8D%E7%BD%AE%E9%A1%B5.db?ticket="+ST; loginUrl="http://168.5.72.9:8080/bi/APPFW?ticket="+ST; bb.writeLog("是否进来了loginUrl=="+loginUrl); } } //String loginUrl="http://10.16.103.18:9900/coremail/main.jsp?sid="+sid; // httpPostRequest = httpPostRequest(null, loginUrl, null); bb.writeLog("loginUrl-->"+loginUrl); // bb.writeLog("跳转路径-->"+httpPostRequest); out.print("跳转路径-->"+loginUrl); out.print("进入驾驶舱成功"); response.sendRedirect(loginUrl); // return; } }else { out.print("进入驾驶舱系统失败,请先获取标识"); // response.sendRedirect(httpPostRequest); return; } %>