Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/fsfy/SSOAuthenticationDaoImpl.java
===================================================================
diff -u
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/fsfy/SSOAuthenticationDaoImpl.java (revision 0)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/fsfy/SSOAuthenticationDaoImpl.java (revision 33867)
@@ -0,0 +1,96 @@
+package com.forgon.disinfectsystem.datasynchronization.dao.fsfy;
+
+import java.util.Calendar;
+
+import net.sf.json.JSONObject;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+
+import com.forgon.disinfectsystem.common.CssdUtils;
+import com.forgon.tools.crypto.coder.CoderEncryption;
+import com.forgon.tools.date.DateTools;
+import com.forgon.tools.util.ConfigUtils;
+import com.forgon.tools.util.ForgonStringUtils;
+
+public class SSOAuthenticationDaoImpl implements SSOAuthenticationDao {
+
+ private static final Logger logger = Logger.getLogger(SSOAuthenticationDaoImpl.class);
+
+ @Override
+ public String authentication(String token) throws Exception {
+ if(StringUtils.isBlank(token)){
+ throw new RuntimeException("token不能为空!");
+ }
+ String projectName = ConfigUtils.getProjectName();
+ JSONObject requestJSON = buildRequestJson(projectName, token);
+ logger.info("SSO单点登录,根据token获取用户信息的服务,接口地址:" + DatasyncConstant.SSO_TOKEN_VALIDATE_URL);
+ logger.info("SSO单点登录,根据token获取用户信息的服务,请求信息:" + requestJSON);
+ JSONObject result = CssdUtils.sendJSONRequestByHttpPost(DatasyncConstant.SSO_TOKEN_VALIDATE_URL, requestJSON);
+ /*String resultStr = "{\"appId\": \"XDGLOLD\","
+ + "\"appName\": \"消毒供应室-禅城\","
+ + "\"deptCode\": \"10129\","
+ + "\"deptName\": \"病案管理科-信息中心\","
+ + "\"gender\": \"男\","
+ + "\"orgCode\": \"9hospital\","
+ + "\"orgName\": \"组织架构\","
+ + "\"userCode\": \"00016\","
+ + "\"userName\": \"任正远\","
+ + "\"loginTime\": \"2022-04-24 17:15:41\","
+ + "\"lastActiveTime\": \"2022-04-24 17:15:41\","
+ + "\"key\": \"979fea46-a9a0-46b5-a0db-95c88dfbc1c1\","
+ + "\"sign\": \"86D42A5E2131532A32763590C60423EE\","
+ + "\"errCode\": \"0\","
+ + "\"errMsg\": null}";
+ JSONObject result = JSONObject.fromObject(resultStr);*/
+ logger.info("SSO单点登录,根据token获取用户信息的服务,返回结果:" + result);
+ String userCode = "";
+ if(result != null){
+ userCode = result.optString("userCode");
+ }
+ return userCode;
+ }
+
+ /**
+ * 构建请求信息
+ * @param projectName 项目名称:根据项目名称确定APPID
+ * @param token
+ * @return
+ * 请求信息格式如下
+ * {
+ "appId": "XDGLOLD",
+ "token": "382dbc96-f89d-46e5-8e35-da03dbb9fe0a",
+ "timestamp": "2022-04-17 17:19:00",
+ "sign": "33921300A16341375656A1314C759303"
+ }
+ */
+ private JSONObject buildRequestJson(String projectName, String token) {
+
+ String appId = DatasyncConstant.SSO_FSFY_APPID;
+ if(StringUtils.equals(projectName, "fsfy_xcyq")){
+ appId = DatasyncConstant.SSO_FSFY_XCYQ_APPID;
+ }
+ String timestamp = DateTools.formatTime(Calendar.getInstance(), DateTools.COMMON_DATE_HMS);
+ //签名, 算法 MD5 (appId + "-" + timestamp + "-" + token) 计算后转为大写
+ String sign = appId + "-" + timestamp + "-" + token;
+ if (StringUtils.isNotBlank(sign)) {
+ byte[] bytes = sign.getBytes();
+ try {
+ byte[] md5Bytes = CoderEncryption.encryptMD5(bytes);
+ sign = ForgonStringUtils.encodeHexStr(md5Bytes, false);
+ sign = sign.toUpperCase();
+ } catch (Exception e) {
+ throw new RuntimeException("计算签名(sign)MD5出错!" + e.getMessage());
+ }
+ }
+
+ JSONObject result = new JSONObject();
+ result.put("appId", appId);
+ result.put("token", token);
+ result.put("timestamp", timestamp);
+ result.put("sign", sign);
+
+ return result;
+ }
+
+}
Index: ssts-web/src/main/webapp/disinfectsystem/config/fsfy/spring/applicationContext-his-fsfy.xml
===================================================================
diff -u -r28650 -r33867
--- ssts-web/src/main/webapp/disinfectsystem/config/fsfy/spring/applicationContext-his-fsfy.xml (.../applicationContext-his-fsfy.xml) (revision 28650)
+++ ssts-web/src/main/webapp/disinfectsystem/config/fsfy/spring/applicationContext-his-fsfy.xml (.../applicationContext-his-fsfy.xml) (revision 33867)
@@ -53,4 +53,10 @@
+
+
+
+
+
\ No newline at end of file
Index: ssts-web/src/main/webapp/disinfectsystem/config/fsfy_xcyq/spring/applicationContext-his-fsfy.xml
===================================================================
diff -u -r32596 -r33867
--- ssts-web/src/main/webapp/disinfectsystem/config/fsfy_xcyq/spring/applicationContext-his-fsfy.xml (.../applicationContext-his-fsfy.xml) (revision 32596)
+++ ssts-web/src/main/webapp/disinfectsystem/config/fsfy_xcyq/spring/applicationContext-his-fsfy.xml (.../applicationContext-his-fsfy.xml) (revision 33867)
@@ -53,4 +53,10 @@
+
+
+
+
+
\ No newline at end of file
Index: ssts-web/src/main/webapp/WEB-INF/spring/security-standard/applicationContext-acegi-security.xml
===================================================================
diff -u -r33395 -r33867
--- ssts-web/src/main/webapp/WEB-INF/spring/security-standard/applicationContext-acegi-security.xml (.../applicationContext-acegi-security.xml) (revision 33395)
+++ ssts-web/src/main/webapp/WEB-INF/spring/security-standard/applicationContext-acegi-security.xml (.../applicationContext-acegi-security.xml) (revision 33867)
@@ -51,6 +51,7 @@
+
Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/fsfy/DatasyncConstant.java
===================================================================
diff -u -r33030 -r33867
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/fsfy/DatasyncConstant.java (.../DatasyncConstant.java) (revision 33030)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/fsfy/DatasyncConstant.java (.../DatasyncConstant.java) (revision 33867)
@@ -30,6 +30,21 @@
public final static String WebserviceAddress = "http://10.168.150.200/fsfyIntfCommService/baseIntf";
/**
+ * 医院信息中心的应用管理服务接口地址:BS系统获取到Token后调用医院信息中心的应用管理服务获取用户信息(FSFY-82)
+ */
+ public final static String SSO_TOKEN_VALIDATE_URL = "http://10.168.150.200/fsfy-admin/sso/findSSOInfoByToken";
+
+ /**
+ * 消毒供应室-禅城:XDGLOLD
+ */
+ public final static String SSO_FSFY_APPID = "XDGLOLD";
+
+ /**
+ * 消毒供应室-新院:XDGL
+ */
+ public final static String SSO_FSFY_XCYQ_APPID = "XDGL";
+
+ /**
* app代码(即消毒供应系统的id)
*/
public final static String AppId = "CSSD";
Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/fsfy/SSOAuthenticationDao.java
===================================================================
diff -u
--- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/fsfy/SSOAuthenticationDao.java (revision 0)
+++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/fsfy/SSOAuthenticationDao.java (revision 33867)
@@ -0,0 +1,18 @@
+package com.forgon.disinfectsystem.datasynchronization.dao.fsfy;
+
+/**
+ * SSO 单点登录根据 token 获取用户信息的服务
+ * @author ZhouPeiMian
+ * @since 20220530
+ */
+public interface SSOAuthenticationDao {
+
+ /**
+ * 身份验证,验证通过用户账号
+ * @param token SSO 单点登录根据 token 获取用户信息的服务(FSFY-82)
+ * @return
+ * @throws Exception
+ */
+ public String authentication(String token) throws Exception;
+
+}
Index: ssts-web/src/main/webapp/logonSSOForFsfy.jsp
===================================================================
diff -u
--- ssts-web/src/main/webapp/logonSSOForFsfy.jsp (revision 0)
+++ ssts-web/src/main/webapp/logonSSOForFsfy.jsp (revision 33867)
@@ -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.fsfy.SSOAuthenticationDao"%>
+<%@ include file="/common/taglibs.jsp" %>
+
+<%
+ArrayList message = new ArrayList();
+String token = request.getParameter("token");
+if(StringUtils.isNotBlank(token)){
+ try{
+ SSOAuthenticationDao ssoAuthenticationDao = (SSOAuthenticationDao)SpringBeanManger.getBean("ssoAuthenticationDao");
+ String userName = ssoAuthenticationDao.authentication(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) {
+ 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");
+ }
+}
+
+%>
+
+
+
+
+
+
+
+
+消毒供应质量追溯管理系统
+<%-- --%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+