Index: ssts-web/src/main/webapp/logonSSOForSszxyy.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/logonSSOForSszxyy.jsp (revision 0) +++ ssts-web/src/main/webapp/logonSSOForSszxyy.jsp (revision 34901) @@ -0,0 +1,194 @@ +<%@page import="com.forgon.security.model.User"%> +<%@page import="com.forgon.disinfectsystem.common.CssdUtils"%> +<%@page import="com.forgon.security.service.UserManager"%> +<%@ page contentType="text/html; charset=UTF-8" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@page import="com.forgon.tools.SpringBeanManger"%> +<%@page import="com.forgon.tools.Constants"%> +<%@page import="net.sf.json.JSONObject" %> +<%@page import="java.io.File" %> +<%@page import="java.util.ArrayList" %> +<%@page import="org.apache.commons.lang.StringUtils"%> +<%@page import="com.forgon.directory.model.LoginInfo"%> +<%@page import="com.forgon.disinfectsystem.datasynchronization.dao.sszxyy.HttpClientHelper"%> +<%@ include file="/common/taglibs.jsp" %> + +<% +ArrayList message = new ArrayList(); +String byway_sso_token = request.getParameter("byway_sso_token"); +if(StringUtils.isNotBlank(byway_sso_token)){ + try{ + String userName = HttpClientHelper.authentication(byway_sso_token); + if(userName != null){ + UserManager userManager=(UserManager)SpringBeanManger.getBean("userManager"); + User user = userManager.getFirst("name", userName); + if(user==null){ + message.add("用户不存在"); + }else{ + session.setAttribute("barcode", user.getBarcode()); + } + } + } catch (Exception e) { + e.printStackTrace(); + message.add("登录失败:" + e.getMessage()); + } +} +pageContext.setAttribute("message", message); + +String companyName = CssdUtils.getSystemSetConfigByName("companyName"); +String companyNameStr = ""; +if(companyName == null || companyName.equals("forgon")){ + companyNameStr = "©2021 广州孚峻信息技术有限公司 版权所有"; +}else if(companyName.equals("dingxiang")){ + companyNameStr = "©2021 广州丁香软件有限公司 版权所有"; +} +session.setAttribute("companyName", companyNameStr); +String project = CssdUtils.getConfigProperty("project"); +session.setAttribute("profile", project); + +String imgPath = "disinfectsystem/config/" + project + "/img/logo_" + project +".png"; +File file = new File(application.getRealPath("/") + imgPath); +if(file.exists()){ + request.setAttribute("logoPath",imgPath); +}else{ + if(companyName == null || companyName.equals("forgon")){ + request.setAttribute("logoPath","themes/portalPage/img/logo_Forgon.png"); + }else if(companyName.equals("dingxiang")){ + request.setAttribute("logoPath","themes/portalPage/img/logo_dingxiangsoft.png"); + } +} + +%> + + + + + + + + +消毒供应质量追溯管理系统 +<%-- --%> + + + + + + +
+
+
+ 账号或密码错误!请重新输入! + 验证码错误,请重新输入! + 该用户没有回收清点的权限,请重新输入! + 注册码不正确或试用期已过!请与管理人员联系! + 身份验证接口访问异常,请与系统管理员联系! +
+ + +
+ + + + + + + + + + Index: ssts-web/src/main/webapp/WEB-INF/spring/security-standard/applicationContext-acegi-security.xml =================================================================== diff -u -r34821 -r34901 --- ssts-web/src/main/webapp/WEB-INF/spring/security-standard/applicationContext-acegi-security.xml (.../applicationContext-acegi-security.xml) (revision 34821) +++ ssts-web/src/main/webapp/WEB-INF/spring/security-standard/applicationContext-acegi-security.xml (.../applicationContext-acegi-security.xml) (revision 34901) @@ -51,8 +51,7 @@ - - + Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/sszxyy/DatasyncConstant.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/sszxyy/DatasyncConstant.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/sszxyy/DatasyncConstant.java (revision 34901) @@ -0,0 +1,38 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.sszxyy; + +/** + * 深汕中心医院医院接口相关常量SSZXYY-8 + */ +public class DatasyncConstant { + + /** + * 深汕中心医院单点登录token验证接口地址 + * URL: https://gdbyway-platform-cluster.sschospital.cn/hie/services/hieService/msgTransfer + * POST 方式 + * Content-Type: application/json + * + * 参数示例: + * { + "key":"d1ce37f9-5967-410d-8575-c4075d1543df", + "msgContent":"{\"token\":\"具体的token值\"}", + "msgCode":"queryTokenInfo98Q001J", + "msgVersion":"1", + "responseFormat":"JSON" + } + * + */ + public final static String TOKEN_VALIDATE_URL = "https://gdbyway-platform-cluster.sschospital.cn/hie/services/hieService/msgTransfer"; + + /** + * 业务系统专属key + */ + public final static String SYS_KEY = "421D1E8E-7265-B904-FA7F-486995598E0A"; + + /** + * 根据业务系统专属key获取12小时有效的esb平台密钥的接口地址 + */ + public final static String TOKEN_URL = "http://gdbyway-platform-cluster.sschospital.cn/hie/srvmgr/hieSrvMgr/getToken"; + + + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/sszxyy/HttpClientHelper.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/sszxyy/HttpClientHelper.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/sszxyy/HttpClientHelper.java (revision 34901) @@ -0,0 +1,172 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.sszxyy; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; + +import net.sf.json.JSONObject; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.Node; +import org.dom4j.XPath; + +/** + * 深汕中心医院接口帮助类SSZXYY-8 + */ +public class HttpClientHelper { + + public static Logger logger = Logger.getLogger(HttpClientHelper.class); + + /** + * byway_sso_token验证,验证成功则返回用户工号 + * @param token + * @return + * @throws Exception + */ + public static String authentication(String token) throws Exception { + if(StringUtils.isBlank(token)){ + throw new RuntimeException("参数不能为空!"); + } + + //访问单独登录token前,先获取访问esb平台的密钥 + String tokenKey = HttpClientHelper.getTokenByKey(DatasyncConstant.SYS_KEY); + if(StringUtils.isBlank(tokenKey)){ + throw new RuntimeException("通过KEY获取访问 ESB平台的Token失败!"); + } + + JSONObject requestBody = new JSONObject(); + requestBody.put("key", tokenKey); + JSONObject msgContentJson = new JSONObject(); + msgContentJson.put("token", token); + String msgContent = ""; + requestBody.put("msgContent", msgContent); + requestBody.put("msgCode", "queryTokenInfo98Q001J"); + requestBody.put("msgVersion", "1"); + requestBody.put("responseFormat", "JSON"); + String result = HttpClientHelper.sendPost(DatasyncConstant.TOKEN_VALIDATE_URL, requestBody.toString(), "application/json"); + + /*result = "";*/ + + logger.info("统一身份认证系统接口地址:" + DatasyncConstant.TOKEN_VALIDATE_URL); + logger.info("统一身份认证系统接口返回信息:" + result); + //result = "{\"success\" : true,\"reason\" : \"登录失败\"}"; + if(StringUtils.isBlank(result)){ + return null; + } + + Document document = DocumentHelper.parseText(result); + String xpathExp = "/data"; + String jsonString = processDataByXpath(document, xpathExp); + + if(StringUtils.isBlank(jsonString)){ + logger.info("统一身份认证系统接口返回信息为空!" + jsonString); + return null; + } + + JSONObject jsonObject = JSONObject.fromObject(jsonString); + + JSONObject syncResult = jsonObject.optJSONObject("syncResult"); + + if(syncResult == null){ + String errorInfo = jsonObject.optString("errorInfo"); + throw new RuntimeException("登录失败:" + errorInfo); + } + + boolean success = syncResult.optBoolean("result", false); + if(!success){ + String msg = jsonObject.optString("msg", ""); + throw new RuntimeException("登录失败:" + msg); + } + JSONObject dataJson = syncResult.optJSONObject("data"); + if(dataJson == null){ + return null; + } + + return dataJson.optString("userCode"); + } + + /** + * 根据key获取token + * @param key + * @return + * @throws Exception + */ + public static String getTokenByKey(String key) throws Exception{ + String token = ""; + String msgContent = getXMLMessage(key); + String response = sendPost(DatasyncConstant.TOKEN_URL, msgContent, "application/xml"); + logger.info("token接口返回的信息:" + response); + if(StringUtils.isBlank(response)){ + return ""; + } + Document document = DocumentHelper.parseText(response); + String xpathExp = "/result"; + token = processDataByXpath(document, xpathExp); + return token; + } + + /** + * 生成请求信息 + * @param key + * @return + */ + public static String getXMLMessage(String epKey) { + Document document = DocumentHelper.createDocument(); + Element root = document.addElement("message"); + if(StringUtils.isNotBlank(epKey)){ + Element eKey = root.addElement("epKey"); + eKey.setText(epKey); + } + return root.asXML(); + } + + public static String sendPost(String url, String content, String mediaType) throws Exception { + BufferedReader in = null; + String result = ""; + URL realUrl = new URL(url); + URLConnection conn = realUrl.openConnection(); + //conn.setRequestProperty("Content-Type", "application/xml; charset=utf-8"); + conn.setRequestProperty("Content-Type", mediaType); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.getOutputStream().write(content.getBytes("UTF-8")); + conn.getOutputStream().flush(); + InputStream is = conn.getInputStream(); + in = new BufferedReader(new InputStreamReader(is, "UTF-8")); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + try{is.close();}catch(Exception e){} + try{in.close();}catch(Exception e){} + return result; + } + + /** + * 根据document和Xpath表达式解析数据 + * @param document + * @param nameSpaceURIMap + * @param xpathExp + * @return + */ + public static String processDataByXpath(Document document, String xpathExp) { + if ((StringUtils.isNotBlank(xpathExp)) && (document != null)) { + XPath xpath = document.createXPath(xpathExp); + Node node = xpath.selectSingleNode(document); + if (node != null) { + return node.getStringValue(); + } + } + return null; + } + +}