<%@ 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="java.io.IOException" %> <%@ page import="java.io.BufferedReader" %> <%@ page import="java.io.OutputStreamWriter" %> <%@ page import="java.net.URL" %> <%@ page import="java.io.InputStreamReader" %> <%@ page import="java.net.URLConnection" %> <%@ page import="org.apache.commons.lang3.StringUtils" %> <%@ page import="weaver.interfaces.HrmTransferDao" %> <%@ page import="weaver.interfaces.outter.CheckIpNetWorkForUpcoming" %> <%@ include file="/systeminfo/init_wev8.jsp" %> <% Logger log = LoggerFactory.getLogger(); RecordSet rs = new RecordSet(); String workflowId = request.getParameter("workflowid"); String sysId = request.getParameter("sysid"); String isMsg = Util.null2String(request.getParameter("_weaverofsmsg")); int userId = user.getUID() ; String pcurl ; if(StringUtils.isNotBlank(workflowId)){ //新建异构系统 log.error("workflowid="+workflowId); rs.executeQuery("select * from ofs_workflow where workflowid = ?",workflowId); rs.next(); pcurl = rs.getString("pccwurl"); 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(); pcurl = Util.null2String(rs.getString("pcurlsrc")); if ("".equals(Util.null2String(sysId))){ sysId = rs.getString("SYSID"); } }else{ rs.executeQuery("select * from ofs_done_data where id = ?",todoDataId); rs.next(); pcurl = Util.null2String(rs.getString("pcurlsrc")); if ("".equals(Util.null2String(sysId))){ sysId = rs.getString("SYSID"); } } } rs.executeQuery("select * from ofs_sysinfo where sysid = ?" , sysId); if(rs.next()){ //自动内外网登录 String clientIp = Util.getIpAddr(request); boolean notInOuter = this.notInOuter(rs.getString("syscode") , clientIp); String prefixURL ; if (notInOuter){ prefixURL = Util.null2String(rs.getString("pcouterfixurl")); }else{ prefixURL = Util.null2String(rs.getString("pcprefixurl")); } String hrmTransRule = Util.null2String(rs.getString("HRMTRANSRULE"));//人员转换关系 HrmTransferDao hrmTransferDao = new HrmTransferDao(); String loginId = hrmTransferDao.getHrmResourceIdByHrmTransRule(hrmTransRule, Util.null2String(userId)); String token = this.getToken(prefixURL , loginId) ; String toURL = this.getURL(prefixURL , pcurl , token , isMsg) +"&ofsComeFrom=e9"; log.error("pc端访问异构系统地址:"+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 , String isMsg){ StringBuilder url = new StringBuilder() ; if(toURL.startsWith("http://") || toURL.startsWith("https://")){ url.append(toURL); }else{ url.append(prefixURL).append(toURL); } if(url.toString().contains("#")){ StringBuilder ssoToken = new StringBuilder("&ssoToken="); ssoToken.append(token) ; if(!"".equals(isMsg)){ ssoToken.append("&_weaverofsmsg=1") ; } int i = url.toString().indexOf("#") ; url.insert(i, ssoToken) ; }else{ if(toURL.contains("?")){ url.append("&"); }else{ url.append("?"); } url.append("ssoToken=").append(token) ; if(!"".equals(isMsg)){ url.append("&_weaverofsmsg=1") ; } } return url.toString() ; } private String getToken(String prefixURL ,String loginId){ //TODO 1 调用e9接口获取token OutputStreamWriter oout = null; BufferedReader iin = null; String result = ""; try { // 发送请求参数 URL realUrl = new URL(prefixURL + "/ssologin/getToken?appid=fore9&loginid=" + java.net.URLEncoder.encode(loginId, "UTF-8")); // 打开和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 ; } %>