From b0136dea4ea787dd4f16cb75d3908a2c1f6f2c31 Mon Sep 17 00:00:00 2001 From: rengp Date: Mon, 11 Sep 2023 21:35:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0821_2/getCockpit.jsp | 641 ----------------- 0821_2/getHB.jsp | 651 ------------------ 0821_2/getHR.jsp | 641 ----------------- 0821_2/getHYZX.jsp | 651 ------------------ 0821_2/getResume.jsp | 651 ------------------ 0907jsp.zip | Bin 0 -> 35575 bytes docment/字段映射_1694422244889.xlsx | Bin 0 -> 32308 bytes .../阿里差旅推送财务系统_字段梳理_V4.0.xlsx | Bin 0 -> 13014 bytes 8 files changed, 3235 deletions(-) delete mode 100644 0821_2/getCockpit.jsp delete mode 100644 0821_2/getHB.jsp delete mode 100644 0821_2/getHR.jsp delete mode 100644 0821_2/getHYZX.jsp delete mode 100644 0821_2/getResume.jsp create mode 100644 0907jsp.zip create mode 100644 docment/字段映射_1694422244889.xlsx create mode 100644 docment/阿里差旅推送财务系统_字段梳理_V4.0.xlsx diff --git a/0821_2/getCockpit.jsp b/0821_2/getCockpit.jsp deleted file mode 100644 index 8b62fe2..0000000 --- a/0821_2/getCockpit.jsp +++ /dev/null @@ -1,641 +0,0 @@ -<%-- - 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" %> -<%@ page import="weaver.rsa.security.RSA" %> -<%@ page import="java.security.interfaces.RSAPublicKey" %> -<%@ page import="java.security.KeyFactory" %> -<%@ page import="java.security.spec.X509EncodedKeySpec" %> -<%@ page import="javax.crypto.Cipher" %> -<%@ page import="org.apache.commons.codec.binary.Base64" %> -<%@ page import="java.nio.charset.StandardCharsets" %> -<%@ page import="org.apache.http.impl.client.HttpClientBuilder" %> -<%@ page import="org.apache.http.client.methods.HttpGet" %> -<%! - //获取分页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 User getUser(int uid){ - User user = new User(); - RecordSet rs = new RecordSet(); - if (uid == 1) - rs.executeQuery("select * from hrmresourcemanager where id=?", uid); - else { - rs.executeQuery("select * from hrmresource where id=?", uid); - } - String userid = ""; - if (rs.next()) { - userid = rs.getString("id"); - user.setUid(rs.getInt("id")); - user.setLogintype("1"); - user.setLoginid(rs.getString("loginid")); - user.setFirstname(rs.getString("firstname")); - user.setLastname(rs.getString("lastname")); - user.setAliasname(rs.getString("aliasname")); - user.setTitle(rs.getString("title")); - user.setTitlelocation(rs.getString("titlelocation")); - user.setSex(rs.getString("sex")); - String langid = rs.getString("systemlanguage"); - user.setLanguage(Util.getIntValue(langid, 0)); - user.setTelephone(rs.getString("telephone")); - user.setMobile(rs.getString("mobile")); - user.setMobilecall(rs.getString("mobilecall")); - user.setEmail(rs.getString("email")); - user.setCountryid(rs.getString("countryid")); - user.setLocationid(rs.getString("locationid")); - user.setResourcetype(rs.getString("resourcetype")); - user.setStartdate(rs.getString("startdate")); - user.setEnddate(rs.getString("enddate")); - user.setContractdate(rs.getString("contractdate")); - user.setJobtitle(rs.getString("jobtitle")); - user.setJobgroup(rs.getString("jobgroup")); - user.setJobactivity(rs.getString("jobactivity")); - user.setJoblevel(rs.getString("joblevel")); - user.setSeclevel(rs.getString("seclevel")); - user.setUserDepartment(Util.getIntValue(rs.getString("departmentid"),0)); - user.setUserSubCompany1(Util.getIntValue(rs.getString("subcompanyid1"),0)); - user.setUserSubCompany2(Util.getIntValue(rs.getString("subcompanyid2"),0)); - user.setUserSubCompany3(Util.getIntValue(rs.getString("subcompanyid3"),0)); - user.setUserSubCompany4(Util.getIntValue(rs.getString("subcompanyid4"),0)); - user.setManagerid(rs.getString("managerid")); - user.setAssistantid(rs.getString("assistantid")); - user.setPurchaselimit(rs.getString("purchaselimit")); - user.setCurrencyid(rs.getString("currencyid")); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String lastLoginDate = sdf.format(new Date()); - user.setLastlogindate(lastLoginDate); - user.setLogintype("1"); - user.setAccount(rs.getString("account")); - } - return user; - } - - - - 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; - } - - /** - * 发送http get请求 - */ - public static String httpGet(String url,Map headers,String encode){ - BaseBean bb = new BaseBean(); - if(encode == null){ - encode = "utf-8"; - } - CloseableHttpResponse httpResponse = null; - CloseableHttpClient closeableHttpClient = null; - String content = null; - //since 4.3 不再使用 DefaultHttpClient - try { - closeableHttpClient = HttpClientBuilder.create().build(); - HttpGet httpGet = new HttpGet(url); - //设置header - if (headers != null && headers.size() > 0) { - for (Map.Entry entry : headers.entrySet()) { - httpGet.setHeader(entry.getKey(),entry.getValue()); - } - } - - bb.writeLog("url="+url+"header="+headers+"encode="+encode); - httpResponse = closeableHttpClient.execute(httpGet); - 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; - } - - /** - * 向指定 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; - } - - /** - * 公钥加密 - * - * @param content 内容 - * @param publicKey 公钥 - * @return 加密后的密文 - * @throws Exception 异常信息 - */ - public static String encrypt(String content, String publicKey) throws Exception { - //base64编码的公钥 - byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(publicKey); - RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); - //RSA加密 - Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.ENCRYPT_MODE, pubKey); - return Base64.encodeBase64String(cipher.doFinal(content.getBytes(StandardCharsets.UTF_8))); - } - - public static String getPublicKey(String str){ - BaseBean bb = new BaseBean(); - String publicKey =""; - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取publicKey接口 - Map headers = new HashMap<>(); - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","publicKeyUrl")); - headers.put("API_KEY",API_KEY); - headers.put("MACH_ID",str); - headers.put("MACH_TYPE","0"); - headers.put("MACH_IP","127.0.0.1"); - String msg = httpGet(url,headers,null); - bb.writeLog("===获取publickey返回值===="+msg); - try { - org.json.JSONObject resMsg = new org.json.JSONObject(msg); - bb.writeLog("===获取publickey返回值===="+resMsg); - if(resMsg.has("pubKey")){ - publicKey = Util.null2String(resMsg.get("pubKey").toString()); - } - }catch (Exception e){ - e.getMessage(); - } - return publicKey; - } - - //获取TG - public static String getST(String tgt,String emobileUrl,String id){ - BaseBean bb = new BaseBean(); - String ST = ""; - String retMsg = ""; - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取TG接口 - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl")); - bb.writeLog("==获取TG=="+url); - //移动端首页地址 - - bb.writeLog("==移动端首页地址=="+emobileUrl); - String str = "1510"+id+"015"; - //获取TGT - params = new HashMap<>();//参数 - params.put("tgt",tgt); - params.put("service",emobileUrl); - bb.writeLog("==STparams=="+params); - - headers = new HashMap<>();//headers - headers.put("API_KEY",API_KEY); - headers.put("MACH_ID",str); - headers.put("MACH_TYPE","0"); - headers.put("MACH_IP","127.0.0.1"); - try { - - retMsg = httpPostForm(url,params,headers,null); - bb.writeLog("===获取ST返回值===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取ST返回值resMsg===="+resMsg); - if(resMsg.has("ST")){ - ST = Util.null2String(resMsg.get("ST").toString()); - } - bb.writeLog("===获取ST===="+ST); - }catch(Exception e){ - throw new RuntimeException(e); - } - return retMsg; - - } - -%> -<% - RecordSet rs = new RecordSet(); - BaseBean bb=new BaseBean(); - RSA rsa = new RSA(); - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - JSONArray array = new JSONArray(); - List decriptList = new ArrayList<>(); - String ST ="";//获取ST - bb.writeLog("进入getCockpit.jap-->"); - String login_id = ""; - String user_password = ""; - - User user = HrmUserVarify.getUser(request, response); - int uid = user.getUID(); - bb.writeLog("uid-->"+uid); - String loginIdd = user.getLoginid(); - bb.writeLog("loginIdd-->"+loginIdd); - rs.executeQuery("select id,loginid,password,createtime from EmobileLoginDetail where id=?", uid); - if(rs.next()){ - login_id = Util.null2String(rs.getString("loginid")); - user_password = Util.null2String(rs.getString("password")); - } - bb.writeLog("login_id-->"+login_id); - bb.writeLog("user_password-->"+user_password); - //获取session - session = request.getSession(true); - String certified_token = Util.null2String(session.getAttribute("certified_token")); - bb.writeLog("获取sessionTGT=="+certified_token); - //获取cookie - Cookie[] cookies = request.getCookies(); - bb.writeLog("获取cookies=="+cookies); - String idd = ""; - if(cookies != null){ - for(Cookie cookie:cookies){ - bb.writeLog("获取cookiesName=="+cookie.getName()); - if(cookie.getName().equals("loginidweaver")){ - idd = cookie.getValue(); - bb.writeLog("获取idd=="+idd); - } - } - } - //查询 - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key"));//publicKey - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl"));//获取ST的url - String cockpitUrl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","cockpitUrl")); - String tgturl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","tgtUrl"));//请求获取TGT地址 - //获取ST,带着下游系统 -// if (!isEmpty(certified_token)){ -// String responseInfo = getST(certified_token,cockpitUrl,loginIdd); -// 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){ -// // loginUrl="https://jiashicang.bankoftianjin.com:8080/bi/APPFW?download=false&showToolbar=false&ticket="+ST; -// loginUrl="https://jiashicang.bankoftianjin.com:8080/bi/APPFW?proc=1&action=viewer&hback=true&db=%E6%99%BA%E6%85%A7%E6%96%B9%E7%95%A5/%E7%BB%8F%E8%90%A5%E6%8A%A5%E8%A1%A8.db&ticket="+ST; -// } -// -// //loginUrl = "https://www.baidu.com/"; -// bb.writeLog("loginUrl-->"+loginUrl); -// out.print("跳转路径-->"+loginUrl); -// out.print("进入驾驶舱成功"); -// response.sendRedirect(loginUrl); -// // return; -// } -// }else { - String TGT =""; - String passWord =""; - String retMsg =""; - decriptList.add(login_id); - decriptList.add(user_password); - List resultList = rsa.decryptList(request, decriptList); - String loginId = resultList.get(0); - String userPassword = resultList.get(1); - String str = "1510"+login_id+"015"; - String publicKey = getPublicKey(str); - passWord = encrypt(user_password, publicKey); - params = new HashMap<>();//参数 - params.put("username",loginId); - params.put("password",passWord); - bb.writeLog("==STparams=="+params); - - - headers = new HashMap<>();//headers - headers.put("API_KEY",API_KEY); - headers.put("MACH_ID",str); - headers.put("MACH_TYPE","0"); - headers.put("MACH_IP","127.0.0.1"); - - retMsg = httpPostForm(tgturl,params,headers,null); - bb.writeLog("===获取TGT返回值retMsg===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取TGT返回值===="+resMsg); - if(resMsg.has("TGT")){ - TGT = Util.null2String(resMsg.get("TGT").toString()); - } - String responseInfo = getST(TGT,cockpitUrl,login_id); - 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){ - // loginUrl="https://jiashicang.bankoftianjin.com:8080/bi/APPFW?download=false&showToolbar=false&ticket="+ST; - loginUrl="https://jiashicang.bankoftianjin.com:8080/bi/APPFW?proc=1&action=viewer&hback=true&db=%E6%99%BA%E6%85%A7%E6%96%B9%E7%95%A5/%E7%BB%8F%E8%90%A5%E6%8A%A5%E8%A1%A8.db&ticket="+ST; - //loginUrl="http://123.151.115.199:8080/bi/PCFW?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; - } - - bb.writeLog("loginUrl-->"+loginUrl); - out.print("跳转路径-->"+loginUrl); - out.print("进入驾驶舱成功"); - response.sendRedirect(loginUrl); - // } - - // out.print("进入驾驶舱系统失败,请先获取标识"); - //return; - } - -%> - -  diff --git a/0821_2/getHB.jsp b/0821_2/getHB.jsp deleted file mode 100644 index 9d285ec..0000000 --- a/0821_2/getHB.jsp +++ /dev/null @@ -1,651 +0,0 @@ -<%-- - 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" %> -<%@ page import="weaver.rsa.security.RSA" %> -<%@ page import="java.security.interfaces.RSAPublicKey" %> -<%@ page import="java.security.KeyFactory" %> -<%@ page import="java.security.spec.X509EncodedKeySpec" %> -<%@ page import="javax.crypto.Cipher" %> -<%@ page import="org.apache.commons.codec.binary.Base64" %> -<%@ page import="java.nio.charset.StandardCharsets" %> -<%@ page import="org.apache.http.impl.client.HttpClientBuilder" %> -<%@ page import="org.apache.http.client.methods.HttpGet" %> -<%@ page import="com.engine.common.util.ParamUtil" %> -<%! - //获取分页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 User getUser(int uid){ - User user = new User(); - RecordSet rs = new RecordSet(); - if (uid == 1) - rs.executeQuery("select * from hrmresourcemanager where id=?", uid); - else { - rs.executeQuery("select * from hrmresource where id=?", uid); - } - String userid = ""; - if (rs.next()) { - userid = rs.getString("id"); - user.setUid(rs.getInt("id")); - user.setLogintype("1"); - user.setLoginid(rs.getString("loginid")); - user.setFirstname(rs.getString("firstname")); - user.setLastname(rs.getString("lastname")); - user.setAliasname(rs.getString("aliasname")); - user.setTitle(rs.getString("title")); - user.setTitlelocation(rs.getString("titlelocation")); - user.setSex(rs.getString("sex")); - String langid = rs.getString("systemlanguage"); - user.setLanguage(Util.getIntValue(langid, 0)); - user.setTelephone(rs.getString("telephone")); - user.setMobile(rs.getString("mobile")); - user.setMobilecall(rs.getString("mobilecall")); - user.setEmail(rs.getString("email")); - user.setCountryid(rs.getString("countryid")); - user.setLocationid(rs.getString("locationid")); - user.setResourcetype(rs.getString("resourcetype")); - user.setStartdate(rs.getString("startdate")); - user.setEnddate(rs.getString("enddate")); - user.setContractdate(rs.getString("contractdate")); - user.setJobtitle(rs.getString("jobtitle")); - user.setJobgroup(rs.getString("jobgroup")); - user.setJobactivity(rs.getString("jobactivity")); - user.setJoblevel(rs.getString("joblevel")); - user.setSeclevel(rs.getString("seclevel")); - user.setUserDepartment(Util.getIntValue(rs.getString("departmentid"),0)); - user.setUserSubCompany1(Util.getIntValue(rs.getString("subcompanyid1"),0)); - user.setUserSubCompany2(Util.getIntValue(rs.getString("subcompanyid2"),0)); - user.setUserSubCompany3(Util.getIntValue(rs.getString("subcompanyid3"),0)); - user.setUserSubCompany4(Util.getIntValue(rs.getString("subcompanyid4"),0)); - user.setManagerid(rs.getString("managerid")); - user.setAssistantid(rs.getString("assistantid")); - user.setPurchaselimit(rs.getString("purchaselimit")); - user.setCurrencyid(rs.getString("currencyid")); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String lastLoginDate = sdf.format(new Date()); - user.setLastlogindate(lastLoginDate); - user.setLogintype("1"); - user.setAccount(rs.getString("account")); - } - return user; - } - - - - 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; - } - - /** - * 发送http get请求 - */ - public static String httpGet(String url,Map headers,String encode){ - BaseBean bb = new BaseBean(); - if(encode == null){ - encode = "utf-8"; - } - CloseableHttpResponse httpResponse = null; - CloseableHttpClient closeableHttpClient = null; - String content = null; - //since 4.3 不再使用 DefaultHttpClient - try { - closeableHttpClient = HttpClientBuilder.create().build(); - HttpGet httpGet = new HttpGet(url); - //设置header - if (headers != null && headers.size() > 0) { - for (Map.Entry entry : headers.entrySet()) { - httpGet.setHeader(entry.getKey(),entry.getValue()); - } - } - - bb.writeLog("url="+url+"header="+headers+"encode="+encode); - httpResponse = closeableHttpClient.execute(httpGet); - 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; - } - - /** - * 向指定 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; - } - - /** - * 公钥加密 - * - * @param content 内容 - * @param publicKey 公钥 - * @return 加密后的密文 - * @throws Exception 异常信息 - */ - public static String encrypt(String content, String publicKey) throws Exception { - //base64编码的公钥 - byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(publicKey); - RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); - //RSA加密 - Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.ENCRYPT_MODE, pubKey); - return Base64.encodeBase64String(cipher.doFinal(content.getBytes(StandardCharsets.UTF_8))); - } - - public static String getPublicKey(){ - BaseBean bb = new BaseBean(); - String publicKey =""; - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取publicKey接口 - Map headers = new HashMap<>(); - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","publicKeyUrl")); - 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 msg = httpGet(url,headers,null); - bb.writeLog("===获取publickey返回值===="+msg); - try { - org.json.JSONObject resMsg = new org.json.JSONObject(msg); - bb.writeLog("===获取publickey返回值===="+resMsg); - if(resMsg.has("pubKey")){ - publicKey = Util.null2String(resMsg.get("pubKey").toString()); - } - }catch (Exception e){ - e.getMessage(); - } - return publicKey; - } - - //获取TG - public static String getST(String tgt,String emobileUrl){ - BaseBean bb = new BaseBean(); - String ST = ""; - String retMsg = ""; - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取TG接口 - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl")); - bb.writeLog("==获取TG=="+url); - //移动端首页地址 - - bb.writeLog("==移动端首页地址=="+emobileUrl); - //获取TGT - params = new HashMap<>();//参数 - params.put("tgt",tgt); - params.put("service",emobileUrl); - 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"); - try { - - retMsg = httpPostForm(url,params,headers,null); - bb.writeLog("===获取ST返回值===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取ST返回值resMsg===="+resMsg); - if(resMsg.has("ST")){ - ST = Util.null2String(resMsg.get("ST").toString()); - } - bb.writeLog("===获取ST===="+ST); - }catch(Exception e){ - throw new RuntimeException(e); - } - return retMsg; - - } - -%> -<% - RecordSet rs = new RecordSet(); - BaseBean bb=new BaseBean(); - RSA rsa = new RSA(); - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - JSONArray array = new JSONArray(); - List decriptList = new ArrayList<>(); - String ST ="";//获取ST - bb.writeLog("进入获取简历jsp-->"); - String login_id = ""; - String user_password = ""; - - User user = HrmUserVarify.getUser(request, response); - int uid = user.getUID(); - bb.writeLog("uid-->"+uid); - rs.executeQuery("select id,loginid,password,createtime from EmobileLoginDetail where id=?", uid); - if(rs.next()){ - login_id = Util.null2String(rs.getString("loginid")); - user_password = Util.null2String(rs.getString("password")); - } - bb.writeLog("login_id-->"+login_id); - bb.writeLog("user_password-->"+user_password); - //获取session - session = request.getSession(true); - String certified_token = Util.null2String(session.getAttribute("certified_token")); - bb.writeLog("获取sessionTGT=="+certified_token); - //获取cookie - Cookie[] cookies = request.getCookies(); - bb.writeLog("获取cookies=="+cookies); - String idd = ""; - if(cookies != null){ - for(Cookie cookie:cookies){ - bb.writeLog("获取cookiesName=="+cookie.getName()); - if(cookie.getName().equals("loginidweaver")){ - idd = cookie.getValue(); - bb.writeLog("获取idd=="+idd); - } - } - } - //查询人员工号 - RecordSet recordSet = new RecordSet(); - String requestURI = request.getRequestURI(); - bb.writeLog("请求路径="+requestURI); - Map useridMap = ParamUtil.request2Map(request); - bb.writeLog("人员id="+useridMap.get("userid")); - recordSet.executeQuery("select WORKCODE from HRMRESOURCE where id=?", Util.null2String(useridMap.get("userid"))); - String workcode = ""; - if (recordSet.next()){ - workcode = Util.null2String(recordSet.getString("WORKCODE")); - } - bb.writeLog("人员workcode="+useridMap.get("workcode")); - //查询 - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key"));//publicKey - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl"));//获取ST的url - String cockpitUrl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","cockpitUrl")); - String tgturl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","tgtUrl"));//请求获取TGT地址 - //获取ST,带着下游系统 -// if (!isEmpty(certified_token)){ -// String responseInfo = getST(certified_token,cockpitUrl); -// 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 = ""; -// String remuseUrl = bb.getPropValue("tjbkremuse", "hbUrl"); -// boolean isEm = Util.null2String(request.getHeader("user-agent")).indexOf("E-Mobile") > -1; -// if(isEm == true){ -// loginUrl=remuseUrl+"&ticket="+ST; -// } -// -// //loginUrl = "https://www.baidu.com/"; -// bb.writeLog("loginUrl-->"+loginUrl); -// out.print("跳转路径-->"+loginUrl); -// out.print("进入驾驶舱成功"); -// response.sendRedirect(loginUrl); -// // return; -// } -// }else { - String TGT =""; - String passWord =""; - String retMsg =""; - decriptList.add(login_id); - decriptList.add(user_password); - List resultList = rsa.decryptList(request, decriptList); - String loginId = resultList.get(0); - String userPassword = resultList.get(1); - String publicKey = getPublicKey(); - passWord = encrypt(user_password, publicKey); - params = new HashMap<>();//参数 - params.put("username",loginId); - params.put("password",passWord); - 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"); - - retMsg = httpPostForm(tgturl,params,headers,null); - bb.writeLog("===获取TGT返回值retMsg===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取TGT返回值===="+resMsg); - if(resMsg.has("TGT")){ - TGT = Util.null2String(resMsg.get("TGT").toString()); - } - String responseInfo = getST(TGT,cockpitUrl); - 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 = ""; - String remuseUrl = bb.getPropValue("tjbkremuse", "hbUrl"); - - boolean isEm = Util.null2String(request.getHeader("user-agent")).indexOf("E-Mobile") > -1; - if(isEm == true){ - loginUrl=remuseUrl+"&ticket="+ST; - //loginUrl="http://123.151.115.199:8080/bi/PCFW?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; - } - - bb.writeLog("loginUrl-->"+loginUrl); - out.print("跳转路径-->"+loginUrl); - out.print("进入驾驶舱成功"); - response.sendRedirect(loginUrl); - // } - - // out.print("进入驾驶舱系统失败,请先获取标识"); - //return; - } - -%> - -  diff --git a/0821_2/getHR.jsp b/0821_2/getHR.jsp deleted file mode 100644 index 3127e48..0000000 --- a/0821_2/getHR.jsp +++ /dev/null @@ -1,641 +0,0 @@ -<%-- - 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" %> -<%@ page import="weaver.rsa.security.RSA" %> -<%@ page import="java.security.interfaces.RSAPublicKey" %> -<%@ page import="java.security.KeyFactory" %> -<%@ page import="java.security.spec.X509EncodedKeySpec" %> -<%@ page import="javax.crypto.Cipher" %> -<%@ page import="org.apache.commons.codec.binary.Base64" %> -<%@ page import="java.nio.charset.StandardCharsets" %> -<%@ page import="org.apache.http.impl.client.HttpClientBuilder" %> -<%@ page import="org.apache.http.client.methods.HttpGet" %> -<%! - //获取分页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 User getUser(int uid){ - User user = new User(); - RecordSet rs = new RecordSet(); - if (uid == 1) - rs.executeQuery("select * from hrmresourcemanager where id=?", uid); - else { - rs.executeQuery("select * from hrmresource where id=?", uid); - } - String userid = ""; - if (rs.next()) { - userid = rs.getString("id"); - user.setUid(rs.getInt("id")); - user.setLogintype("1"); - user.setLoginid(rs.getString("loginid")); - user.setFirstname(rs.getString("firstname")); - user.setLastname(rs.getString("lastname")); - user.setAliasname(rs.getString("aliasname")); - user.setTitle(rs.getString("title")); - user.setTitlelocation(rs.getString("titlelocation")); - user.setSex(rs.getString("sex")); - String langid = rs.getString("systemlanguage"); - user.setLanguage(Util.getIntValue(langid, 0)); - user.setTelephone(rs.getString("telephone")); - user.setMobile(rs.getString("mobile")); - user.setMobilecall(rs.getString("mobilecall")); - user.setEmail(rs.getString("email")); - user.setCountryid(rs.getString("countryid")); - user.setLocationid(rs.getString("locationid")); - user.setResourcetype(rs.getString("resourcetype")); - user.setStartdate(rs.getString("startdate")); - user.setEnddate(rs.getString("enddate")); - user.setContractdate(rs.getString("contractdate")); - user.setJobtitle(rs.getString("jobtitle")); - user.setJobgroup(rs.getString("jobgroup")); - user.setJobactivity(rs.getString("jobactivity")); - user.setJoblevel(rs.getString("joblevel")); - user.setSeclevel(rs.getString("seclevel")); - user.setUserDepartment(Util.getIntValue(rs.getString("departmentid"),0)); - user.setUserSubCompany1(Util.getIntValue(rs.getString("subcompanyid1"),0)); - user.setUserSubCompany2(Util.getIntValue(rs.getString("subcompanyid2"),0)); - user.setUserSubCompany3(Util.getIntValue(rs.getString("subcompanyid3"),0)); - user.setUserSubCompany4(Util.getIntValue(rs.getString("subcompanyid4"),0)); - user.setManagerid(rs.getString("managerid")); - user.setAssistantid(rs.getString("assistantid")); - user.setPurchaselimit(rs.getString("purchaselimit")); - user.setCurrencyid(rs.getString("currencyid")); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String lastLoginDate = sdf.format(new Date()); - user.setLastlogindate(lastLoginDate); - user.setLogintype("1"); - user.setAccount(rs.getString("account")); - } - return user; - } - - - - 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; - } - - /** - * 发送http get请求 - */ - public static String httpGet(String url,Map headers,String encode){ - BaseBean bb = new BaseBean(); - if(encode == null){ - encode = "utf-8"; - } - CloseableHttpResponse httpResponse = null; - CloseableHttpClient closeableHttpClient = null; - String content = null; - //since 4.3 不再使用 DefaultHttpClient - try { - closeableHttpClient = HttpClientBuilder.create().build(); - HttpGet httpGet = new HttpGet(url); - //设置header - if (headers != null && headers.size() > 0) { - for (Map.Entry entry : headers.entrySet()) { - httpGet.setHeader(entry.getKey(),entry.getValue()); - } - } - - bb.writeLog("url="+url+"header="+headers+"encode="+encode); - httpResponse = closeableHttpClient.execute(httpGet); - 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; - } - - /** - * 向指定 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; - } - - /** - * 公钥加密 - * - * @param content 内容 - * @param publicKey 公钥 - * @return 加密后的密文 - * @throws Exception 异常信息 - */ - public static String encrypt(String content, String publicKey) throws Exception { - //base64编码的公钥 - byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(publicKey); - RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); - //RSA加密 - Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.ENCRYPT_MODE, pubKey); - return Base64.encodeBase64String(cipher.doFinal(content.getBytes(StandardCharsets.UTF_8))); - } - - public static String getPublicKey(String str){ - BaseBean bb = new BaseBean(); - String publicKey =""; - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取publicKey接口 - Map headers = new HashMap<>(); - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","publicKeyUrl")); - headers.put("API_KEY",API_KEY); - headers.put("MACH_ID",str); - headers.put("MACH_TYPE","0"); - headers.put("MACH_IP","127.0.0.1"); - String msg = httpGet(url,headers,null); - bb.writeLog("===获取publickey返回值===="+msg); - try { - org.json.JSONObject resMsg = new org.json.JSONObject(msg); - bb.writeLog("===获取publickey返回值===="+resMsg); - if(resMsg.has("pubKey")){ - publicKey = Util.null2String(resMsg.get("pubKey").toString()); - } - }catch (Exception e){ - e.getMessage(); - } - return publicKey; - } - - //获取TG - public static String getST(String tgt,String emobileUrl,String id){ - BaseBean bb = new BaseBean(); - String ST = ""; - String retMsg = ""; - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取TG接口 - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl")); - bb.writeLog("==获取TG=="+url); - //移动端首页地址 - - bb.writeLog("==移动端首页地址=="+emobileUrl); - String str = "1510"+id+"015"; - //获取TGT - params = new HashMap<>();//参数 - params.put("tgt",tgt); - params.put("service",emobileUrl); - bb.writeLog("==STparams=="+params); - - headers = new HashMap<>();//headers - headers.put("API_KEY",API_KEY); - headers.put("MACH_ID",str); - headers.put("MACH_TYPE","0"); - headers.put("MACH_IP","127.0.0.1"); - try { - - retMsg = httpPostForm(url,params,headers,null); - bb.writeLog("===获取ST返回值===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取ST返回值resMsg===="+resMsg); - if(resMsg.has("ST")){ - ST = Util.null2String(resMsg.get("ST").toString()); - } - bb.writeLog("===获取ST===="+ST); - }catch(Exception e){ - throw new RuntimeException(e); - } - return retMsg; - - } - -%> -<% - RecordSet rs = new RecordSet(); - BaseBean bb=new BaseBean(); - RSA rsa = new RSA(); - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - JSONArray array = new JSONArray(); - List decriptList = new ArrayList<>(); - String ST ="";//获取ST - bb.writeLog("进入getCockpit.jap-->"); - String login_id = ""; - String user_password = ""; - - User user = HrmUserVarify.getUser(request, response); - int uid = user.getUID(); - bb.writeLog("uid-->"+uid); - String loginIdd = user.getLoginid(); - bb.writeLog("loginIdd-->"+loginIdd); - rs.executeQuery("select id,loginid,password,createtime from EmobileLoginDetail where id=?", uid); - if(rs.next()){ - login_id = Util.null2String(rs.getString("loginid")); - user_password = Util.null2String(rs.getString("password")); - } - bb.writeLog("login_id-->"+login_id); - bb.writeLog("user_password-->"+user_password); - //获取session - session = request.getSession(true); - String certified_token = Util.null2String(session.getAttribute("certified_token")); - bb.writeLog("获取sessionTGT=="+certified_token); - //获取cookie - Cookie[] cookies = request.getCookies(); - bb.writeLog("获取cookies=="+cookies); - String idd = ""; - if(cookies != null){ - for(Cookie cookie:cookies){ - bb.writeLog("获取cookiesName=="+cookie.getName()); - if(cookie.getName().equals("loginidweaver")){ - idd = cookie.getValue(); - bb.writeLog("获取idd=="+idd); - } - } - } - //查询 - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key"));//publicKey - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl"));//获取ST的url - String cockpitUrl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","cockpitUrl")); - String tgturl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","tgtUrl"));//请求获取TGT地址 - //获取ST,带着下游系统 -// if (!isEmpty(certified_token)){ -// String responseInfo = getST(certified_token,cockpitUrl,loginIdd); -// 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){ -// // loginUrl="https://jiashicang.bankoftianjin.com:8080/bi/APPFW?download=false&showToolbar=false&ticket="+ST; -// loginUrl="https://jiashicang.bankoftianjin.com:8080/bi/APPFW?proc=1&action=viewer&hback=true&db=%E6%99%BA%E6%85%A7%E6%96%B9%E7%95%A5/%E6%99%BA%E6%85%A7HR.db&ticket="+ST; -// } -// -// //loginUrl = "https://www.baidu.com/"; -// bb.writeLog("loginUrl-->"+loginUrl); -// out.print("跳转路径-->"+loginUrl); -// out.print("进入驾驶舱成功"); -// response.sendRedirect(loginUrl); -// // return; -// } -// }else { - String TGT =""; - String passWord =""; - String retMsg =""; - decriptList.add(login_id); - decriptList.add(user_password); - List resultList = rsa.decryptList(request, decriptList); - String loginId = resultList.get(0); - String userPassword = resultList.get(1); - String str = "1510"+login_id+"015"; - String publicKey = getPublicKey(str); - passWord = encrypt(user_password, publicKey); - params = new HashMap<>();//参数 - params.put("username",loginId); - params.put("password",passWord); - bb.writeLog("==STparams=="+params); - - - headers = new HashMap<>();//headers - headers.put("API_KEY",API_KEY); - headers.put("MACH_ID",str); - headers.put("MACH_TYPE","0"); - headers.put("MACH_IP","127.0.0.1"); - - retMsg = httpPostForm(tgturl,params,headers,null); - bb.writeLog("===获取TGT返回值retMsg===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取TGT返回值===="+resMsg); - if(resMsg.has("TGT")){ - TGT = Util.null2String(resMsg.get("TGT").toString()); - } - String responseInfo = getST(TGT,cockpitUrl,login_id); - 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){ - // loginUrl="https://jiashicang.bankoftianjin.com:8080/bi/APPFW?download=false&showToolbar=false&ticket="+ST; - loginUrl="https://jiashicang.bankoftianjin.com:8080/bi/APPFW?proc=1&action=viewer&hback=true&db=%E6%99%BA%E6%85%A7%E6%96%B9%E7%95%A5/%E6%99%BA%E6%85%A7HR.db&ticket="+ST; - //loginUrl="http://123.151.115.199:8080/bi/PCFW?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; - } - - bb.writeLog("loginUrl-->"+loginUrl); - out.print("跳转路径-->"+loginUrl); - out.print("进入驾驶舱成功"); - response.sendRedirect(loginUrl); - // } - - // out.print("进入驾驶舱系统失败,请先获取标识"); - //return; - } - -%> - -  diff --git a/0821_2/getHYZX.jsp b/0821_2/getHYZX.jsp deleted file mode 100644 index 46e18d7..0000000 --- a/0821_2/getHYZX.jsp +++ /dev/null @@ -1,651 +0,0 @@ -<%-- - 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" %> -<%@ page import="weaver.rsa.security.RSA" %> -<%@ page import="java.security.interfaces.RSAPublicKey" %> -<%@ page import="java.security.KeyFactory" %> -<%@ page import="java.security.spec.X509EncodedKeySpec" %> -<%@ page import="javax.crypto.Cipher" %> -<%@ page import="org.apache.commons.codec.binary.Base64" %> -<%@ page import="java.nio.charset.StandardCharsets" %> -<%@ page import="org.apache.http.impl.client.HttpClientBuilder" %> -<%@ page import="org.apache.http.client.methods.HttpGet" %> -<%@ page import="com.engine.common.util.ParamUtil" %> -<%! - //获取分页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 User getUser(int uid){ - User user = new User(); - RecordSet rs = new RecordSet(); - if (uid == 1) - rs.executeQuery("select * from hrmresourcemanager where id=?", uid); - else { - rs.executeQuery("select * from hrmresource where id=?", uid); - } - String userid = ""; - if (rs.next()) { - userid = rs.getString("id"); - user.setUid(rs.getInt("id")); - user.setLogintype("1"); - user.setLoginid(rs.getString("loginid")); - user.setFirstname(rs.getString("firstname")); - user.setLastname(rs.getString("lastname")); - user.setAliasname(rs.getString("aliasname")); - user.setTitle(rs.getString("title")); - user.setTitlelocation(rs.getString("titlelocation")); - user.setSex(rs.getString("sex")); - String langid = rs.getString("systemlanguage"); - user.setLanguage(Util.getIntValue(langid, 0)); - user.setTelephone(rs.getString("telephone")); - user.setMobile(rs.getString("mobile")); - user.setMobilecall(rs.getString("mobilecall")); - user.setEmail(rs.getString("email")); - user.setCountryid(rs.getString("countryid")); - user.setLocationid(rs.getString("locationid")); - user.setResourcetype(rs.getString("resourcetype")); - user.setStartdate(rs.getString("startdate")); - user.setEnddate(rs.getString("enddate")); - user.setContractdate(rs.getString("contractdate")); - user.setJobtitle(rs.getString("jobtitle")); - user.setJobgroup(rs.getString("jobgroup")); - user.setJobactivity(rs.getString("jobactivity")); - user.setJoblevel(rs.getString("joblevel")); - user.setSeclevel(rs.getString("seclevel")); - user.setUserDepartment(Util.getIntValue(rs.getString("departmentid"),0)); - user.setUserSubCompany1(Util.getIntValue(rs.getString("subcompanyid1"),0)); - user.setUserSubCompany2(Util.getIntValue(rs.getString("subcompanyid2"),0)); - user.setUserSubCompany3(Util.getIntValue(rs.getString("subcompanyid3"),0)); - user.setUserSubCompany4(Util.getIntValue(rs.getString("subcompanyid4"),0)); - user.setManagerid(rs.getString("managerid")); - user.setAssistantid(rs.getString("assistantid")); - user.setPurchaselimit(rs.getString("purchaselimit")); - user.setCurrencyid(rs.getString("currencyid")); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String lastLoginDate = sdf.format(new Date()); - user.setLastlogindate(lastLoginDate); - user.setLogintype("1"); - user.setAccount(rs.getString("account")); - } - return user; - } - - - - 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; - } - - /** - * 发送http get请求 - */ - public static String httpGet(String url,Map headers,String encode){ - BaseBean bb = new BaseBean(); - if(encode == null){ - encode = "utf-8"; - } - CloseableHttpResponse httpResponse = null; - CloseableHttpClient closeableHttpClient = null; - String content = null; - //since 4.3 不再使用 DefaultHttpClient - try { - closeableHttpClient = HttpClientBuilder.create().build(); - HttpGet httpGet = new HttpGet(url); - //设置header - if (headers != null && headers.size() > 0) { - for (Map.Entry entry : headers.entrySet()) { - httpGet.setHeader(entry.getKey(),entry.getValue()); - } - } - - bb.writeLog("url="+url+"header="+headers+"encode="+encode); - httpResponse = closeableHttpClient.execute(httpGet); - 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; - } - - /** - * 向指定 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; - } - - /** - * 公钥加密 - * - * @param content 内容 - * @param publicKey 公钥 - * @return 加密后的密文 - * @throws Exception 异常信息 - */ - public static String encrypt(String content, String publicKey) throws Exception { - //base64编码的公钥 - byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(publicKey); - RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); - //RSA加密 - Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.ENCRYPT_MODE, pubKey); - return Base64.encodeBase64String(cipher.doFinal(content.getBytes(StandardCharsets.UTF_8))); - } - - public static String getPublicKey(){ - BaseBean bb = new BaseBean(); - String publicKey =""; - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取publicKey接口 - Map headers = new HashMap<>(); - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","publicKeyUrl")); - 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 msg = httpGet(url,headers,null); - bb.writeLog("===获取publickey返回值===="+msg); - try { - org.json.JSONObject resMsg = new org.json.JSONObject(msg); - bb.writeLog("===获取publickey返回值===="+resMsg); - if(resMsg.has("pubKey")){ - publicKey = Util.null2String(resMsg.get("pubKey").toString()); - } - }catch (Exception e){ - e.getMessage(); - } - return publicKey; - } - - //获取TG - public static String getST(String tgt,String emobileUrl){ - BaseBean bb = new BaseBean(); - String ST = ""; - String retMsg = ""; - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取TG接口 - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl")); - bb.writeLog("==获取TG=="+url); - //移动端首页地址 - - bb.writeLog("==移动端首页地址=="+emobileUrl); - //获取TGT - params = new HashMap<>();//参数 - params.put("tgt",tgt); - params.put("service",emobileUrl); - 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"); - try { - - retMsg = httpPostForm(url,params,headers,null); - bb.writeLog("===获取ST返回值===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取ST返回值resMsg===="+resMsg); - if(resMsg.has("ST")){ - ST = Util.null2String(resMsg.get("ST").toString()); - } - bb.writeLog("===获取ST===="+ST); - }catch(Exception e){ - throw new RuntimeException(e); - } - return retMsg; - - } - -%> -<% - RecordSet rs = new RecordSet(); - BaseBean bb=new BaseBean(); - RSA rsa = new RSA(); - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - JSONArray array = new JSONArray(); - List decriptList = new ArrayList<>(); - String ST ="";//获取ST - bb.writeLog("进入获取简历jsp-->"); - String login_id = ""; - String user_password = ""; - - User user = HrmUserVarify.getUser(request, response); - int uid = user.getUID(); - bb.writeLog("uid-->"+uid); - rs.executeQuery("select id,loginid,password,createtime from EmobileLoginDetail where id=?", uid); - if(rs.next()){ - login_id = Util.null2String(rs.getString("loginid")); - user_password = Util.null2String(rs.getString("password")); - } - bb.writeLog("login_id-->"+login_id); - bb.writeLog("user_password-->"+user_password); - //获取session - session = request.getSession(true); - String certified_token = Util.null2String(session.getAttribute("certified_token")); - bb.writeLog("获取sessionTGT=="+certified_token); - //获取cookie - Cookie[] cookies = request.getCookies(); - bb.writeLog("获取cookies=="+cookies); - String idd = ""; - if(cookies != null){ - for(Cookie cookie:cookies){ - bb.writeLog("获取cookiesName=="+cookie.getName()); - if(cookie.getName().equals("loginidweaver")){ - idd = cookie.getValue(); - bb.writeLog("获取idd=="+idd); - } - } - } - //查询人员工号 - RecordSet recordSet = new RecordSet(); - String requestURI = request.getRequestURI(); - bb.writeLog("请求路径="+requestURI); - Map useridMap = ParamUtil.request2Map(request); - bb.writeLog("人员id="+useridMap.get("userid")); - recordSet.executeQuery("select WORKCODE from HRMRESOURCE where id=?", Util.null2String(useridMap.get("userid"))); - String workcode = ""; - if (recordSet.next()){ - workcode = Util.null2String(recordSet.getString("WORKCODE")); - } - bb.writeLog("人员workcode="+useridMap.get("workcode")); - //查询 - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key"));//publicKey - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl"));//获取ST的url - String cockpitUrl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","cockpitUrl")); - String tgturl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","tgtUrl"));//请求获取TGT地址 - //获取ST,带着下游系统 -// if (!isEmpty(certified_token)){ -// String responseInfo = getST(certified_token,cockpitUrl); -// 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 = ""; -// String remuseUrl = bb.getPropValue("tjbkremuse", "hyzxUrl"); -// boolean isEm = Util.null2String(request.getHeader("user-agent")).indexOf("E-Mobile") > -1; -// if(isEm == true){ -// loginUrl=remuseUrl+"&ticket="+ST; -// } -// -// //loginUrl = "https://www.baidu.com/"; -// bb.writeLog("loginUrl-->"+loginUrl); -// out.print("跳转路径-->"+loginUrl); -// out.print("进入驾驶舱成功"); -// response.sendRedirect(loginUrl); -// // return; -// } -// }else { - String TGT =""; - String passWord =""; - String retMsg =""; - decriptList.add(login_id); - decriptList.add(user_password); - List resultList = rsa.decryptList(request, decriptList); - String loginId = resultList.get(0); - String userPassword = resultList.get(1); - String publicKey = getPublicKey(); - passWord = encrypt(user_password, publicKey); - params = new HashMap<>();//参数 - params.put("username",loginId); - params.put("password",passWord); - 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"); - - retMsg = httpPostForm(tgturl,params,headers,null); - bb.writeLog("===获取TGT返回值retMsg===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取TGT返回值===="+resMsg); - if(resMsg.has("TGT")){ - TGT = Util.null2String(resMsg.get("TGT").toString()); - } - String responseInfo = getST(TGT,cockpitUrl); - 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 = ""; - String remuseUrl = bb.getPropValue("tjbkremuse", "hyzxUrl"); - - boolean isEm = Util.null2String(request.getHeader("user-agent")).indexOf("E-Mobile") > -1; - if(isEm == true){ - loginUrl=remuseUrl+"&ticket="+ST; - //loginUrl="http://123.151.115.199:8080/bi/PCFW?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; - } - - bb.writeLog("loginUrl-->"+loginUrl); - out.print("跳转路径-->"+loginUrl); - out.print("进入驾驶舱成功"); - response.sendRedirect(loginUrl); - // } - - // out.print("进入驾驶舱系统失败,请先获取标识"); - //return; - } - -%> - -  diff --git a/0821_2/getResume.jsp b/0821_2/getResume.jsp deleted file mode 100644 index 549166a..0000000 --- a/0821_2/getResume.jsp +++ /dev/null @@ -1,651 +0,0 @@ -<%-- - 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" %> -<%@ page import="weaver.rsa.security.RSA" %> -<%@ page import="java.security.interfaces.RSAPublicKey" %> -<%@ page import="java.security.KeyFactory" %> -<%@ page import="java.security.spec.X509EncodedKeySpec" %> -<%@ page import="javax.crypto.Cipher" %> -<%@ page import="org.apache.commons.codec.binary.Base64" %> -<%@ page import="java.nio.charset.StandardCharsets" %> -<%@ page import="org.apache.http.impl.client.HttpClientBuilder" %> -<%@ page import="org.apache.http.client.methods.HttpGet" %> -<%@ page import="com.engine.common.util.ParamUtil" %> -<%! - //获取分页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 User getUser(int uid){ - User user = new User(); - RecordSet rs = new RecordSet(); - if (uid == 1) - rs.executeQuery("select * from hrmresourcemanager where id=?", uid); - else { - rs.executeQuery("select * from hrmresource where id=?", uid); - } - String userid = ""; - if (rs.next()) { - userid = rs.getString("id"); - user.setUid(rs.getInt("id")); - user.setLogintype("1"); - user.setLoginid(rs.getString("loginid")); - user.setFirstname(rs.getString("firstname")); - user.setLastname(rs.getString("lastname")); - user.setAliasname(rs.getString("aliasname")); - user.setTitle(rs.getString("title")); - user.setTitlelocation(rs.getString("titlelocation")); - user.setSex(rs.getString("sex")); - String langid = rs.getString("systemlanguage"); - user.setLanguage(Util.getIntValue(langid, 0)); - user.setTelephone(rs.getString("telephone")); - user.setMobile(rs.getString("mobile")); - user.setMobilecall(rs.getString("mobilecall")); - user.setEmail(rs.getString("email")); - user.setCountryid(rs.getString("countryid")); - user.setLocationid(rs.getString("locationid")); - user.setResourcetype(rs.getString("resourcetype")); - user.setStartdate(rs.getString("startdate")); - user.setEnddate(rs.getString("enddate")); - user.setContractdate(rs.getString("contractdate")); - user.setJobtitle(rs.getString("jobtitle")); - user.setJobgroup(rs.getString("jobgroup")); - user.setJobactivity(rs.getString("jobactivity")); - user.setJoblevel(rs.getString("joblevel")); - user.setSeclevel(rs.getString("seclevel")); - user.setUserDepartment(Util.getIntValue(rs.getString("departmentid"),0)); - user.setUserSubCompany1(Util.getIntValue(rs.getString("subcompanyid1"),0)); - user.setUserSubCompany2(Util.getIntValue(rs.getString("subcompanyid2"),0)); - user.setUserSubCompany3(Util.getIntValue(rs.getString("subcompanyid3"),0)); - user.setUserSubCompany4(Util.getIntValue(rs.getString("subcompanyid4"),0)); - user.setManagerid(rs.getString("managerid")); - user.setAssistantid(rs.getString("assistantid")); - user.setPurchaselimit(rs.getString("purchaselimit")); - user.setCurrencyid(rs.getString("currencyid")); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String lastLoginDate = sdf.format(new Date()); - user.setLastlogindate(lastLoginDate); - user.setLogintype("1"); - user.setAccount(rs.getString("account")); - } - return user; - } - - - - 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; - } - - /** - * 发送http get请求 - */ - public static String httpGet(String url,Map headers,String encode){ - BaseBean bb = new BaseBean(); - if(encode == null){ - encode = "utf-8"; - } - CloseableHttpResponse httpResponse = null; - CloseableHttpClient closeableHttpClient = null; - String content = null; - //since 4.3 不再使用 DefaultHttpClient - try { - closeableHttpClient = HttpClientBuilder.create().build(); - HttpGet httpGet = new HttpGet(url); - //设置header - if (headers != null && headers.size() > 0) { - for (Map.Entry entry : headers.entrySet()) { - httpGet.setHeader(entry.getKey(),entry.getValue()); - } - } - - bb.writeLog("url="+url+"header="+headers+"encode="+encode); - httpResponse = closeableHttpClient.execute(httpGet); - 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; - } - - /** - * 向指定 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; - } - - /** - * 公钥加密 - * - * @param content 内容 - * @param publicKey 公钥 - * @return 加密后的密文 - * @throws Exception 异常信息 - */ - public static String encrypt(String content, String publicKey) throws Exception { - //base64编码的公钥 - byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(publicKey); - RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); - //RSA加密 - Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.ENCRYPT_MODE, pubKey); - return Base64.encodeBase64String(cipher.doFinal(content.getBytes(StandardCharsets.UTF_8))); - } - - public static String getPublicKey(){ - BaseBean bb = new BaseBean(); - String publicKey =""; - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取publicKey接口 - Map headers = new HashMap<>(); - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","publicKeyUrl")); - 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 msg = httpGet(url,headers,null); - bb.writeLog("===获取publickey返回值===="+msg); - try { - org.json.JSONObject resMsg = new org.json.JSONObject(msg); - bb.writeLog("===获取publickey返回值===="+resMsg); - if(resMsg.has("pubKey")){ - publicKey = Util.null2String(resMsg.get("pubKey").toString()); - } - }catch (Exception e){ - e.getMessage(); - } - return publicKey; - } - - //获取TG - public static String getST(String tgt,String emobileUrl){ - BaseBean bb = new BaseBean(); - String ST = ""; - String retMsg = ""; - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key")); - //请求获取TG接口 - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl")); - bb.writeLog("==获取TG=="+url); - //移动端首页地址 - - bb.writeLog("==移动端首页地址=="+emobileUrl); - //获取TGT - params = new HashMap<>();//参数 - params.put("tgt",tgt); - params.put("service",emobileUrl); - 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"); - try { - - retMsg = httpPostForm(url,params,headers,null); - bb.writeLog("===获取ST返回值===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取ST返回值resMsg===="+resMsg); - if(resMsg.has("ST")){ - ST = Util.null2String(resMsg.get("ST").toString()); - } - bb.writeLog("===获取ST===="+ST); - }catch(Exception e){ - throw new RuntimeException(e); - } - return retMsg; - - } - -%> -<% - RecordSet rs = new RecordSet(); - BaseBean bb=new BaseBean(); - RSA rsa = new RSA(); - Map params = new HashMap<>();//参数 - Map headers = new HashMap<>();//headers - JSONArray array = new JSONArray(); - List decriptList = new ArrayList<>(); - String ST ="";//获取ST - bb.writeLog("进入获取简历jsp-->"); - String login_id = ""; - String user_password = ""; - - User user = HrmUserVarify.getUser(request, response); - int uid = user.getUID(); - bb.writeLog("uid-->"+uid); - rs.executeQuery("select id,loginid,password,createtime from EmobileLoginDetail where id=?", uid); - if(rs.next()){ - login_id = Util.null2String(rs.getString("loginid")); - user_password = Util.null2String(rs.getString("password")); - } - bb.writeLog("login_id-->"+login_id); - bb.writeLog("user_password-->"+user_password); - //获取session - session = request.getSession(true); - String certified_token = Util.null2String(session.getAttribute("certified_token")); - bb.writeLog("获取sessionTGT=="+certified_token); - //获取cookie - Cookie[] cookies = request.getCookies(); - bb.writeLog("获取cookies=="+cookies); - String idd = ""; - if(cookies != null){ - for(Cookie cookie:cookies){ - bb.writeLog("获取cookiesName=="+cookie.getName()); - if(cookie.getName().equals("loginidweaver")){ - idd = cookie.getValue(); - bb.writeLog("获取idd=="+idd); - } - } - } - //查询人员工号 - RecordSet recordSet = new RecordSet(); - String requestURI = request.getRequestURI(); - bb.writeLog("请求路径="+requestURI); - Map useridMap = ParamUtil.request2Map(request); - bb.writeLog("人员id="+useridMap.get("userid")); - recordSet.executeQuery("select WORKCODE from HRMRESOURCE where id=?", Util.null2String(useridMap.get("userid"))); - String workcode = ""; - if (recordSet.next()){ - workcode = Util.null2String(recordSet.getString("WORKCODE")); - } - bb.writeLog("人员workcode="+useridMap.get("workcode")); - //查询 - String API_KEY = Util.null2String(bb.getPropValue("tjbankEMobileSSO","key"));//publicKey - String url = Util.null2String(bb.getPropValue("tjbankEMobileSSO","stUrl"));//获取ST的url - String cockpitUrl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","cockpitUrl")); - String tgturl = Util.null2String(bb.getPropValue("tjbankEMobileSSO","tgtUrl"));//请求获取TGT地址 - //获取ST,带着下游系统 -// if (!isEmpty(certified_token)){ -// String responseInfo = getST(certified_token,cockpitUrl); -// 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 = ""; -// String remuseUrl = bb.getPropValue("tjbkremuse", "url"); -// boolean isEm = Util.null2String(request.getHeader("user-agent")).indexOf("E-Mobile") > -1; -// if(isEm == true){ -// loginUrl=remuseUrl+workcode+"&ticket="+ST; -// } -// -// //loginUrl = "https://www.baidu.com/"; -// bb.writeLog("loginUrl-->"+loginUrl); -// out.print("跳转路径-->"+loginUrl); -// out.print("进入驾驶舱成功"); -// response.sendRedirect(loginUrl); -// // return; -// } -// }else { - String TGT =""; - String passWord =""; - String retMsg =""; - decriptList.add(login_id); - decriptList.add(user_password); - List resultList = rsa.decryptList(request, decriptList); - String loginId = resultList.get(0); - String userPassword = resultList.get(1); - String publicKey = getPublicKey(); - passWord = encrypt(user_password, publicKey); - params = new HashMap<>();//参数 - params.put("username",loginId); - params.put("password",passWord); - 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"); - - retMsg = httpPostForm(tgturl,params,headers,null); - bb.writeLog("===获取TGT返回值retMsg===="+retMsg); - org.json.JSONObject resMsg = new org.json.JSONObject(retMsg); - bb.writeLog("===获取TGT返回值===="+resMsg); - if(resMsg.has("TGT")){ - TGT = Util.null2String(resMsg.get("TGT").toString()); - } - String responseInfo = getST(TGT,cockpitUrl); - 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 = ""; - String remuseUrl = bb.getPropValue("tjbkremuse", "url"); - - boolean isEm = Util.null2String(request.getHeader("user-agent")).indexOf("E-Mobile") > -1; - if(isEm == true){ - loginUrl=remuseUrl+workcode+"&ticket="+ST; - //loginUrl="http://123.151.115.199:8080/bi/PCFW?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; - } - - bb.writeLog("loginUrl-->"+loginUrl); - out.print("跳转路径-->"+loginUrl); - out.print("进入驾驶舱成功"); - response.sendRedirect(loginUrl); - // } - - // out.print("进入驾驶舱系统失败,请先获取标识"); - //return; - } - -%> - -  diff --git a/0907jsp.zip b/0907jsp.zip new file mode 100644 index 0000000000000000000000000000000000000000..9e0795b709a6f93d2628b06be60ec17bc5cdd894 GIT binary patch literal 35575 zcmbr_Q_N^VqnP2(wrzWVwr$(CZQHhO+qP}n_U`^qdeM`#O_ScNWY*? zY>|7+%J(pXs_aBV4--rv2OLmqF@HevQAhU3p_W9^*T7=buB!FZa>h5z+p6}vB7cxb z>H$J;m{e=N2WaQHhNd*tMC4gP5G}5yoh7E7|9qNw*_jy~Cq{y$x0dZKLXua3K!V({VjlL&{OaOEW zhjmzS4;MX~z$l7OWLUq*_=VpDHRP2A+GCAL^sI|+7daM+&F>I=7=BWf?5La!9N7RaBg4^q=A zazJb}KX;D-HCnGe|Bz=yN~!7eK!~tJS~|p-tiiUCCmn=Z<4;nB73A$Pg>8M)? zBC;mvxL&nDDpPM2*#52$vJii@tc%ikNw8&tJ?rYZ?v%z>Uz}t@9zS1Xp2!y|7p)1* zFsA}m0V^qt%jT^EHOTImR2?z^Ii)hycRp`mF`IN+c`mdVgrcqs<)sVo1`V;u<&>`2 zo97iHl$>MPR_*-}3=T*)i5&i8Kl-{As|@;THQTCPWxWDbWwPlkQ?=kFsBO09AiHh7 zZpz|t%UWKApVij@4spfiFB7CuWMW(}=SzTRB3UH<^TW{oAGf$y~swq%4 z#_~tQ&w6YgSJQSQoL4VfdL9m9~q|zD#23 zv*t^5Or#Is-~2+hS9xyeT6L!K+OVcs;2%+-0-g(Lkv18uTTS!nId~jO1KN>B_raN# zDEzseWcIqTaJ9mc^+ry^qRrX%yb!FoFz)zd*UGDG}z-HzA2O5t@^%N#c~T#laa`E z_OzQS=b)Sw5{U2(ElC|gAiD0fA{=L0D4iRpNuDLf^3Wi@RWH@b#+L@ ztWfAm<@0rxINO(AUJ)>4afFa9M;>{#oVUF7&rj{I5M-@9pCSNuqel+xtAGlx__z~7=OK|U z7&${{lc+`TrqXX>)PAtr66&5=`&1v5KX9l89crp9M3nrQQSukm=u>`*=qDT1BtRDd zgO`OGdV-4J2W`FR{Ew7AcPbZKcbv{=yH#)&$ofQ^b~#&~mk~K>b1u1G#XqlXH*Tvu zmja4`RY98!t}g0E&$sPE8(Cxc0-ce*e z*&68`9sBrIoaEEk^H<(Dih@+W{V68XTqTzdnlhNH&3QacPwSAw+|3@JR<(J)K!_j0VFV=~V|Q>jRII@jT+QHc zJOHFa7PL1m&;%xFgFA{kky8&Pw3c-xg1?xm53DZLsXC=D zMSySHQgbB|<2OJ}zqt)dWwVzNjtOST?s1^MWKsK_JB^jtP zEhPjl;KfF&iZ~cZy*Q276zwDk#G<#FvQi*O%&5RDG%|%gu$=Q?)k8wzDjK={sfbY; zOrC_YtI|Ue1I+c@m@Wg(RtC)Ilb!|3)r?vtA_^)xZb%}XSc1;ymMGb3jl!1EbnI4e z#s?;;EnPUE{7}f2f;{T6BqJB5Q9b>&O+>%a#Vh zb%k7x1-9u1+)yTv6icdA2b)%iwDeDp!yF{RI0Gq*a)P<&p&)1a5Ie6bq!jU1>$adk zgY{SwkHH3(%7zG(^fFjf7>GqUYvvhhFXnHaRmY>!tz8}tj6_f72Eq#2;SkyxV}#IX zqbe*B=PaJttAp)@>=v$RM+k((Y2o9z*9My)h^vIes2TNyo~ZChDzr?Q;;rjcGD0+l z%&U$)=bSZ)89|vT+W^61V1(SP00&cGgx(tf!SwjS_a_m-W*+m14PY)Bx%)jhW5FI# zhA?0B8cD&t;H!ok{^}#uS+?Q)OL}PxZCb4|*e4iV=PJSpLtjC|70Mp==oOL{R`-}0 zIk*)71-7!Y2ZZ2-fVlakY8$Nfaera3^xv(#XjG)!^`XwcLqM;QnTOhmuo zoG2<&EhX!0*otB(QfXy3-{?lBvQq*IU7t!0x2Oa3{^?9x@DRb*MJ_#HJ=V-ogP zDP{WBB(iC`k$A@%9lOInpbK)W;B9p(z9W{Egwt1fwPd7tZecju>zXs~}paI`p z4Z)3i*)9CAc0@%j+n3|N^_d<-Pvnspn-D@n%7|Z!e0YWTbp|-PR6HEq4L1bKX8{>T z_c~gSBq25t3i19DN87*eUpZpDce0n9mdg4%6_BrD43scc^fTtHR%GxUjTE*kh$**b zO`+P8PTIzEc#aimI7cqJt{rMuNwn*vjWb{F{&@!D2`;YfSvh6ATfh4nyEA)pyi;ss z!gYGQ3%?&J1cKLSJ#4@dyKHI4ku0PhF|mK_!rD4sp5t;}!diFz#DOYeP{MAmmohcvKyVHUPe+a(Vid@u`Z&J#C6k%MWc~+;Y7OexAJ=Woa{hyd8xGF&CqjqQva@ zH$DmALJ85Jnw-SW$j|JwvgvVhGw7x1-Kp;gklT&khUc_7^#O?pqHXnG<3dJb)EfUp zChl#!&lbT-l-$hmUUq*0F^@k}1|rn=&PU(*2j6NA(n8WP3eTFg?3MBgG}XbF^wWH5 zC0)NEG~t7uT=|_wKMM#ygpw>PeIq<_R^(}{VJ`bVJ32a=p5kTDllDccFUIY_47 zY50?3$dHDS_%=wB6rXI(^|d$sB5a~ee?8!lmd&X!IME(Idpk^3FL00JGcgMFPFq(H z3t>&pk`9kCm#mwMV!Fm&-RK5~imgskBI0BjJ9Sd3P!3XxO%;Y0&b1rI*36mW zHUVOePQ6TxpI#u}jLC)D@E{UUZb~4kqw5lplepi9g!Tl3E}TbADNUw83#C@hQ(rE2 zgcq%9h40=)iX_~ozX1~0x3OYbB^uE3E9Ogk0x~fvmV_@;MwT4=i^cFXJu{Y}{e;VY z^l%9YQab{J4&@}od0UjL;um0Id%|=KC(iW`_@A^GymM4L@E%Aoa92B+gdqKrE~~5K zr}!5&_@Aq1GYCCUm2GZWK)T4d@?a8i^wq1vu<{VxwVe`*r0Dtt;tmQZ4ijZY-G92# z+uQy8#-xMkM~L-2I+^XVdpo+q5zi1D#&ziSkrm@k*>V_9 z3~ij3n?0EjsAeynW;coPGJZ8R8OPj9)`n58a|75gE3CmS6B5%UMlrX_b8#qzZ zMBmouTZHY9K%O^>+$akr_cZMIwGN3fJiDdm();N@r;tv`$QI;abw5lpSSNfzn$%c$q1N(A1Hxk@o*8j2VabmgwgAu0zxhr<4J{^vY8Gy z0k&WL^s1C))*B*1iPz}qh3jtT_tYL|eU`#huYJNqA`SdLPK^HBio*2A+PD}p{5dRy zQWuL=Q>UgS`$V}JJIid>iqFr|=?J-YHvW|DTLx?i_CQmy0q2^(IB;ZUsX+&#gdrZp z%~r|EzDLHH0P4tvK(olOtDHB-+v#aqNkA`_^I@GlA34X3cZ0WOfMpz7ljy2CUUS?( zo&3hWg_{+tZ<6ukRiNIZ6_jb|UNkr@R5QSn#c=YT`a$H)o1lWis%R`nQC;S-Kgm|e ziyJs2Rcg$3iW8Fy_6+l*H`N-rMis~b){OxqrVd6k@7?37!*0_I-!_l;=W8QuU0~sP znE!zTks5DtFA@9%wyET-A0S%3ix;giv3}!RV$B*xc6BLx_c$nu0(5CaSxs7u`(;S( zJJ6EF_fLE0)Jnc|@5InxVW-z&OpT$0l7}rlFJM+#_T?-!`9U_#JFH#LlE-hzOdj8_ zP0yV%t|)lB*cP$TSe=W>I3HWanqMd_@6Maq$=7i9O~?A)PpSDE&w`(u<*Xx}yXCE% z#55?xLj+L$w-mGU#-_Wo)e)qhATfjkG0r-EKs%Et*Dm>D>isfw!fbOX9Y?>!}!euwU}jr za9W?RBifn5nVoxm2C9bWF>SNGqiapNYQtq9Qq5a;B&d^Q9MkE)baYoZ0er>Wrr(ZF zd)uO}2k5874eAfIwpLFpNV#XgA6D*4+_buKhl;WNFpAHWu9Ek&(eamT^7q5^yx)VY zluvpd4>&gKV&VWpG0yBf6#LL(rDt|oTI$(6p6&67JW(ChWMGlln7;(qarqhzwE{{B zNQEN2?|~fNTUuc)hljolmy${|L){h{(jr^VHgNJBJ$wEb@!s&GY&B)8@w6Zy>P58wp_@UcoQ2hfGYQSqa z048H}D&hwHIA}}XT+ASIDmKe!$6cV{Lixi(?LNGB=~3dd+l705(JBe5fjcjTe-KS| z1nm$8Q}(KxhD*@E;~x`taP_)F((mKc&g~)COCBPsM{-@BjPZ(?10kqli3$T_hP_M| z%!#)-p`A=Ow75OnMMjDlkq6RfXtcAeStFqrb=#$C+l)`rq+%Q$&Zzy*|P3*$e=!6B2z4CgVxs;)N8blT ze8BvkHn`SF_5&~y)AeQ>{?VROMnS#nb>SujoST>c50>t1hja77r1(xPia&@j$p-vZ z^$O?$_SK2(wAX6AI&p2Pysi2=O-tl={(W=u*rqSxH5V5bIUcY*YM}_#;~kEz?(=}V zrGKz5&gDcX4_w&~IRs2c+Z@C=3E8ED|CMgd->)5Xu;gc`Lioc>9NvK5O(Yo$4S&wq9$gn;~Vsv46;PWKI6>3{+mIWP!0# zS|ty@A5{h$6$U4P{}2B}wmz1ILr_nDV)&IpGzEeK*Z7jgZ)2bO8hK|4#eKaB>tc`! zzbM*)+MP7nHxhc}ZjcfHzOLf~Xxu@QhFy%y#0WaOvRWx#qccAPJ4<^AU+b4E3MdQD zvf&*!C%}53xw}r&zF$P_CEo37?yvJzjte`_5{HlHRaZ<+%-cOgc-xw5g}0BAyJzX0 znY|93-Yjz^+Qd_cH3m!3XPyGwVA1MG+b1Q{(HXt`Io?sC9bdXJ=dXPn81{-5eBMD& zKYF0)XE3 ztX7rTvsa939I4-S3AOSbvknj~QIG5UTuDkk<#t1JZ*Ox;q`vDtHf9e}>JCG5OYd^~ zlX>>!>#4)Gii(1tH5k-a_?S3B#Gu?@dUeJO?9A;tHOUDd1xbem5p%Y%Cuk?C0f1N9RZWjdR(@nNM4!38~`E2<m^Dg%1yF|kRiB7yz78QGuRmr+PzsD)XUPU`__`=fTj$uOeALUWwAgZ9Ru?>8%2oC15ytuDimx(KKQ`R4B9qIlW~NuiE`hdySkbZ)KjjS z80iDa!<#;LH(NVxcbhsUf9J=?Rn&->FASH)RFri^lv?AiT&`G|UCP-F;wOpmT;B>) zjCK<(lKx6;5CZH)jf#%dPVB^Yg(gpH!BSxEagFBUCX)?|kaGN_D8=v>9sNLdsLbAx@8?a=?UZFReSmO=VDmYkgr4ONw z)c_&FmJHAtVt1MDu$z0n6R_U==EuFO_COntSYVj$P-U4cm1pGsjXzr-wJFIMVmb-4 zAHhel8g!Xip%aJC7?Umnt;V3!9i|?wzW7>i`3lZu{h35^UCO5&ThHMokg^?OKP*vt zc!;!1&M%LRP~X08hh4gxFz!C!6qkbTWx#+PAo*H$4!qEe*GLi4Trs^ z=TM15N_XiF7%7=s&8M8wW0CBIrmhyp{~V5f#Kf)TxMsoK8uCdbq9EOS*7}J>6u=1A zpc01(s$TcqLM-I>o9T?bQ_l8uC<)B!Jz4KTAFi=wU-i23LY4f&X-|?}BLv@C zqT~FAPS|w%=!V4i= z7b7@8)dut|_h+`*Q&F4z>{k)01#e;1O%?Gp%@ZuwBvZvl1=t3#g~ug{Lt#j}0)u)o zR=rf00uSU3JmdvSqSY$-snn=F3-YmA@$tuwSuyO&R0pTE`T6zy+JQfAm+H=>b7#CC zqHVgph>nv!RfxRcoN}!Kgm^?Y34-U|#Es^}68-Q&jE1n{6vGhskcOa+B`kyVXoo`s z*SD%&;_q~Soq0?cG8(<5IYP|9v#h482S;s=jl+rU?*tMB4*ke4&odx2xtE!O5cC(q za%7^D0i0|KrhxVN54DSQbo|IB z*OwU?U6D?mtkYi%)h6b1Hmm<-TqJ|HRyt+`1h`lY#|wtXmR03k;iIF03<{&ajH9dv zK@-FEtci2iq2zSPL!0(^0dOKn1d372Cfn)Dw%@N`r&oFf9T{EdaQGR#>e)ih1dP_8 z-}EyCGlT}eS;y?}lFY}9>o(qDP32bJG@|=X{Me^*20xdEeV~g2R{4QS$djEHnq%V0 zx~|!r!;|BWkujxxSn3daG3P#2U_fZq1e#y#Mwzy4moL)Y=>$cBfC-cS;?eYbHV5`> zhzVVE^(^_gfN-2cw1>Al-HvRAtqo6y5w90+tbXcte)of?TykEvB|WZyz1DqR-9DEa z0Pkd%$wWxjf^A15ynje?;$*FT-5Pu@k5AL~qyR?M@4G!bYkn3T9@3?l$Jh7fLSF$I zCP~|XL0WFX$iTKWRV$)6pkfr|jn2vrN@qVy2UGD&IuewdDQy@?jQl z2h3vcxyk0nGLB~Imq*nuSwhj5{Tz1On8_kd17n-@869GgkxK@HfegmC6bei@~2e2xS|jFRp^piW%K#c!pY8C5=nQ`(DMUS)NGYSXX`*3 z_bR;ON0HjrFK$PG9FPueZu3$RGv_ArW-m1ZQ06ooElfg%-JYl=*$qX}Rskq4B9&=R zo>&ZJXE8cfY3kUp0vb@0MT?Ezu1ax_kd(4oLf#3e+VmghV~$$!ajfWqu7XMwz(<+2 zxxBX;nV$igEHxZV8<=Vpx8xfumln1CSpnxshTGe z_af3>EPGM4YgB3&GF&nt4~QsS|Y zBE6Oy>9&N^e%v1644~y|ga)~wIy7rEka#B6fTf+rDhWpXJjUrAM zHPzt=tdfpY(CyiApDU|DBl4kL8*h8atgnkm9a3A!r4FqE^W51(tWB%xFw^oGI;ln@ zpRrP`8CZk-qpn9h6!VS+k}j0)Jm+}G*5NbE?>tEL;?Q#`rmUIH5$#%>4BHLF zjGwY9Fr67iUGp_MXP0zm;6GzU%J z=mWKTwIrF^vz$whERwtbrFEf)`b{0IrEg7;g!0nJb3wIs>3ZevCW1wjqSB{=g4puU zcBX#c7;~7y_;+X?Cb17fLN_APBc%t#MkZabCrZf~l=QNs$ z$psIHf%@Fr#NaX$J;~JGpGWE~D>;N5!AIX}v5O0*i|K73j-L2EMjO_*rm^brczOk$ zOUN{^r6t%2UKx&stc1v%1F$U2h6BVFLkZzAGMyc|5PS>|ez_-mD$9(>@h@q?)8S9; z*(U3823;%dAlBJjYka;5w~zK95{ohqeI0j&Sq+A>D2i7`O8Fjo);vSq4dZad3(pF& z9GQm7o{!})nLqT5+*gSDAg!CC$SRD(K;qyAjFBWv#KKUJ8H2?rH?ZXkW|_LC%ggY0 z%Ilp+43-B&kABaA4K>utReOF%OV(*#`zOkkrZb^bMnj zj}+wUFQD#YiDXQtb&QogF=*&(&Pz!mflpIaBl=6gkG@raiB!*z$TtX>BofjG7M5fY zRlgijR@dv1#kRvte71crJF9p2{jpp4R&v&P?!8Z+BQ<$>x7mCvP6MIq`0+0SGeCK} z%2D>0sI3-J`_3e7@J&o5AG29!oP522S%wP4h8bqdDhlY^wb_Umn!7 z`uf^FR-mmJ0fMkEU)DJByVv4so(N2!@Z5&iBRJ7o3I=2{qgw^msIiBP74OJ4hec$m z2i$S2S1jxQsN@uJf^K`F3Ulm5QVpmle{nNv1Id3Jh5oa#5HO*Zh;NJ8IegNS7PZ zam+^jO^aLqJy_w+??KS)X4*gLq9#&gZ=z$q`mCCUwD}|v-^tm6)%_=3jhP7TxJRcD z*G{-YL5qYI<%r_~o5=|lXNXn0Y))%fMdD>0GJ8NZP4F^lrIF{JM$Y)1*o)?~jbU(e zMOV?^y^A^@)A=@yP5E>-3A%9kAdBMn8boYr{LL@lE=5H}JyAH}tvN>|cYU8*>EAVH{?gCRb79`~pGZ2waOFw@b5Ga$``XS=ZtesW{*!p z);9Ngc4FA)lH?MdT61OL-bft3rX~JSm)D+a?@xM-f;uG;o6ut=Ln(V;H4P93qxN)B_LG9DS-OSrM2&yHhvMIu)GBF%Yx_R@k8ANRI%U0#K|KV z7Xa#l+6~iLtM5C8Z{QE%<>{eSJmmQ|j?5xNOkCQKD}S0a(pyXf5eA|)>vJ@xl@S;T zwtv&C*PKoE7hs^G>nsm?%ZV^q?gx%>;nVM#mf30s2&ilnlG(_xAp0!s!LtbTV!<1a(Xc(2L`6@nPCh+3g3vqQY|JSdOz|3{-#8fuI)+ za0X(5QCq$2yX+9CWN%%(O};tl;Ti*QQ1~ON>{Y~57QN42@4fNY^#&h3x4>MC=_~AU z9x>iS{;wb&<6ga{Cmc+_eZv)TJZdm)7rD+9UbZy>N6&;<5C!Cth>99*9N$0aa^!DG z#DS^3X23$3U~_OyS96o=UZ6l@DLH}rMxOUrEVu3R#fqH?+<`dEnVl+Qo%MSi)7+cj zJj9LX*~G)-a^;|j`t6zM{$;YBxajSp-Wyx9p40a`%PQP?6aKqZ!71-O#G#ff) zJGJzNR0n$nxK&s-iPcR4Qe*6kkMPS+@RgCwIPb&tYh`Y0&TpC5satAQB|d-%LS(CK zj&efP!7D>a$+0Bb`)gTh|DSV()1H zPnuHHS$nG21Z3e$0DV{vHpAoBC<9g#1OWq|5#=v>|v(EuVfJcbFc0Y{>aX;}DZv{QY~pxL?U-7W@~2=cRWIz=TxGkaWGApHw?`btg7o3Nu4 z-)U<|pL_Rc5r`?+%NmGz@dx`5m0PM5D1%EtPGfh8bvpi3_GkXKWG;HamMQCBVdBGV zH?)l&Qb6-U#%`nNR)hmLMyOyozbh=Q{w>2ywgc7V;jrX_!eU4XvZ9wij4M;&ZL&LA z7N2nOc&GA=lq*8dI?zvT#Z^&@-Sv#Wh4{gh*NTwgU$ZXa7I^+h&EN+(p>(<%w9T@b zTOBx2@UG=pjvTsg@YJmzTIr%)*_9Jd6|#~Vy@fYG&_{*WHohIZzQ0v7cC*%g4`kZW z=xlmjNK(P%$sxnT*a$Uq;2}ZM)SxGpaKlPdgYcqyHRN`Z^;Go*gc=fdHqTOkn% zf4w^?3DSQu1DIzqt4cfq=w?JSSK`4L&i0|etp83XrLpgX*E@j5$HN-X-*#M1_R>>^ zRSO9;z;crTcqbte$TgoXI{z&>|Jm;e9Vg+#45TU92K6A9%^8-gU3pGYl-<6G&fu2` za{aet*?4cZ`TC)^)?om6VGarDCS`*~EEKxAqaEv9tdm}bkZp%+hEgWnu|)3i#dX8a zBBZVAv~p#`!u3bGe%QG3lf0w&ULsr+Y=Q$6ovFRM+%;n#*;k~#g7`wmHqjJGk)-O7 z(=&q3-clOi*H*apsMxLqMjalYQj1CH)ctI4!o`{6GlLY9Jh~53{Keji-j^7EwQ`j^_hd@;0R`s%BuxoyTE zy6M_Xfe70NLl{9DigqhIWEZ2Io+O)aODxh4(QVdBs+O0t$T&(c{a91~TSKMAsF*LT zq&78^Y7dvjGKsl46)?nqksbeCa~%2{m`qVB$Vepc-jdC4y3zHCB!haFTHMbqz90^- z3Ybw3(dSu)aDd)7@kD6d=hx`)>;09|w$&Gy_f=)cJh=XrJ%zf!3lKTsGi37 zE(!H$hsmi;PEawTqF?K*^enO@gV-r)B>Ywh-KKs7dsqo?5h4-0wAN=51|XTKVjHV+MbXZH=!O+$%U;hjw=X zb?qlZj8Z#|x<$!#MgTOmG`z^vElUJ~`C7+Qh7=`c=9@MhlIdD5=LL3Qk z7pnXnWAsjDykuw}HadHX%`=YTCNE_~^5~9LD+UW~zsgA?;ACU~X-#nvia%bZHWje? zV6@n-W*T#8Ko2tZ_kq*oyw!Sa`C$sCJCCtLaE)e+wMyJEvRPV-Vm^J1RPJW}RY<tA)dv20&SvmOBDxySXW~%hNump?707Q1t@#5G42;wm z-+TcQoyoa1Aa*5j!6wen#;V$;keDy-vyY5t)Lu=9a!Rfe3P6!q?=yRgOahPukvVV` z6~5mL1c*;PpO4veGd7aU_lR?ac{*bPJte!fizoL@0hXH(@kcn{WGa0LR|wzcBFGNplUx zy0fmP4O{ix@Z+(V_koHWbv`)JaB#>86Ow$8C3MW&V*%|_Pl8jTJRqjVeUT@L2m@_Fg+t+IlRxBOwxYbLI&5fM*wja*+E(DK^zRcf6 zlDDjR^qIqJNes;q;>IlZq^|83LiQbRtuXk+F`-ND_zd65>Wk-6nn>?Afb`LfRsA1} z9oq%n;8P9nqOv;c<9{7#_m^ml(b=<0@(vD^P0;<~Y6keVq{@VZsPSNl;s(X_SNEF_ zNHSg;<2@Y$w?wDdyAV|DPios8iwWqyUE|{8t$DGl(9A`1$~AZb~1I9Q$TpV9xjij^JU z(kK2?F^m6=iYfl@QZMWOnR?;;|EFFI%$%P8htzBFzf!NC|26gcns{G-|6fwCh@YeX z_tYyE4!8UG5cvNs_2M&Te@0-z`Vqi)n$bibZ&X=}$<$z!4Ao`9d9xj}JYPeP!{gBG z%u3x6XehPbQojmxZgbe4*Xob7T_WwQoWrb@x)IHrZwl4YEpN2MNAj4DG644JNWC>bhRFN-9@v725f3 z2(c1e@(PyhCT1;z3!C3)mWNhK_0(YVwoxstq`pX%Cw*XRs}CDjL+e105#0% zoKhVz06C>G(|5UOVlkg|UVARI8iJv&599q4PmCGqpbuiB>K`6PvvaQ-@6bu3U zX9^|4Xg~U<4Yva7dM(?gLv^DPRduTQB2%^KEx3KQ_9(l3qkhKnaN9;+jgQsO2p(b8 z4j>DxNpxylFz<(-d-N56z3?u`oR7i?cX;+*=rVwcd#d*?QhKRAhBFT)dlCojnR=91 zG-ua(S<`uz;fB}Ya@iptZzn)w7Zz}~BU^v$TC+f*m8v;VHO|Vg@pnD8fU9}C5z(iY zJtZF-YS!9+rw+^Hl3-H1N||YjZN8<~9`F{c=vvd&Z(lYk^+oF~RwmpR@ZbC**{i)Y z_N+S7`fOU$E%A;jPyx+{wMv=})vu-d^&UPBX8`R=V))@sOBNZfr&zphw;{%|9fWC` z)-1vw?ZAArIO}uaWwfRVE`#J*yMA@#ZO-+r`aVA7!28^z)TPaI{{bMjtUN}Xi znnqt0nJtF_g%(S?{+JL;iy|bge+>5bQ}V0EZKa*M+fwqec*#pkbVkB~ck$v2v(%=B zS<{7IK92y~aDSqn?b0~-m<$*La8(h=Ao+Nax0)do3E9CMRvWxu)uu{T@o|Giax6Cb zY6x?d_z#Yvp4KtE!aNp_D+z#=6b38?S`gAtv^Z^$ou(!d5RNwrO*|?CED8i(|6~7s zG(V&SGT_0{9YJ8F!^6w30Mw$`00mF@B-uC(z$wdu%Ib)Sd7e!^>v`nS1*;|j|nuJDmjfOK+sm!Jjk$3Ewu!kE*=q5q^_ z!q^l4x6})dY8sgp!Gag~cg=L(G>`GGgy*%72y_P!T>7p#Z3*)qw4!^C@|bY)KA)C~ zEub3&7J0&Q38S6nnWOe?It^7=w4PySsF%{NQxAwWxOJZTR-)i&%Kx4aF{ zCxtP(wzavzw463PyT1EkaBr3=hAf~^BXbX{E^#NWNl66ekCVDE-LL%n3DJn7IQ1Pck%Ab=X zk9o@?9<0<6{GR#so#v})@ymekHSoaVye05@DZM|nL2ht*F7jC*$P2z#+p9`)*WKQ= zPut`-ZG9GfO}7g0iAdVG^P=@t#8^dcW4N>Sczz%kR7f(h63mO@ZniKB* zOG+byhtmm$2jUK<2B)Wie$|)R40il=PY&Xc74Lv*sekU0E1B9WH_D3_3CLNMZ=CAd z^1e?2;1pl=&sOX>$z{PXk7VqZNw+LnOw^ZrU#Dk{$Pu3QPcP~^d_N(DkCAZ$lTY#c zxSFfh5lV08@z~!1lB0`Tn%8LklXalnq+BQ&OQmm|ixdGVW_{>z$)5C$Wh*tN?o&1( zr4hBUj*9#DC}BD^O-IgRJba*i?OV*|7~H$U85gVp9hyZunkiIIQDTgyO4wS;ds3l3 z%+yD=mK!u(Ggf23*h#d~ZJHAMB&QfsRfGn;Z(2iy7vV$CP_VI@3QIdKshKzYh1Hdd zfySVlIZBdERhd^(1DA2*V>Kik^u^yD$8GcX6ZxYtI;=Qo5yj_~VV3KeBVJj~`LXNa z;0aYtJb<)BX-sF%L)cZAV9CLj`X7y#L6>Sm7PKj@LKK@Oty9oMR9to>P%bPX77D5q z>~$xQD*kltS98RNq-m_)I-&qjN|!^v=yN2Zlw}bb?Q}sg<#$-K5D}A1b-6jLQe`A0 z)EF7a6*nqWg&_7s-j0WK8iYPjB$MV#Yt@8W)rmBBPfsDA#UnU^sQo*QdFWywWd{*D zZ>go^^Vb@5p+Z0mS&~d4hgK*=2o!fSTa@byM>}d4ndq(*?OfF)Vl!>ro{mg}PZxzC ziZ~Dv*_+^n(Wqmnt&kM1ojYhkA4MJ(Z|KAd1xITW5xLceSs)9mheazJ4~CwraEmLq zOsf-Z7*;XEHiR#zPrVdgHA|YnS*kh$BjEjOyWamLUf99+CjS)78(}bw94YriKx`Om z*~BC8%@GIrls59ub)T^e(kG63lnJmQYLjgzA&`up&fvD~2CGf7(RIEWq6pj_JW`qB z$$(BVRY}c&nX{{FGf;3R2S->KPWXTLOZQ}597#$kA^|u`I^6{-p0f_aymFdbK%J&K zImS#-cqaUv_)=b(b}iL#&mIr$WZB^)F{#FaiP68=>aogdM+p0OU&}TqDe-;KWIqM` z(5j_MhQVQ`4+=yDy-l`dMD~ENsxcLQxM81sXuxVZl|~~~uYpGeE(`3sc+fzTMU!Qt z`E%Sxg+n$_tBxDgh}fa?S@D@*Zt{ifmOk9KQ9#r>gkJHLe9q>_(eZ0pF2@dk_xt4J z^$C6`kRIZAFM>4r=dc>o(j6JI=0sKOEo5aHIfGAOcwQ6}t2A=`AAcc)_`x3C|Jzj# zB5c45c;TmUg6=jG$tkU+q60ysvCdw{_U^bJJ=_%66pDbZBxUOPA|(veeJn(qG?+Zb zQ$!r9V#}TRvRIB4bB~C;UgM>Djxp+<8mD?R^DGDG5^Q$IfWKjcVyl~mcCNW!HeSK! z9&LYpUp0FF5PJSRM!e3|fgl>To%djhKlXNzs8v%=SUE>~aCOhrl=)p(^EJQx3L%Nx z6ti3F`E6G61M6x{Up7Qy&w#D#yvDSnPp*PH5WqCZr{{2S^0D}B9eN+!PkS494rqCRXY}KCk^7!50zxAI8aM+t z`EfJbb|=OtB!8cdI^o%fQ`z{vDxB@0=L?j|AqM-ugqV7RlQ^#-*-F?a5IXW!{jk13 zX8M>=0GlrCWg7Q|rT26fD~2bEWFslaJq(MVyXdYHBgBUV2S!5_*9bQMm89(DbM?n_0}v2bg}XJ)QrWRp$5mbDh=hkdMMlDI_+TjzB^g$6SD@ zQ{su-8Ku)Lc=)f0QfyQ_S3bIu>{_y8ChpKBHlvEeo^L;DhExQ2VxfP8fEFQttHa5 zRih73a>QR^$kLqZ7$Rt117r@CUTi1H@PPiSQb&|cCd-u1ThQ_(3`lHRI=rjp5`~kf zJAj_$l#C`+R7W#YzETsbMlncRE@?spw|+zL)?0-p+;OlC5zDW=zFPGMoCRz`26V{s_3&LchdB!udpp~jb{42H-OJs}Vv zXnsa@O(I9#K+E`VBS%qF$6wOt4D>t~gW*Pj3lHuDehOFNoZpa^D7L6M8Acj@3aZzy zIs$gh^X5;H!f08aEdRR@`=u zCa4b^d|c~pZeV%H%cI|b)d=Qjp{_o=2V!dPwbp@6u)=&WxYRXGxt&QKwyNkU(EK9p zNvqAixg472Ak8K$VIce%7I>_I^(_8CPCvRYk>RpQCr)0P+>hQ}8$0U`v3qBb_H}+q zLR>Y;`mlQ2zNBL~;;!##zM8&=%(D4-zF#<;wABL&ww=SFciHf2CD1wKA3-BN_pSZm z>)DRW%<}+@D1&XEvK>12i-X_7 z_t~^i%O^-vXeZEy(4Ut`o55#H7s7?U)5Ns9Ti3Wc(D9h2y`mM3s~ZkJfAS+m5fpbl z1XKKyu=<6KZJ|sqkGT6MR)CCRo~N_;(BfghLExBOL(! z0)xO-1bO>*coNO^lV{rdwVIR-LF222HL7bD3DeQA;Z#a6F%lijGZ9|UYzRYSeCW-=P2twkxWl)nISGp?s3%7GXrv6q%Sr; z^H0a1ykGSSht}W@l=LJSePDwdympj+DG|!ma<$adFooac>2kTQ$xZ`-t2hAR0_rcX zH$_1GrNj{T`8e+mY&-1d6-2(z_^`197vB|HmCBidNkiuwkhlMbfP=%i(GZxUH`Hgd z{Qe?pZ@w6LN&UwGCFFD{*5eXKMe|**KlRtDj8*0n21bGF(D9iQp#B=)<*mt3ndq`l zn2ce7-y(_Dd|Z_u>#K^5{Y*GRfKljbwq)v5zhIxJFl}v_>Gt#OwPZX>rin`^b@P(_ zlO%hfg;>9R6=*CB2D{9lGf{jGKgwD&o_fHERW7I;)=$uBZ1h!;yQ96dG?Pr2XZyLZ zL0;gDUu`$T_a*R^0@_n3Y9>K*f)IV&W+7$!SJjV7iIk0q{^PZ@$tl6?#BD5dFmq+d z3c)&I^eu;=Vj^ldJm>K}=5dgjjyNm3pN8r*xtui?hL_ApCx;&D4RK8CQ9>=60*FjK zji#RaCN(C#W_e$1Uv7^8%y1tl2?s=_B2%~E$d<=~FbyOQmbcxgv2ahZ0 zCGLGi7i~`HL&I(x*OQD1!1>(V<(x!AD%5jz3fe&39iXH)nKVAWs8F<`ETJAQWf2YtXNYRh021 zTW}<0oxx<1Xh?Bvfm{gTTS5X@Aa;!4t?&yES|50ngyj1ePDH6c16ioZJ?xsbzp|FW z*Q9EPX^(Wu>{w*0yrC=3cGxi30{PXM^7ba!EXruwlv%^^3>Coz`*)e4_pF$9U+Cq* zjup3~ANR8tjWRqNWG7U^{KzyStK^fyaTV7a)!7)s3HH}#n3(}kpdDQ!a(-16vLVIR zH_0wHfHT~P8OP-B+3?Qe9O#ZqGd2_lGo&+fZ}0H6D6OV#PWP-GnRhM3ykx4m>)zxg zvTVb81Gg@AYKKs-MEi`pNogMkY&Ec*3j)bMyD+Usu2vF+6ju5xtD2R}I#>?}_yb%d%9kTp90iKh2=>FDnf-xI~BC=;D_{6Y^lw3x6T&>jWu^{H*YVf9+y z8PlT$6%>b1Z?dWcf{QfcF&zh%wSE=%f_on|V{HHVMdFv_yr`3CrGhO3m>`Si=;4ib zj_+O{+4WtmEVv%tloa`SG{XssdjL}9t8oSyT|I|yeDvx0;|^_Kpii4%h)@@0l#C(m zeR&%B4ORiNu&f;#GP)({26Kcc&h~;@GV|!h&U7y=)#rp1s18HD?G?jXIn9{+9xeNJ zGU`rEdr7<+R_fM9vVL%&@M_{ENUT0vqsD&cHQY(#r*OTb&%|lyPCnIs8cm5B4X|dp zxJk=}fnhYO6E{IxG3^zTY%4N89e4XB88SKntykA{mMZ$ym*3QmrK^DVf5@&iw>L9d z^_54O8Z@`d-wRY|UBW=d@`9o}Bj2ixb|FrP*5PlK=qBos3)`hLxb}lr$H12x@?3Vu zpJrXK?8LEbc*5@uCsS{epj=YCsa@;{_F1-$S?T~``sY925%cnLtOKV*oih!5hQo;C zfz-c0VU6QBEXTkk1r!=$(xMrw=^<%2RTkw4mNSM~y@Tldo^&CdTZeHGFCD9=4n$9( zpvV%?UF;mdp8BkZhlCS@oUZgtq!90WP^Iy9hXrL|PMZ45#{3FzN=x$+ z8qV}PHLZ^FZ#Uuw!O76t4p2*Jyt=4GKH>N2$>8!JN#)IYFbY_k2dQ;vB z2nkXVBRb>!6k&Y5CUQ1>8+Wkv2@4^)oAcvGFNdHF?hTG)2r@VnrA;k~CW{1LYPQep}HKX-~{X$m- zGAFK+-uhd3r)fp}LMm!v@ykJ&Y5;|q3Db5`lk6>iI>_T?Tm-!g6Z{Hne>Le#h>OsBJGjz>*+e?Wl}!z`S=Mw zU?q9Jbd%0rg?O+m6>qpd!V!RVAl>@Qa2N#kKj%A^6 z$m&~2d&^J#6;o)zsIE>@RMMKNq!OU2VcNAXJ?8 z;3V@`nmEmpZJfy1F>LZ(TCdkSGQi*%1Qdn&*g;f35Q&C^e;I{nrOJKegXX~$ii@rP zs!+~pEQ?g(9|4t7Y%cd_4L zzh{cWmEmF);ZF={ZCPsCu=R*F(Lrc++@y2Z|7p z4LDQy3;F#BR=X4!?Y+GcROkuNYXl=mU-Kn{YhtsSgN7J9#+G3x24ZgJpg*cuu_jlB zmcG0d?_S0x8)4B@k-Nk9C;uQQ-Yn{quUtJo7XYTv|O!2KOznp4KEhFAg#m z1Jfi?0wMDq=sz2*rkTOnBS3?-3}~=^?->4LvGALky6RuD>o3{$m+bmWcKs#0{*qmP z$*#X-*I%;hFWL2%?D|V~{Uy8pl3jnvuD@j0U$W~j+4Yy~`b&2GCAy4ItIe41Pr5(g9#bEE=U}5y1V_mSs5hRxD=7zQIq*)xDgffjD3(;NeRG**$oF7kRVVkK+q&dOvdr%y6~(%`Ov0N(nWlFWVm#@B@>E0Pm~AU6;F8t$XW(QgWu?)|2d!+AE(XFOU3Yhe>9rc(67xiPK;?Ey^{wMj{SHc5ce%Ju#C~ z97vAF>6_HuZWwS_^22=6g`?Sbh1{^{M~t`AF9^rGOSU?j+4_2Ew)K#l^NQ&1o<8W^g5;ggnO80A$1HW1JSCd(87|LtK>C0Y9=2YF zxNhZpelNJOZ(xpC58ijJX{F`9F}Y30 z%Ru3YBFvN4XP#GW4&!a3({pvIUd~#OZF7}+O)M&HJ{DeHM_Yf-Wry{tKKQ!5=bV6D zp?;j;ft>I6IEnlweA)W0! z=3#XS?d23?6n)2Py`1Id>wH%W(+P0s~jgsev^zzP;68lSOzKvZgSvG!UuERVsi2L_{$XG+T<2Jo%2yI0MC5m z*E9>UBUlF<-VnpNQuumz;?bR=P@6I8I}B1K`qYG)ZvOrw>9h>=EtUctI*+tz_0d>$ zNQb{<9iWaC1wSfKGtEb7@Iyk73x z8*N+?K)nJ2*foDrpt3P(Dk_Itj3};)%$K?)F|no)%-Zey2b{i*9Lt$37w>-9EtC3Q zs04=u+l;KGHbWB0dFpe7@Ulb2wuT|Tz z*QFxQG^vXV_!?GSY{4%Q{A!gl!{YBPXQf#kFQFdd2)ArEoIiQSrBZYL6k05fdx}y@ zvRZt+8yqkYD<=cdzLh$U5JOg0h@(_%iU!}V&v9<>U1{-xY794%k~dh~`lqTvgH^c` zzxx=6`7bG5k;Z8h^?4KcMGv5 ze=sk2yxPK~($6uooqF6cP#$m*AaNGtz8hVxdUQ_F77pc_d zU(KOeHD^m*vXER>Sh>m1nJsHkzPOwW&0`*%AAtxy!|S5zF33XH##9ktMOUqZBAj^8 zuON=72I!Fkj9y(-+)}?WuimOC>E6{f4LjcUH6|}Yv z2PEEsw;SWsyhFQYq&Ttyf4>i=W((q=oo26L0P49t^ybe%0v{K2p>9JA@SbIMUlpW?J(VO|rO>JrAN z9R3;DSk#jpIm{5pI&cb(H)ZU;tg}J7ecgTgaUvxvW3a5QN#Iu8uFJ5Oex|^wg1GU9#%D^3r24nbf1O}659$)$`>h}g>3Li`!A^Kf9%}mM;#>e6BlZ4TAd0``h@!3juU9Y+Lw%+syQ?RNk>^e6-@Rn7^3@^_?+1 zQXlyc1ZvyNg_zbS*_u4yNFWPrAuPojN&;mpA-Eqq*;J3@z7x1tg-mL2J%`y`U74@<^P<+MbpiAI;CTa4PQ7f=JFH&QHKkQG%97+d7EKnJ zA+~3}>+ICox*KrB^)fsK=6A;RsW6xZhGa zm7S^-+gNtm=Q^FYR}iqN6STM8ZQOj7p7 zWNGTtx!MKGZwf5Xr+;crECM?*R2KWU@XLe}vS46@`I9u5Jj&C&NNq!)7@qH@JD=|! zOZ$iHan4sn-Wi`?*<3Ifd3Wy#6_@}D%&y?=czFSGvyoTxp%_w(u@a#ew5be~D(B&{ zSK0^R18N4H6dNtt1qjjzeu!uIhvJR8m`4|?LD1{Y+_vDmt)98}aYvhuGOKtpTlQix zE(_Zq-&gv{j5%1P{=%p_%s^OZsndSO0_-M1m*5DlW#^sO%U&~~K^=5>i=oCiM6|v7 zPt7$>XA}ecwYEzleFAQ2^HAJx7Qx=WL%t_Tf00MJ$gVPWtHJ<+!%%RK*PYyEMwSQH7Q>X!- z*DSjLUtpdvlq)5Q?vx>hHU)sd1j?8=DoBS{p|orlaED%R#;gzR41ut<_n7Vo-9AOl zNKp%A{D#1)E$7LgudXMw(i_4HNtdzdPQw+MO6M7JRi;02>M)Nn;QQBL#Y2~=xty_z zjY`yUJ0nyJB-%dx8YG%z6!QObJ=lib`OrAID))rdr3E4S!x*Xk(4iuc&*}|0T19F!aIR>SvHhq_VUag*pdhf&zaLBF+* zbha!YD?UJOdY))e*3dh`wO#Xj(mKzerw2Q zUruxLvx!Fz0SA50v5&MAYn;kP-SbhIE(vvafqIdj4Yx>$UJcPcU(;rb2Yx|@*f5gz zQVrr`Eums_!Yb>d{;jt*t+Rca>yC!z(Vzc)T?af?Cmx{tvLdcvTOZl#0O-Di4kmGs z>jeCRnZNEy*mFk;b_Uy-QaX)|1G^hQNgJs9`hXv))Tlt$lkd+!v6(5f_fl+!AjPhUFuMfE635^4YUnUBwf>kM*L!nOzZu`KXE-)ZA7m{5&h?3$TKjc$voU zFPao#aDe=y`>LDf;3t^n7V40+Ea?@(7M>6k9%ShsG8M&g4nMIn4(#i-c#4M_`Mj}4 z_d-D7#vdJFD{h|>IrJQvG!}c85^1nN)azR7{iDWh+wkO3tYLHzgjC=Q9mq*ngd2oEUQir?e4HQ%X5m%v}K-0y<}cEYW~){)uM{g zqIXpvwl>Q0Ivvf;wMWaBF_qO$pQ^k0QAY-#0M6qm_7wuJn7&2M7^a}mFI%Uscv|(8 z?X4`;D-as=R&cul?F1UA8r7-D69#Q+C0zrGZr_*CpiYdCj#$d&uRCCVP5g+2^8syv z4`DX@Y76ZI&X{Netp`@aZ8TJK=o{;n=j7IY_e{-ice6A4<>D2rSMZPTtLC#4W&fwS z3W!pVeZ?91vI@iweE zjXcqmfK4Va0yO{y79O>IG3Y#DIkj!&b#;0Wl*CT&i6G&CR$5IS-PjYs_ zYtiYI>-4IMi}Pbaa@Gn6@v%?RoCV*p^ju(M?A)@g)$82Ba`}A7pcUqx+HdM;+FGhV zLy@F7F8$M}p_Xp<-oie+`eyrT7{}-jnJtCp@4<)J8dp4+_l4+M4(NpG$F3XDOAxkcWJYczE&YCM9VQ95IDjYDD{uz?udIjq}4q*)eE3+cjNN@#Z@ zY=|jH2`A~#)p*6)BtOVS*z1ZHV#s`Q;U2o{-)& zc0rA(ehZjUYGr%=`cn3mYIJWEvio2dV@z@V2NW$lU;|N5zvnVy`^RtF*O0~jt~7R~ zvi%?17Yk_0j>Mq!C>Q=0_&um6VTp!JWoo~sU@k0h93A|+%%-}#B zy){$wx}rx-J!*Wi1%osSqBr zZE|;kdhB*A&Gmir81l`>Wj*C}&MQ&nYH=agKejJ&fbA>oaBJybwl7{M_nVnRpK@~P zh3#KJ7t_weOVeeBX8W6IV-lHq5z-HDT2H)eCarY$E}fJsZZfx>8L74D7MZCp8Ym9H zf{wXBG;hQqbQ(C5Hdg7Eq9GK{Bg0A6+rOr-^oKGR zpsdd1w--wkrVe6En#CPdQW05jevlh}$P8)s2A)>ixM=gOx*z>mc-qCQsZ57M>z1!` zI?s)_+;_?N#7YTpxHL+4!XQI<`X%H65ozRnCvK54`0eJb%i_!;edl+wuUCWRvOH%8 zbD$J4KNkB4R*TiN-e`Gc)0%YG(#s;InZ|b)rX*nkAYi1eG!+V9&)IHckAver8o0Hv zowmFvn6MlD@OCYtJ%>-auS%X@c>1-&c8J6I;o>}bG!5ENNl2gJ(b~362;9XqDW`Qf z?`haiN&0-ZF}Tz54KJU1Q5_H`Cg`OnB@brHO^{s{le3Fsa}dYg8B&c-oGqzX*y@rI zTXYdN85Z>_nwk(JTc#c#HD)t?>$L(?^}rRj_|r6b*uK=ey1WYz3L}K+UvQ4KsL%+i ze5(u#CMbPToh~LAp4~kO>WNHMjwW=jq(OG&&;eEu16L}ZkzSLO zNS<{Z601LpDZC2EB zcQL@TpN7uA)2|2$FMXwUhKp6-O$ED5>7=@$IA1;>jb7vZ@;Ve zO+88VH&@9N3&|$njpsI%rO_%BS>pqKo_Utn?Av|!*FvybFdS_E1gsLYgJpM?D#E)i zkJ-!*f6UO423G~fm`magzY)?c;<%LEo;Je}E&Y(6ellJ8aV_8k1o760+Q2rLqLr_Q zyIQ~llE)A`97W|A2b?XoICk1XxLxT1)L2z-)Y96yuH=II$44KtTHFJvwYm`xSLK|K zBR6!`ERc}|ZI43mSl{mltI}@FEOzBz%9zT zuUEEn?Ogl5sP0b%B`Gz&3jb=5I9wEPZAT+PHii3`^Rty|dGaE$ie@n2+EuazbxjrL z4uJOBzPVrB?B=yQxy7u2)xkB-cvg}&-ErQc09DWMYaGLsAMRMxU67I7u>jfvQ^+m4 z;_#SD=KrS7rk6e~%mqaP{r>Z*6Pt-u)4NTxgDo5j?xe}XMUOd>_g7Ft(QLf9r!vY<(_c~Mi)B;@T;(SC0%|; zs_lwLbGiOj7Megj3czE=oA+Howqe;ekLk&hl|Wssn5u5{jchKs{pkMUqPGMHhJVxU zCV93i5D25@-FIQiC8&*O*jx1 zr_->uJc`NUwh~f4`DL0zdf`h9$3(6upG*?otuw9t_CCx^t8CyelJR!(it~HkV=WTk zu+Q1uMBuSSB>BQ_`nfxZvDdfkGTm=v_y}1I2z%^=Yz0B5z{$oW5?BR68#(+R7;Nc= z%+#N$W-TP;GK@$Wa~Lth!(Cg&;ECcoMzx@Ap(0dHZv>OK&*N!MLc>g#!QQ_!pVUo3 zJ6rf;m^0EcbFb07U>|p?6)K2QpxGRY+6i}c-h9I`f;%(m^3HaZzO2mKf_MN)`UZ>J z9SWp(-#@GN%)2rKj&XufK-f^_Mxvz(Za7B#dfag(;vM#AeKS+AU~$pl%>$bgyqEUG zJ}d$`7>Ib)v!-aK?tYO*$RR%Fu=H0R zJFW0V9{lbbvxAFFmogNqpUZ^QlOkmyV(?bGKmsc{FK-E3G8{QS z5?1QVSLc`qfrfyZAr3n=+qPf@fSGM@*U`D8H1fp9#uy$BHz+by@+%Zj zGjEk9SXHq=l32A!7#Ox|g2fz^>v?>ZJFMo0Sb;D;A>X&drtnD{cw-VLzlJyx8~Z3_ zFd13S=ojGm{?$mj;jz!?9-nuUI3{YoyfA-i($B$!uU+daqG8Ih3;o{pgwFULgB_KY zzY3U;d|Pc~$%o1trh)03(A{~1M{rxTS+2WkizvWB29rva4(J$DxP|?UCR|Kyd(f@1 za5aFX_K0cn_3=j)1ra=01in`c@K338@`!>7oP=(!%#url12>6WtmGjlSq?}+M1dPL zsCNhWK*A9{b!1?H# zu{mWM7=8J}9yGJ%7kKxO{r2qRpI&`DkX$Ie>5=^N!B+hQj>33Msv*CYgt&nHyt3AH zVe3ir#bW~k7SYb0*qnBHLFCWB>@q2g3-sY9M!P11S*oN{|FIi>$txJg%+n5GwoX!K zft)GQZ@egyF@&yvU+ZtVT0=h6V?BwFP8Sk&8EM904BHjFEVCuie%V#3xJ4N79g{}6 zpEc^)z&Jw~W+Q8NxQXpmjJqi)F-L4ray?bVdE60~@Jo5`NoRl4=O*Vpy!rkBbe{>; zOjC+(yPGmt?=K=9*C!$|WkNup5*{j2^J|K-ABR!<1tH4m~K7c8BB=o_+mFdLN0+ zp>LaySnoA9Hk(To`Fn{SSFs(h6<#E=HSDuVo2!jB`8J!Rbl6#^IHM2yU!MnRymmeA z?Cqknjue1;{c35VXlq@*6#BrsYRn!C zq|E&C5aW*fT=_#O8)gG`Zuo!?SiiI$|?H#wb`@; zM)r|D4FA_?&<6U7i*5WnrOeh$F)9aryMKy|(i!4pX+8_{CvdhvgE~<`+oHDejv|Mj)63f5+v11OGR# z2LwbNM6LqpA^-aU1^DmZyq>HCFbLltf)DD?>zus{JqiF^Ul@Sv!vrGzuWJbZ>-pbT znHV_=*%(;ZnmPXIGGT!J^#WiZEFi_C9#oUjbN>0xI{JhE51#-W;`hym0Q{+e00D&p It_K48Uvtb|?f?J) literal 0 HcmV?d00001 diff --git a/docment/字段映射_1694422244889.xlsx b/docment/字段映射_1694422244889.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..521d8f49358e6717a772ca0f392981778907e19c GIT binary patch literal 32308 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 literal 0 HcmV?d00001 diff --git a/docment/阿里差旅推送财务系统_字段梳理_V4.0.xlsx b/docment/阿里差旅推送财务系统_字段梳理_V4.0.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f2e4433b68204de18d9fe8119afc42617f9d1de8 GIT binary patch literal 13014 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 literal 0 HcmV?d00001