<%@ page language="java" contentType="text/html; charset=UTF-8" %> <%@ page import="weaver.general.Util,weaver.conn.RecordSet" %> <%@ page import="weaver.integration.logging.Logger"%> <%@ page import="weaver.integration.logging.LoggerFactory"%> <%@ page import="org.apache.commons.lang3.StringUtils" %> <%@ page import="weaver.interfaces.outter.CheckIpNetWorkForUpcoming" %> <%@ page import="weaver.file.Prop" %> <%@ page import="com.alibaba.fastjson.JSONObject" %> <%@ page import="java.io.*" %> <%@ page import="com.engine.common.biz.EncryptConfigBiz" %> <%@ include file="/systeminfo/init_wev8.jsp" %> <% Logger log = LoggerFactory.getLogger(); RecordSet rs = new RecordSet(); String type = Util.null2String(request.getParameter("type")) ; String workflowId = request.getParameter("workflowid"); String sysId = request.getParameter("sysid"); String forURL ; if(StringUtils.isNotBlank(workflowId)){ //新建异构系统 log.error("workflowid="+workflowId); rs.executeQuery("select * from ofs_workflow where workflowid = ?",workflowId); rs.next(); if ("pc".equalsIgnoreCase(type)){ forURL = rs.getString("pccwurl"); }else{ forURL = rs.getString("APPCWURL"); } if ("".equals(Util.null2String(sysId))){ sysId = rs.getString("SYSID"); } }else{ //访问异构系统流程 String todoDataId = request.getParameter("tododataid"); log.error("todoDataId="+todoDataId); String isRemark = request.getParameter("isremark"); log.error("isRemark="+isRemark); if( "0".equals(isRemark) || "8".equals(isRemark)){ rs.executeQuery("select * from ofs_todo_data where id = ?",todoDataId); rs.next(); if ("pc".equalsIgnoreCase(type)){ forURL = Util.null2String(rs.getString("pcurlsrc")); }else{ forURL = Util.null2String(rs.getString("appurlsrc")); } if ("".equals(Util.null2String(sysId))){ sysId = rs.getString("SYSID"); } }else{ rs.executeQuery("select * from ofs_done_data where id = ?",todoDataId); rs.next(); if ("pc".equalsIgnoreCase(type)){ forURL = Util.null2String(rs.getString("pcurlsrc")); }else{ forURL = Util.null2String(rs.getString("appurlsrc")); } if ("".equals(Util.null2String(sysId))){ sysId = rs.getString("SYSID"); } } } rs.executeQuery("select * from ofs_sysinfo where sysid = ?" , sysId); if(rs.next()){ String prefixURL ; String sysCode = rs.getString("syscode") ; if ("pc".equalsIgnoreCase(type)){ //自动内外网登录 String clientIp = Util.getIpAddr(request); boolean notInOuter = this.notInOuter(sysCode , clientIp); if (notInOuter){ prefixURL = Util.null2String(rs.getString("pcouterfixurl")); }else{ prefixURL = Util.null2String(rs.getString("pcprefixurl")); } }else{ prefixURL = Util.null2String(rs.getString("Appprefixurl")); } String mobile = user.getMobile(); //将加密数据进行解密 mobile = EncryptConfigBiz.getDecryptData(mobile); log.error("获取到的用户手机号码为: "+mobile); String result = this.getToken(mobile , sysCode) ; if ("".equals(Util.null2String(result))){ out.println("返回token为 null 无法跳转"); return; } JSONObject json = JSONObject.parseObject(result) ; if (!"0".equals(Util.null2String(json.getString("errcode")))){ out.println("返回 报文异常:"+result); log.error("返回 报文异常:"+result); return; } String token = Util.null2String(json.getString("etLoginToken")) ; if ("".equals(token)){ out.println("获取token为空 :"+result); log.error("获取token为空 :"+result); return; } String toURL = this.getURL(prefixURL , forURL , token) ; String typeName ; if ("pc".equalsIgnoreCase(type)){ typeName = "PC端" ; }else{ typeName = "APP端" ; } log.error(typeName +"访问异构系统地址:"+toURL); %> <% }else{ log.error("根据标识:"+sysId+"未查询到数据"); return; } %> <%! Logger log = LoggerFactory.getLogger(); //外网地址返回 true ,内网 false private boolean notInOuter(String sysCode , String clientIp){ //0代表不开启,则所有通过内网访问 //1代表开启,并且有设置网段 //2代表开启,但是没有设置网段 RecordSet rs = new RecordSet(); rs.executeQuery("SELECT * FROM autologin_status WHERE syscode= ? " , sysCode) ; if (rs.next()){ String status = Util.null2String(rs.getString("status"),"0"); if ("0".equals(status)){ return false ; }else if ("2".equals(status)){ return true ; } } //检测IP CheckIpNetWorkForUpcoming checkIpNetWorkForUpcoming = new CheckIpNetWorkForUpcoming(); return checkIpNetWorkForUpcoming.checkIpSeg(clientIp);//不在网段策略中 返回true } private String getURL(String prefixURL , String toURL , String token) { StringBuilder url = new StringBuilder(prefixURL) ; url.append("/papi/open/singleSignon?singleToken=") .append(token).append("&oauthType=singlesign&redirect_uri=") ; try{ url.append(java.net.URLEncoder.encode(toURL, "UTF-8")) ; }catch (Exception e){ e.printStackTrace(); } return url.toString() ; } private String getToken(String account , String sysCode){ //TODO 1 调用e9接口获取token OutputStreamWriter oout = null; BufferedReader iin = null; String result = ""; try { String prefixURL = Prop.getPropValue("ofsForEteams" , "url") ; String appKey = Prop.getPropValue("ofsForEteams" , sysCode+"_appKey") ; String security = Prop.getPropValue("ofsForEteams" , sysCode+"_security") ; // 发送请求参数 URL realUrl = new URL(prefixURL + "?app_key="+appKey+"&app_security="+security+"&account="+account); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "application/json"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 oout = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); oout.write(""); // flush输出流的缓冲 oout.flush(); // 定义BufferedReader输入流来读取URL的响应 iin = new BufferedReader( new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; while ((line = iin.readLine()) != null) { result += line; } log.error("result:" + result); } catch (Exception e) { log.error("发送 POST 请求出现异常!", e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally { try { if (oout != null) { oout.close(); } if (iin != null) { iin.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result ; } %>