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"); + } +} + +%> + + + + + + + + +消毒供应质量追溯管理系统 +<%-- --%> + + + + + + +
+
+
+ 账号或密码错误!请重新输入! + 验证码错误,请重新输入! + 该用户没有回收清点的权限,请重新输入! + 注册码不正确或试用期已过!请与管理人员联系! + 身份验证接口访问异常,请与系统管理员联系! +
+ + +
+ + + + + + + + + +