From c1d22e25e0c268cbef8a58cea8e58c81b23177cd Mon Sep 17 00:00:00 2001 From: Administrator Date: Thu, 31 Aug 2023 15:25:44 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{service => base/sso}/BaseOpenApi.java | 2 +- .../base/sso/pojo/ApiDataResponse.java | 14 ++ .../openapi/base/sso/pojo/ThirdUserBo.java | 61 ++++++++ .../openapi/base/sso/sso/SingleSignOn.java | 113 ++++++++++++++ .../openapi/configure/ApiBaseContext.java | 36 ----- .../openapi/event/ISVEventExtendDto.java | 41 ------ .../openapi/event/IsvEventExtendType.java | 80 ---------- .../openapi/event/dept/DeptAddEvent.java | 63 -------- .../openapi/event/dept/DeptDeleteEvent.java | 52 ------- .../openapi/event/dept/DeptDisableEvent.java | 52 ------- .../openapi/event/dept/DeptEnableEvent.java | 52 ------- .../openapi/event/dept/DeptUpdateEvent.java | 52 ------- .../yonyou/openapi/event/org/OrgAddEvent.java | 51 ------- .../openapi/event/org/OrgDeleteEvent.java | 51 ------- .../openapi/event/org/OrgDisableEvent.java | 51 ------- .../openapi/event/org/OrgEnableEvent.java | 51 ------- .../openapi/event/org/OrgUpdateEvent.java | 51 ------- .../openapi/event/staff/StaffAddEvent.java | 52 ------- .../openapi/event/staff/StaffDeleteEvent.java | 52 ------- .../event/staff/StaffDisableEvent.java | 52 ------- .../openapi/event/staff/StaffEnableEvent.java | 52 ------- .../openapi/event/staff/StaffUpdateEvent.java | 52 ------- .../openapi/event/user/UserAddEvent.java | 51 ------- .../openapi/event/user/UserDeleteEvent.java | 51 ------- .../yonyou/openapi/service/OpenApiURL.java | 14 -- .../openapi/service/SSOToYSIndexService.java | 23 +++ .../openapi/service/SSOToYSService.java | 139 ++++++++++++++++++ .../com/yonyou/openapi/service/SSOUrl.java | 66 +++++++++ .../openapi/service/TokenProviderImpl.java | 39 ++--- .../openapi/service/staff/StaffApi.java | 21 --- src/main/resources/application.properties | 13 +- .../yonyou/openapi/sso/SSO_Index_Test.java | 51 +++++++ .../com/yonyou/openapi/sso/SSO_URL_Test.java | 73 +++++++++ .../yonyou/openapi/staff/StaffApiTest.java | 37 ----- 34 files changed, 559 insertions(+), 1152 deletions(-) rename src/main/java/com/yonyou/openapi/{service => base/sso}/BaseOpenApi.java (98%) create mode 100644 src/main/java/com/yonyou/openapi/base/sso/pojo/ApiDataResponse.java create mode 100644 src/main/java/com/yonyou/openapi/base/sso/pojo/ThirdUserBo.java create mode 100644 src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java delete mode 100644 src/main/java/com/yonyou/openapi/configure/ApiBaseContext.java delete mode 100644 src/main/java/com/yonyou/openapi/event/ISVEventExtendDto.java delete mode 100644 src/main/java/com/yonyou/openapi/event/IsvEventExtendType.java delete mode 100644 src/main/java/com/yonyou/openapi/event/dept/DeptAddEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/dept/DeptDeleteEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/dept/DeptDisableEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/dept/DeptEnableEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/dept/DeptUpdateEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/org/OrgAddEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/org/OrgDeleteEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/org/OrgDisableEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/org/OrgEnableEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/org/OrgUpdateEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/staff/StaffAddEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/staff/StaffDeleteEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/staff/StaffDisableEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/staff/StaffEnableEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/staff/StaffUpdateEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/user/UserAddEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/event/user/UserDeleteEvent.java delete mode 100644 src/main/java/com/yonyou/openapi/service/OpenApiURL.java create mode 100644 src/main/java/com/yonyou/openapi/service/SSOToYSIndexService.java create mode 100644 src/main/java/com/yonyou/openapi/service/SSOToYSService.java create mode 100644 src/main/java/com/yonyou/openapi/service/SSOUrl.java delete mode 100644 src/main/java/com/yonyou/openapi/service/staff/StaffApi.java create mode 100644 src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java create mode 100644 src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java delete mode 100644 src/test/java/com/yonyou/openapi/staff/StaffApiTest.java diff --git a/src/main/java/com/yonyou/openapi/service/BaseOpenApi.java b/src/main/java/com/yonyou/openapi/base/sso/BaseOpenApi.java similarity index 98% rename from src/main/java/com/yonyou/openapi/service/BaseOpenApi.java rename to src/main/java/com/yonyou/openapi/base/sso/BaseOpenApi.java index 429dab7..18ff9ce 100644 --- a/src/main/java/com/yonyou/openapi/service/BaseOpenApi.java +++ b/src/main/java/com/yonyou/openapi/base/sso/BaseOpenApi.java @@ -1,4 +1,4 @@ -package com.yonyou.openapi.service; +package com.yonyou.openapi.base.sso; import com.fasterxml.jackson.databind.ObjectMapper; import com.yonyou.openapi.base.auth.TenantAuthProvider; diff --git a/src/main/java/com/yonyou/openapi/base/sso/pojo/ApiDataResponse.java b/src/main/java/com/yonyou/openapi/base/sso/pojo/ApiDataResponse.java new file mode 100644 index 0000000..eb0a356 --- /dev/null +++ b/src/main/java/com/yonyou/openapi/base/sso/pojo/ApiDataResponse.java @@ -0,0 +1,14 @@ +package com.yonyou.openapi.base.sso.pojo; + + +import com.yonyou.openapi.base.response.OpenApiResponse; + +import java.util.Map; + +/** + * @description: 接口响应数据解析 + * @author: nishch + * @create: 2021-02-26 + **/ +public class ApiDataResponse extends OpenApiResponse> { +} diff --git a/src/main/java/com/yonyou/openapi/base/sso/pojo/ThirdUserBo.java b/src/main/java/com/yonyou/openapi/base/sso/pojo/ThirdUserBo.java new file mode 100644 index 0000000..0655071 --- /dev/null +++ b/src/main/java/com/yonyou/openapi/base/sso/pojo/ThirdUserBo.java @@ -0,0 +1,61 @@ +package com.yonyou.openapi.base.sso.pojo; + +import lombok.Data; + +/** + * @description: 第三方用户同用友用户关联实体 + * @author: nishch + * @create: 2021-07-07 + **/ +@Data +public class ThirdUserBo { + + private String thirdUcId; //集成认证应用编码 + private String userId; //第三方用户id + private String mobile; //第三方手机号 + private String email; //第三方邮箱 + private String userName; //第三方用户名 + private String userCode; //第三方用户编码 + //单点到指定节点需要用到------------------------ + private String tenantId; //要登录的租户id + private String serviceCode; //单点节点的serviceCode + private String targetUrl; //目标地址,mUrl或者webUrl + + + public ThirdUserBo() { + + } + + public ThirdUserBo(String thirdUcId, String userId) { + this.thirdUcId = thirdUcId; + this.userId = userId; + } + + public ThirdUserBo(String thirdUcId, String userId, String userName, String userCode) { + this.thirdUcId = thirdUcId; + this.userId = userId; + this.userName = userName; + this.userCode = userCode; + } + + public ThirdUserBo(String thirdUcId, String userId, String userName, String userCode, String mobile, String email) { + this.thirdUcId = thirdUcId; + this.userId = userId; + this.mobile = mobile; + this.email = email; + this.userName = userName; + this.userCode = userCode; + } + + + public ThirdUserBo(String thirdUcId, String userId, String userName, String userCode, String serviceCode, String mobile, String email) { + this.thirdUcId = thirdUcId; + this.userId = userId; + this.mobile = mobile; + this.email = email; + this.userName = userName; + this.userCode = userCode; + this.serviceCode = serviceCode; + } + +} diff --git a/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java b/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java new file mode 100644 index 0000000..a899889 --- /dev/null +++ b/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java @@ -0,0 +1,113 @@ +package com.yonyou.openapi.base.sso.sso; + + +import com.yonyou.openapi.base.sso.BaseOpenApi; +import com.yonyou.openapi.base.sso.pojo.ApiDataResponse; +import com.yonyou.openapi.base.sso.pojo.ThirdUserBo; +import com.yonyou.openapi.base.exception.BusinessException; +import com.yonyou.openapi.base.properties.OpenApiProperties; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + + +/** + * @description: 单点登录 + * @author: nishch + * @create: 2021-07-07 + **/ +@Component +public class SingleSignOn extends BaseOpenApi { + + //获取临时code + private final static String sso_code = "/yonbip/yht/getThirdLoginCode"; + //单点登录拼接地址 + private final static String open_ys_url = "%s/cas/thirdOauth2CodeLogin?thirdUCId=%s&code=%s&service=%s"; + @Resource + public OpenApiProperties properties; + private ThirdUserBo thirdUserBo = new ThirdUserBo(); + + public ThirdUserBo init(String userId){ + thirdUserBo.setUserId(userId); + thirdUserBo.setThirdUcId(properties.getThirdUcId()); + return thirdUserBo; + } + + /** + * 获取登录到控制台的地址 + * @param entity 第三方用户信息 + * @return 最终实现单点的地址 + */ + public String getSSOUrlToIndex(ThirdUserBo entity){ + String code = getCode(entity); + String thirdUCId = entity.getThirdUcId(); + return String.format(open_ys_url,properties.getSsoYhtUrl(),thirdUCId,code,encode(getAccess_tet(),true)); + } + + + /** + * 获取登录到指定页面 + * @param entity 第三方用户信息 + * @param url 要跳转的真实地址 + * @return 最终实现单点的地址 + */ + public String getSSOUrlToUrl(ThirdUserBo entity,String url){ + String code = getCode(entity); + String thirdUCId = entity.getThirdUcId(); + String node = encode(getBaseUrl()+url,false); + String nodeUrl = getAccess_tet()+"?tenantId="+properties.getTenantId()+"&service="+node; + return String.format(open_ys_url,properties.getSsoYhtUrl(),thirdUCId,code,encode(nodeUrl,true)); + } + + /** + * 单点至控制台 + * @return String 目标路径 + */ + private String getAccess_tet() { + return getBaseUrl()+ "/login"; + } + + + /** + * 获取免登code + * @param entity 第三方用户信息 + * @return code + * @throws BusinessException 接口返回异常 + */ + private String getCode(ThirdUserBo entity){ + if(null==entity|| StringUtils.isBlank(entity.getThirdUcId()) || StringUtils.isBlank(entity.getUserId())){ + throw new BusinessException("用户参数不全"); + } + ApiDataResponse apiDataResponse = postForEntity(sso_code,entity, ApiDataResponse.class); + return getData(apiDataResponse).get("code").toString(); + } + + private String encode(String url,boolean isNeedTenantId){ + try { + if(isNeedTenantId){ + if(StringUtils.contains(url,"?")){ + return URLEncoder.encode(url + "&tenantId=" + properties.getTenantId(), StandardCharsets.UTF_8.toString()); + }else { + return URLEncoder.encode(url + "?tenantId=" + properties.getTenantId(), StandardCharsets.UTF_8.toString()); + } + }else { + return URLEncoder.encode(url,StandardCharsets.UTF_8.toString()); + } + }catch (Exception e){ + throw new BusinessException("url转义异常:"+url); + } + } + + /** + * 获取基础域名 + * @return 基础域名 + */ + private String getBaseUrl(){ + String businessUrl = dataCenterUrlProvider.buildBusinessUrl(); + return businessUrl.split("/iuap-api-gateway")[0]; + } + +} diff --git a/src/main/java/com/yonyou/openapi/configure/ApiBaseContext.java b/src/main/java/com/yonyou/openapi/configure/ApiBaseContext.java deleted file mode 100644 index 49edcd7..0000000 --- a/src/main/java/com/yonyou/openapi/configure/ApiBaseContext.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.yonyou.openapi.configure; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; - -@Slf4j -public class ApiBaseContext implements ApplicationContextAware { - - private static ApplicationContext applicationContext; - - @Override - public void setApplicationContext(ApplicationContext context) throws BeansException { - applicationContext = context; - } - - public static T getBeanInstance(Class clazz){ - try{ - return applicationContext.getBean(clazz); - }catch (Exception e){ - log.warn("Bean is not exist for class:{}", clazz); - return null; - } - } - - public static T getBeanInstance(String beanName,Class clazz){ - try{ - return applicationContext.getBean(beanName,clazz); - }catch (Exception e){ - log.warn("Bean is not exist for class:{}", clazz); - return null; - } - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/ISVEventExtendDto.java b/src/main/java/com/yonyou/openapi/event/ISVEventExtendDto.java deleted file mode 100644 index b9f919b..0000000 --- a/src/main/java/com/yonyou/openapi/event/ISVEventExtendDto.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.yonyou.openapi.event; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.yonyou.openapi.base.event.pojo.Event; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * @description: 事件解析实体 - **/ -@EqualsAndHashCode(callSuper = true) -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class ISVEventExtendDto extends Event{ - - private String definitionVariable; - - /** - * 变动的 staff id - **/ - private String[] staffId; - - /** - * 变动的 dept id - **/ - private String[] deptId; - - /** - * 变动的 user id - */ - private String[] userId; - - private String actionKey; - - private Object value; - - private String tenantId; - -} diff --git a/src/main/java/com/yonyou/openapi/event/IsvEventExtendType.java b/src/main/java/com/yonyou/openapi/event/IsvEventExtendType.java deleted file mode 100644 index f00917c..0000000 --- a/src/main/java/com/yonyou/openapi/event/IsvEventExtendType.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.yonyou.openapi.event; - - -import com.yonyou.openapi.base.event.pojo.EventType; - -/** - * @description: 事件类型 - **/ -public class IsvEventExtendType extends EventType { - - /** - * 用户增加 - */ - public static final String USER_ADD = "USER_ADD"; - /** - * 用户删除(移除) - */ - public static final String USER_DELETE = "USER_DELETE"; - /** - * 组织新增 - */ - public static final String BASE_ORG_EVENT_ADD_AFTER = "BASE_ORG_EVENT_ADD_AFTER"; - /** - * 组织更新 - */ - public static final String BASE_ORG_EVENT_UPDATE_AFTE = "BASE_ORG_EVENT_UPDATE_AFTE"; - /** - * 组织启用 - */ - public static final String BASE_ORG_EVENT_ENABLE_AFTE = "BASE_ORG_EVENT_ENABLE_AFTE"; - /** - * 组织停用 - */ - public static final String BASE_ORG_EVENT_DISABLE_AFTE = "BASE_ORG_EVENT_DISABLE_AFTE"; - /** - * 组织删除 - */ - public static final String BASE_ORG_EVENT_DELETE_AFTER = "BASE_ORG_EVENT_DELETE_AFTER"; - /** - * 部门启用 - */ - public static final String DEPT_ENABLE = "DEPT_ENABLE"; - /** - * 部门新增 - */ - public static final String DEPT_ADD = "DEPT_ADD"; - /** - * 部门删除 - */ - public static final String DEPT_DELETE = "DEPT_DELETE"; - /** - * 部门修改 - */ - public static final String DEPT_UPDATE = "DEPT_UPDATE"; - /** - * 部门停用 - */ - public static final String DEPT_DISABLE = "DEPT_DISABLE"; - /** - * 员工启用 - */ - public static final String STAFF_ENABLE = "STAFF_ENABLE"; - /** - * 员工新增 - */ - public static final String STAFF_ADD = "STAFF_ADD"; - /** - * 员工删除 - */ - public static final String STAFF_DELETE = "STAFF_DELETE"; - /** - * 员工修改 - */ - public static final String STAFF_UPDATE = "STAFF_UPDATE"; - /** - * 员工停用 - */ - public static final String STAFF_DISABLE = "STAFF_DISABLE"; - -} diff --git a/src/main/java/com/yonyou/openapi/event/dept/DeptAddEvent.java b/src/main/java/com/yonyou/openapi/event/dept/DeptAddEvent.java deleted file mode 100644 index 86a7eb4..0000000 --- a/src/main/java/com/yonyou/openapi/event/dept/DeptAddEvent.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.yonyou.openapi.event.dept; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 部门新增事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class DeptAddEvent implements EventListener { - - - /** - * 在这里写待办的处理逻辑,如果返回true则继续执行下一个相同编码的事件,返回false不继续执行。 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] deptId = event.getDeptId(); - Long timestamp = event.getTimestamp(); - return true; - } - - /** - * 如果存在相同事件编码的处理逻辑,此处用于执行排序 - */ - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - /** - * 返回事件编码 - * @return Set - */ - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.DEPT_ADD); - } - - /** - * 返回接收实体对象 - * @return Class - */ - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/dept/DeptDeleteEvent.java b/src/main/java/com/yonyou/openapi/event/dept/DeptDeleteEvent.java deleted file mode 100644 index 5e3330f..0000000 --- a/src/main/java/com/yonyou/openapi/event/dept/DeptDeleteEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.yonyou.openapi.event.dept; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 部门删除事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class DeptDeleteEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] deptId = event.getDeptId(); - Long timestamp = event.getTimestamp(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.DEPT_DELETE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/dept/DeptDisableEvent.java b/src/main/java/com/yonyou/openapi/event/dept/DeptDisableEvent.java deleted file mode 100644 index 8fbaacb..0000000 --- a/src/main/java/com/yonyou/openapi/event/dept/DeptDisableEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.yonyou.openapi.event.dept; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 部门停用事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class DeptDisableEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] deptId = event.getDeptId(); - Long timestamp = event.getTimestamp(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.DEPT_DISABLE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/dept/DeptEnableEvent.java b/src/main/java/com/yonyou/openapi/event/dept/DeptEnableEvent.java deleted file mode 100644 index 15c115d..0000000 --- a/src/main/java/com/yonyou/openapi/event/dept/DeptEnableEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.yonyou.openapi.event.dept; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 部门启用事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class DeptEnableEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] deptId = event.getDeptId(); - Long timestamp = event.getTimestamp(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.DEPT_ENABLE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/dept/DeptUpdateEvent.java b/src/main/java/com/yonyou/openapi/event/dept/DeptUpdateEvent.java deleted file mode 100644 index 994d287..0000000 --- a/src/main/java/com/yonyou/openapi/event/dept/DeptUpdateEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.yonyou.openapi.event.dept; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 员工更新事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class DeptUpdateEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] deptId = event.getDeptId(); - Long timestamp = event.getTimestamp(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.STAFF_UPDATE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/org/OrgAddEvent.java b/src/main/java/com/yonyou/openapi/event/org/OrgAddEvent.java deleted file mode 100644 index 5634675..0000000 --- a/src/main/java/com/yonyou/openapi/event/org/OrgAddEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.yonyou.openapi.event.org; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 组织新增事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class OrgAddEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String content = event.getContent(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.BASE_ORG_EVENT_ADD_AFTER); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/org/OrgDeleteEvent.java b/src/main/java/com/yonyou/openapi/event/org/OrgDeleteEvent.java deleted file mode 100644 index 2e9f441..0000000 --- a/src/main/java/com/yonyou/openapi/event/org/OrgDeleteEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.yonyou.openapi.event.org; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 组织删除事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class OrgDeleteEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String content = event.getContent(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.BASE_ORG_EVENT_DELETE_AFTER); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/org/OrgDisableEvent.java b/src/main/java/com/yonyou/openapi/event/org/OrgDisableEvent.java deleted file mode 100644 index 1e6dcd4..0000000 --- a/src/main/java/com/yonyou/openapi/event/org/OrgDisableEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.yonyou.openapi.event.org; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 组织停用事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class OrgDisableEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String content = event.getContent(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.BASE_ORG_EVENT_DISABLE_AFTE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/org/OrgEnableEvent.java b/src/main/java/com/yonyou/openapi/event/org/OrgEnableEvent.java deleted file mode 100644 index 1af7805..0000000 --- a/src/main/java/com/yonyou/openapi/event/org/OrgEnableEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.yonyou.openapi.event.org; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 组织启用事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class OrgEnableEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String content = event.getContent(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.BASE_ORG_EVENT_ENABLE_AFTE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/org/OrgUpdateEvent.java b/src/main/java/com/yonyou/openapi/event/org/OrgUpdateEvent.java deleted file mode 100644 index 535d110..0000000 --- a/src/main/java/com/yonyou/openapi/event/org/OrgUpdateEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.yonyou.openapi.event.org; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 组织更新事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class OrgUpdateEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String content = event.getContent(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.BASE_ORG_EVENT_UPDATE_AFTE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/staff/StaffAddEvent.java b/src/main/java/com/yonyou/openapi/event/staff/StaffAddEvent.java deleted file mode 100644 index 503798e..0000000 --- a/src/main/java/com/yonyou/openapi/event/staff/StaffAddEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.yonyou.openapi.event.staff; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 员工新增事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class StaffAddEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] staffId = event.getStaffId(); - Long timestamp = event.getTimestamp(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.STAFF_ADD); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/staff/StaffDeleteEvent.java b/src/main/java/com/yonyou/openapi/event/staff/StaffDeleteEvent.java deleted file mode 100644 index d4ddcb5..0000000 --- a/src/main/java/com/yonyou/openapi/event/staff/StaffDeleteEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.yonyou.openapi.event.staff; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 员工删除事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class StaffDeleteEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] staffId = event.getStaffId(); - Long timestamp = event.getTimestamp(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.STAFF_DELETE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/staff/StaffDisableEvent.java b/src/main/java/com/yonyou/openapi/event/staff/StaffDisableEvent.java deleted file mode 100644 index 136442d..0000000 --- a/src/main/java/com/yonyou/openapi/event/staff/StaffDisableEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.yonyou.openapi.event.staff; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 员工停用事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class StaffDisableEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] staffId = event.getStaffId(); - Long timestamp = event.getTimestamp(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.STAFF_DISABLE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/staff/StaffEnableEvent.java b/src/main/java/com/yonyou/openapi/event/staff/StaffEnableEvent.java deleted file mode 100644 index 4d82e84..0000000 --- a/src/main/java/com/yonyou/openapi/event/staff/StaffEnableEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.yonyou.openapi.event.staff; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 员工启用事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class StaffEnableEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] staffId = event.getStaffId(); - Long timestamp = event.getTimestamp(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.STAFF_ENABLE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/staff/StaffUpdateEvent.java b/src/main/java/com/yonyou/openapi/event/staff/StaffUpdateEvent.java deleted file mode 100644 index fa9a7aa..0000000 --- a/src/main/java/com/yonyou/openapi/event/staff/StaffUpdateEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.yonyou.openapi.event.staff; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 部门更新事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class StaffUpdateEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] staffId = event.getStaffId(); - Long timestamp = event.getTimestamp(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.DEPT_UPDATE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/user/UserAddEvent.java b/src/main/java/com/yonyou/openapi/event/user/UserAddEvent.java deleted file mode 100644 index 31229a1..0000000 --- a/src/main/java/com/yonyou/openapi/event/user/UserAddEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.yonyou.openapi.event.user; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 用户新增事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class UserAddEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] userId = event.getUserId(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.USER_ADD); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/event/user/UserDeleteEvent.java b/src/main/java/com/yonyou/openapi/event/user/UserDeleteEvent.java deleted file mode 100644 index b672612..0000000 --- a/src/main/java/com/yonyou/openapi/event/user/UserDeleteEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.yonyou.openapi.event.user; - -import com.google.common.collect.Sets; -import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; -import com.yonyou.openapi.base.event.EventListener; -import com.yonyou.openapi.event.ISVEventExtendDto; -import com.yonyou.openapi.event.IsvEventExtendType; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Set; - -/** - * @description: 用户删除事件监听 - **/ -@Slf4j -@Component -@RequiredArgsConstructor -public class UserDeleteEvent implements EventListener { - - - /** - * 可以在这个里面写具体的业务逻辑 - * @param type 事项类型 - * @param event 解析后对象 - * @param holder 响应消息体 - * @return boolean - */ - @Override - public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder) { - String[] userId = event.getUserId(); - return true; - } - - @Override - public int priority() { - return EventListener.super.priority()-100; - } - - @Override - public Set supportTypes() { - return Sets.newHashSet(IsvEventExtendType.USER_DELETE); - } - - @Override - public Class getEventClass() { - return ISVEventExtendDto.class; - } - -} diff --git a/src/main/java/com/yonyou/openapi/service/OpenApiURL.java b/src/main/java/com/yonyou/openapi/service/OpenApiURL.java deleted file mode 100644 index 55f86a1..0000000 --- a/src/main/java/com/yonyou/openapi/service/OpenApiURL.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.yonyou.openapi.service; - -/** - * @description: URL地址 - **/ -public class OpenApiURL { - - - /** - * 员工列表查询 - */ - public final static String STAFF_LIST = "/yonbip/digitalModel/staff/list"; - -} diff --git a/src/main/java/com/yonyou/openapi/service/SSOToYSIndexService.java b/src/main/java/com/yonyou/openapi/service/SSOToYSIndexService.java new file mode 100644 index 0000000..86e3ba5 --- /dev/null +++ b/src/main/java/com/yonyou/openapi/service/SSOToYSIndexService.java @@ -0,0 +1,23 @@ +package com.yonyou.openapi.service; + +import com.yonyou.openapi.base.sso.sso.SingleSignOn; +import org.springframework.stereotype.Component; + +/** + * @author nishch + * @description: 单点登录至YS首页 + * @date 2023/7/26 + */ +@Component +public class SSOToYSIndexService extends SingleSignOn { + + + /** + * 单点登录凭证列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String index(String userId){ + return getSSOUrlToIndex(init(userId)); + } +} diff --git a/src/main/java/com/yonyou/openapi/service/SSOToYSService.java b/src/main/java/com/yonyou/openapi/service/SSOToYSService.java new file mode 100644 index 0000000..cab0acf --- /dev/null +++ b/src/main/java/com/yonyou/openapi/service/SSOToYSService.java @@ -0,0 +1,139 @@ +package com.yonyou.openapi.service; + +import com.yonyou.openapi.base.sso.sso.SingleSignOn; +import org.springframework.stereotype.Component; + +/** + * @author nishch + * @description: 单点登录至YS指定页面 + * @date 2023/7/26 + */ +@Component +public class SSOToYSService extends SingleSignOn { + + + /** + * 单点登录凭证列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String voucher_list(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.VOUCHER_LIST); + } + + /** + * 单点登录凭证详情页面 + * @param userId 三方用户唯一标识 + * @param billId 凭证id + * @return 最终单点登录地址 + */ + public String voucher(String userId,String billId){ + return getSSOUrlToUrl(init(userId),String.format(SSOUrl.NEW_VOUCHER,billId)); + } + + /** + * 单点登录应收发票列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String receivableList(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.RECEIVE_ABLE_LIST); + } + + /** + * 单点登录收款单列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String collectionList(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.COLLECTION_LIST); + } + + /** + * 单点登录收款退款单列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String arRefundList(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.AR_REFUND_LIST); + } + + + /** + * 单点登录应收事务列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String fiear_event_receivable_list(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.FIEAR_EVENT_RECEIVE_ABLE_LIST); + } + + /** + * 单点登录收款事务列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String ear_event_collection_list(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.EAR_EVENT_COLLECTION_LIST); + } + + + /** + * 单点登录应付发票列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String payableList(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.PAY_ABLE_LIST); + } + + + /** + * 单点登录付款申请单列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String paymentApplyList(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.PAYMENT_APPLY_LIST); + } + + + /** + * 单点登录付款单列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String paymentList(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.PAYMENT_LIST); + } + + + /** + * 单点登录付款退款单列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String apRefundList(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.AP_REFUND_LIST); + } + + + /** + * 单点登录应付事务列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String apPublicEvent_list(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.AP_PUBLIC_EVENT_LIST); + } + + + /** + * 单点登录应付事务列表页面 + * @param userId 三方用户唯一标识 + * @return 最终单点登录地址 + */ + public String paymentEventList(String userId){ + return getSSOUrlToUrl(init(userId),SSOUrl.PAYMENT_EVENT_LIST); + } +} diff --git a/src/main/java/com/yonyou/openapi/service/SSOUrl.java b/src/main/java/com/yonyou/openapi/service/SSOUrl.java new file mode 100644 index 0000000..e220228 --- /dev/null +++ b/src/main/java/com/yonyou/openapi/service/SSOUrl.java @@ -0,0 +1,66 @@ +package com.yonyou.openapi.service; + +/** + * @author nishch + * @description: 常见单点登记单据的URL + * @date 2023/7/26 + */ +public class SSOUrl { + + + /** + * 凭证列表页面 + */ + public final static String VOUCHER_LIST = "/mdf-node/meta/ArchiveList/bd_voucherlist?locale=zh_CN&busiObj=glVoucher&domainKey=yonbip-fi-egl"; + /** + * 凭证详情页面 + */ + public final static String NEW_VOUCHER = "/yonbip-fi-fcweb/ucf-wh/home_index.html?serviceCode=newvoucher&billid=%s#/voucher/new"; + /** + * 应收发票列表页面 + */ + public final static String RECEIVE_ABLE_LIST = "/mdf-node/meta/VoucherList/receivableList?busiObj=receivable&locale=zh_CN&domainKey=yonbip-fi-earapbill"; + /** + * 收款单列表页面 + */ + public final static String COLLECTION_LIST = "/mdf-node/meta/VoucherList/collectionList?busiObj=collection&locale=zh_CN&domainKey=yonbip-fi-earapbill"; + /** + * 收款退款单列表页面 + */ + public final static String AR_REFUND_LIST = "/mdf-node/meta/VoucherList/arRefundList?busiObj=arRefund&locale=zh_CN&domainKey=yonbip-fi-earapbill"; + /** + * 应收事务列表页面 + */ + public final static String FIEAR_EVENT_RECEIVE_ABLE_LIST = "/mdf-node/meta/VoucherList/fiear_event_receivable_list?&busiObj=arPublicEvent&locale=zh_CN&domainKey=yonbip-fi-earap"; + /** + * 收款事务列表页面 + */ + public final static String EAR_EVENT_COLLECTION_LIST = "/mdf-node/meta/VoucherList/ear_event_collection_list?busiObj=collectionEvent&locale=zh_CN&domainKey=yonbip-fi-earap"; + /** + * 应付发票列表页面 + */ + public final static String PAY_ABLE_LIST = "/mdf-node/meta/VoucherList/payableList?busiObj=payable&locale=zh_CN&domainKey=yonbip-fi-earapbill"; + /** + * 付款申请单列表页面 + */ + public final static String PAYMENT_APPLY_LIST = "/mdf-node/meta/VoucherList/paymentApplyList?busiObj=paymentApply&locale=zh_CN&domainKey=yonbip-fi-earapbill"; + /** + * 付款单列表页面 + */ + public final static String PAYMENT_LIST = "/mdf-node/meta/VoucherList/paymentList?busiObj=payment&locale=zh_CN&domainKey=yonbip-fi-earapbill"; + /** + * 付款退款单列表页面 + */ + public final static String AP_REFUND_LIST = "/mdf-node/meta/VoucherList/apRefundList?busiObj=apRefund&locale=zh_CN&domainKey=yonbip-fi-earapbill"; + /** + * 应付事务列表页面 + */ + public final static String AP_PUBLIC_EVENT_LIST = "/mdf-node/meta/VoucherList/apPublicEvent_list?busiObj=apPublicEvent&locale=zh_CN&domainKey=yonbip-fi-earap"; + /** + * 付款事务列表页面 + */ + public final static String PAYMENT_EVENT_LIST = "/mdf-node/meta/VoucherList/paymentEventList?busiObj=paymentEvent&locale=zh_CN&domainKey=yonbip-fi-earap"; + + + +} diff --git a/src/main/java/com/yonyou/openapi/service/TokenProviderImpl.java b/src/main/java/com/yonyou/openapi/service/TokenProviderImpl.java index 245caf1..f3c9372 100644 --- a/src/main/java/com/yonyou/openapi/service/TokenProviderImpl.java +++ b/src/main/java/com/yonyou/openapi/service/TokenProviderImpl.java @@ -1,56 +1,35 @@ package com.yonyou.openapi.service; -import com.github.benmanes.caffeine.cache.Cache; import com.yonyou.openapi.base.auth.token.OpenApiTokenCacheProvider; import com.yonyou.openapi.base.datacenter.impl.DataCenterUrlProviderImpl; import com.yonyou.openapi.base.datacenter.pojo.GatewayAddressResponse; import com.yonyou.openapi.base.response.OpenApiAccessToken; -import com.yonyou.openapi.configure.ApiBaseContext; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; - -import javax.annotation.Resource; -import java.util.Objects; +/** + * @author nishch + * @description: TODO + * @date 2022/3/8 + */ @Slf4j public class TokenProviderImpl extends DataCenterUrlProviderImpl implements OpenApiTokenCacheProvider { - @Resource - Cache moreDataUrlCache; - @Resource - Cache tokenCache; - - /** - * TODO:不建议每次都调用接口,建议将租户地址对应关系持久化到数据库或者缓存中 + * TODO:不建议每次都调用接口,建议将租户地址对应关系持久化到数据库和缓存中 * @return GatewayAddressResponse.GatewayAddressDTO */ @Override public GatewayAddressResponse.GatewayAddressDTO queryGatewayAddress() { - GatewayAddressResponse.GatewayAddressDTO gatewayAddressDTO = Objects.requireNonNull(moreDataUrlCache).asMap().get("moreDataUrl"); - if(gatewayAddressDTO==null){ - GatewayAddressResponse.GatewayAddressDTO queryGatewayAddress = super.queryGatewayAddress(); - gatewayAddressDTO = queryGatewayAddress; - moreDataUrlCache.put("moreDataUrl",queryGatewayAddress); - } - return gatewayAddressDTO; + return super.queryGatewayAddress(); } /** * TODO: 从缓存中获取token - * @return token对象 返回null说明过期,会重新走获取token的逻辑 + * @return token对象 */ @Override public OpenApiAccessToken loadTokenFromCache() { - OpenApiAccessToken openApiAccessToken = Objects.requireNonNull(tokenCache).asMap().get("tokenCache"); - if(openApiAccessToken!=null){ - //判断有效期,如果大于30分钟则返回token - long currentTime = System.currentTimeMillis(); - if(openApiAccessToken.getExpiredAt()-currentTime>30*60*1000){ - return openApiAccessToken; - } - } return null; } @@ -60,7 +39,7 @@ public class TokenProviderImpl extends DataCenterUrlProviderImpl implements Open */ @Override public void saveTokenToCache(OpenApiAccessToken token) { - tokenCache.put("tokenCache",token); + } } diff --git a/src/main/java/com/yonyou/openapi/service/staff/StaffApi.java b/src/main/java/com/yonyou/openapi/service/staff/StaffApi.java deleted file mode 100644 index 3962210..0000000 --- a/src/main/java/com/yonyou/openapi/service/staff/StaffApi.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.yonyou.openapi.service.staff; - -import com.yonyou.openapi.base.response.ApiDataResponse; -import com.yonyou.openapi.service.BaseOpenApi; -import com.yonyou.openapi.service.OpenApiURL; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @description: 用友开放平台员工接口 - **/ -@Component -public class StaffApi extends BaseOpenApi { - - public Map list(Map params) { - ApiDataResponse apiDataResponse = postForEntity(OpenApiURL.STAFF_LIST,params, ApiDataResponse.class); - return getData(apiDataResponse); - } - -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 47a3771..c1514d9 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,10 +1,15 @@ #ȡ⻧ ucf.mdd.open-api.gateway-address-url=https://apigateway.yonyoucloud.com/open-auth/dataCenter/getGatewayAddress?tenantId=%s +# ѻַͨ +ucf.mdd.open-api.sso-yht-url = https://euc.diwork.com + +# TODO:֤ı +ucf.mdd.open-api.third-uc-id = bp8pve5e # TODO:⻧id -ucf.mdd.open-api.tenantId = jkekg6ry -# TODO:ӦϢ -ucf.mdd.open-api.app-key=b892c56cf5064be78723e262bdf42a5 -ucf.mdd.open-api.app-secret=106fcf1b0f6c7fc9dc5178126fb36798d05c8 +ucf.mdd.open-api.tenantId = rybentc5 +# TODO:ӦϢ------------begin +ucf.mdd.open-api.app-key=36fa263f55a14c3bb5aad181adbb03b5 +ucf.mdd.open-api.app-secret=b0ba34ff1db7085b7b88ff319b3237bde77014ef diff --git a/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java b/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java new file mode 100644 index 0000000..e479305 --- /dev/null +++ b/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java @@ -0,0 +1,51 @@ +package com.yonyou.openapi.sso; + +import com.yonyou.openapi.service.SSOToYSIndexService; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; +import java.io.IOException; + +/** + * @description: 单点登录控制台 + * @author: nishch + * @create: 2021-07-06 + **/ +@RunWith(SpringRunner.class) +@SpringBootTest +@Slf4j +public class SSO_Index_Test{ + + + @Resource + SSOToYSIndexService ssoToYSIndexService; + + /** + * 单点至控制台首页 + */ + @Test + public void voucher_list(){ + String ssoUrl = ssoToYSIndexService.index("qwertyvbnm"); + log.info("最终单点登录地址:"+ssoUrl); + openExplorer(ssoUrl); + } + + + /** + * 打开浏览器,方便调试使用 + * @param url 最终的单点登录地址 + */ + public static void openExplorer(String url){ + try { + Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url); + } catch (IOException e) { + e.printStackTrace(); + } + } + + +} diff --git a/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java b/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java new file mode 100644 index 0000000..f026a5a --- /dev/null +++ b/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java @@ -0,0 +1,73 @@ +package com.yonyou.openapi.sso; + +import com.yonyou.openapi.service.SSOToYSService; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; +import java.io.IOException; + +/** + * @description: 单点登录指定单据 + * @author: nishch + * @create: 2021-07-06 + **/ +@RunWith(SpringRunner.class) +@SpringBootTest +@Slf4j +public class SSO_URL_Test{ + + @Resource + SSOToYSService ssoToYSService; + + /** + * 单点至凭证列表页面 + * 注意:凭证的列表和卡片是分别两个页面,新增、联查、打印等等对应打开新页面的按钮点击均无效 + */ + @Test + public void voucher_list(){ + String ssoUrl = ssoToYSService.voucher_list("qwertyvbnm"); + log.info("最终单点登录地址:"+ssoUrl); + openExplorer(ssoUrl); + } + + + /** + * 单点至凭证卡片页面 + * 注意:凭证的列表和卡片是分别两个页面,新增、联查、打印等等对应打开新页面的按钮点击均无效 + */ + @Test + public void voucher(){ + String ssoUrl = ssoToYSService.voucher("qwertyvbnm","1748235291219984390"); + log.info("最终单点登录地址:"+ssoUrl); + openExplorer(ssoUrl); + } + + + /** + * 单点登录收款单列表页面 + */ + @Test + public void collectionList(){ + String ssoUrl = ssoToYSService.collectionList("qwertyvbnm"); + log.info("最终单点登录地址:"+ssoUrl); + openExplorer(ssoUrl); + } + + + /** + * 打开浏览器,方便调试使用 + * @param url 最终的单点登录地址 + */ + public static void openExplorer(String url){ + try { + Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/test/java/com/yonyou/openapi/staff/StaffApiTest.java b/src/test/java/com/yonyou/openapi/staff/StaffApiTest.java deleted file mode 100644 index d26f522..0000000 --- a/src/test/java/com/yonyou/openapi/staff/StaffApiTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.yonyou.openapi.staff; - - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.yonyou.openapi.service.staff.StaffApi; -import lombok.extern.slf4j.Slf4j; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import javax.annotation.Resource; -import java.util.HashMap; -import java.util.Map; - -/** - * @description: 员工档案列表查询测试用例 - **/ -@RunWith(SpringRunner.class) -@SpringBootTest -@Slf4j -public class StaffApiTest{ - - @Resource - StaffApi staffApi; - private ObjectMapper objectMapper = new ObjectMapper(); - - @Test - public void list() throws JsonProcessingException { - Map map = new HashMap<>(); - map.put("pageIndex",1); - map.put("pageSize",10); - Map result = staffApi.list(map); - log.info(objectMapper.writeValueAsString(result)); - } -} -- Gitee From c41df2af294728635e7aca40ef20c74790899eb8 Mon Sep 17 00:00:00 2001 From: Administrator Date: Thu, 31 Aug 2023 15:31:33 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 2 +- src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index c1514d9..541ca00 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -9,7 +9,7 @@ ucf.mdd.open-api.third-uc-id = bp8pve5e ucf.mdd.open-api.tenantId = rybentc5 # TODO:ӦϢ------------begin ucf.mdd.open-api.app-key=36fa263f55a14c3bb5aad181adbb03b5 -ucf.mdd.open-api.app-secret=b0ba34ff1db7085b7b88ff319b3237bde77014ef +ucf.mdd.open-api.app-secret=b0ba34ff1db7085b7b88ff3237bde77014ef diff --git a/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java b/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java index e479305..1a6c3a2 100644 --- a/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java +++ b/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java @@ -28,7 +28,7 @@ public class SSO_Index_Test{ * 单点至控制台首页 */ @Test - public void voucher_list(){ + public void list(){ String ssoUrl = ssoToYSIndexService.index("qwertyvbnm"); log.info("最终单点登录地址:"+ssoUrl); openExplorer(ssoUrl); -- Gitee From 800c3d3b2c9ffc0d54ad12ad9994c618bc7783d5 Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 18 Sep 2023 11:54:17 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=8F=8B=E4=BA=92?= =?UTF-8?q?=E9=80=9A=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 541ca00..e468591 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,15 +1,15 @@ #ȡ⻧ ucf.mdd.open-api.gateway-address-url=https://apigateway.yonyoucloud.com/open-auth/dataCenter/getGatewayAddress?tenantId=%s # ѻַͨ -ucf.mdd.open-api.sso-yht-url = https://euc.diwork.com +ucf.mdd.open-api.sso-yht-url = https://euc.yonyoucloud.com # TODO:֤ı -ucf.mdd.open-api.third-uc-id = bp8pve5e +ucf.mdd.open-api.third-uc-id = qv47l6vm # TODO:⻧id -ucf.mdd.open-api.tenantId = rybentc5 +ucf.mdd.open-api.tenantId = lmeecl5m # TODO:ӦϢ------------begin -ucf.mdd.open-api.app-key=36fa263f55a14c3bb5aad181adbb03b5 -ucf.mdd.open-api.app-secret=b0ba34ff1db7085b7b88ff3237bde77014ef +ucf.mdd.open-api.app-key=d8e643e740b7461e8933ed9765d4fedf +ucf.mdd.open-api.app-secret=4a7b9760d4ac80ccf98972b5462c6aac7988e703 -- Gitee From 9ebcc5b50fa9a36af7f1d80decfcbb55b68cf2a0 Mon Sep 17 00:00:00 2001 From: Administrator Date: Tue, 19 Sep 2023 09:40:00 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=8F=8B=E4=BA=92?= =?UTF-8?q?=E9=80=9A=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 +++++++++---- .../java/com/yonyou/openapi/sso/SSO_Index_Test.java | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 63c006a..de6e7dc 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,16 @@ com/yonyou/openapi #获取租户所在数据中心域名 ucf.mdd.open-api.gateway-address-url=https://apigateway.yonyoucloud.com/open-auth/dataCenter/getGatewayAddress?tenantId=%s +# 友互通地址 +ucf.mdd.open-api.sso-yht-url = https://euc.yonyoucloud.com + +# TODO:集成认证中心编码 +ucf.mdd.open-api.third-uc-id = qv47l6vc # TODO:租户id -ucf.mdd.open-api.tenantId = rybentc5 -# TODO:应用信息 -ucf.mdd.open-api.app-key=b7966b8ee1e04c62bf7b21c261d6a64 -ucf.mdd.open-api.app-secret=8190bccf4261e029784d1482dac4ab915ec4696 +ucf.mdd.open-api.tenantId = lmeecl5m +# TODO:应用信息------------begin +ucf.mdd.open-api.app-key=d8e643e740b7461e8933ed95d4fedf +ucf.mdd.open-api.app-secret=4a7b9760d4ac80ccf982b5462c6aac7988e703 ``` diff --git a/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java b/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java index 1a6c3a2..393cb07 100644 --- a/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java +++ b/src/test/java/com/yonyou/openapi/sso/SSO_Index_Test.java @@ -29,7 +29,7 @@ public class SSO_Index_Test{ */ @Test public void list(){ - String ssoUrl = ssoToYSIndexService.index("qwertyvbnm"); + String ssoUrl = ssoToYSIndexService.index("200043"); log.info("最终单点登录地址:"+ssoUrl); openExplorer(ssoUrl); } -- Gitee From 2d97b929a26338354859a88989db7f5c55eae5c2 Mon Sep 17 00:00:00 2001 From: Administrator Date: Tue, 19 Sep 2023 10:44:42 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E8=A2=AB=E9=9B=86=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/event/EventListenerController.java | 2 +- .../openapi/base/sso/sso/SingleSignOn.java | 20 +++++- .../openapi/controller/SSOController.java | 41 ++++++++++++ .../openapi/event/ISVEventExtendDto.java | 41 ++++++++++++ .../openapi/event/IsvEventExtendType.java | 20 ++++++ .../openapi/event/todo/TodoAddEvent.java | 65 +++++++++++++++++++ .../openapi/event/todo/TodoUpdateEvent.java | 65 +++++++++++++++++++ src/main/resources/application.properties | 8 +-- 8 files changed, 255 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/yonyou/openapi/controller/SSOController.java create mode 100644 src/main/java/com/yonyou/openapi/event/ISVEventExtendDto.java create mode 100644 src/main/java/com/yonyou/openapi/event/IsvEventExtendType.java create mode 100644 src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java create mode 100644 src/main/java/com/yonyou/openapi/event/todo/TodoUpdateEvent.java diff --git a/src/main/java/com/yonyou/openapi/base/event/EventListenerController.java b/src/main/java/com/yonyou/openapi/base/event/EventListenerController.java index 45376f7..5d898eb 100644 --- a/src/main/java/com/yonyou/openapi/base/event/EventListenerController.java +++ b/src/main/java/com/yonyou/openapi/base/event/EventListenerController.java @@ -31,7 +31,7 @@ public class EventListenerController { * @param holder 开放平台请求消息体 * @return 返回success表示成功接收,抛出异常等其他代表接收失败 */ - @PostMapping("/new1") + @PostMapping("/new") public String onEventNew(@RequestBody EncryptionHolder holder) throws JsonProcessingException { PrivateAppCryptoSHA256 crypto = PrivateAppCryptoSHA256.newCrypto(openApiProperties.getAppKey(), openApiProperties.getAppSecret()); // 验签解密后的消息体 diff --git a/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java b/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java index a899889..4b558ab 100644 --- a/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java +++ b/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java @@ -55,9 +55,25 @@ public class SingleSignOn extends BaseOpenApi { * @return 最终实现单点的地址 */ public String getSSOUrlToUrl(ThirdUserBo entity,String url){ + return getString(entity, getBaseUrl()+url, false); + } + + + /** + * 待办被集成 + * @param entity 第三方用户信息 + * @param url 要跳转的真实地址 + * @return 最终实现单点的地址 + */ + public String getSSOUrlToDO(ThirdUserBo entity,String url){ + return getString(entity, url, true); + } + + private String getString(ThirdUserBo entity, String url, boolean b) { + entity.setThirdUcId(properties.getThirdUcId()); String code = getCode(entity); - String thirdUCId = entity.getThirdUcId(); - String node = encode(getBaseUrl()+url,false); + String thirdUCId = properties.getThirdUcId(); + String node = encode(url, b); String nodeUrl = getAccess_tet()+"?tenantId="+properties.getTenantId()+"&service="+node; return String.format(open_ys_url,properties.getSsoYhtUrl(),thirdUCId,code,encode(nodeUrl,true)); } diff --git a/src/main/java/com/yonyou/openapi/controller/SSOController.java b/src/main/java/com/yonyou/openapi/controller/SSOController.java new file mode 100644 index 0000000..8fc78f8 --- /dev/null +++ b/src/main/java/com/yonyou/openapi/controller/SSOController.java @@ -0,0 +1,41 @@ +package com.yonyou.openapi.controller; + +import com.yonyou.openapi.base.exception.BusinessException; +import com.yonyou.openapi.base.properties.OpenApiProperties; +import com.yonyou.openapi.base.sso.pojo.ThirdUserBo; +import com.yonyou.openapi.service.SSOToYSIndexService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; + +@Slf4j +@Controller +@RequestMapping("/yonsuite/sso") +public class SSOController { + + @Resource + SSOToYSIndexService ssoToYSIndexService; + @Resource + public OpenApiProperties properties; + + /** + * 获取单点登录地址 + * 地址示例 http://localhost:8080/yonsuite/sso?userId=200043&targetUrl=https%3A%2F%2Fdbox.yonyoucloud.com%2Flogin + */ + @GetMapping + public void getSSOUrl(ThirdUserBo thirdUserBo, HttpServletResponse response){ + try{ + String ssoUrl = ssoToYSIndexService.getSSOUrlToDO(thirdUserBo,thirdUserBo.getTargetUrl()); + response.sendRedirect(ssoUrl); + }catch (Exception e){ + throw new BusinessException("单点登录异常"); + } + } + + + +} diff --git a/src/main/java/com/yonyou/openapi/event/ISVEventExtendDto.java b/src/main/java/com/yonyou/openapi/event/ISVEventExtendDto.java new file mode 100644 index 0000000..69d7e24 --- /dev/null +++ b/src/main/java/com/yonyou/openapi/event/ISVEventExtendDto.java @@ -0,0 +1,41 @@ +package com.yonyou.openapi.event; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.yonyou.openapi.base.event.pojo.Event; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @description: 事件解析实体 + **/ +@EqualsAndHashCode(callSuper = true) +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public class ISVEventExtendDto extends Event { + + private String definitionVariable; + + /** + * 变动的 staff id + **/ + private String[] staffId; + + /** + * 变动的 dept id + **/ + private String[] deptId; + + /** + * 变动的 user id + */ + private String[] userId; + + private String actionKey; + + private Object value; + + private String tenantId; + +} diff --git a/src/main/java/com/yonyou/openapi/event/IsvEventExtendType.java b/src/main/java/com/yonyou/openapi/event/IsvEventExtendType.java new file mode 100644 index 0000000..41907e5 --- /dev/null +++ b/src/main/java/com/yonyou/openapi/event/IsvEventExtendType.java @@ -0,0 +1,20 @@ +package com.yonyou.openapi.event; + + +import com.yonyou.openapi.base.event.pojo.EventType; + +/** + * @description: 事件类型 + **/ +public class IsvEventExtendType extends EventType { + + /** + * 待办增加 + */ + public static final String TODO_CENTER_ADD_TODO = "TODO_CENTER_ADD_TODO"; + /** + * 待办更新 + */ + public static final String TODO_CENTER_UPDATE_TODO = "TODO_CENTER_UPDATE_TODO"; + +} diff --git a/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java b/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java new file mode 100644 index 0000000..89ba066 --- /dev/null +++ b/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java @@ -0,0 +1,65 @@ +package com.yonyou.openapi.event.todo; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Sets; +import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; +import com.yonyou.openapi.base.event.EventListener; +import com.yonyou.openapi.event.ISVEventExtendDto; +import com.yonyou.openapi.event.IsvEventExtendType; +import com.yonyou.openapi.service.SSOToYSIndexService; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Map; +import java.util.Set; + +/** + * @description: 待办新增 + * @author: nishch + * @create: 2021-07-05 + **/ +@Slf4j +@Component +@RequiredArgsConstructor +public class TodoAddEvent implements EventListener { + + @Resource + SSOToYSIndexService ssoToYSIndexService; + private ObjectMapper objectMapper = new ObjectMapper(); + + /** + * TODO:在这里写待办的处理逻辑 + * @param type 事项类型 + * @param event 解析后对象 + * @param holder 响应消息体 + * @return boolean + */ + @Override + @SneakyThrows + public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder){ + Map info = objectMapper.readValue(event.getContent(), Map.class); + Map result = objectMapper.readValue(info.get("value"), Map.class); + log.info("todo id: {}", result.toString()); + log.info("todo webUrl: {}", result.get("webUrl")); + return true; + } + + @Override + public int priority() { + return EventListener.super.priority()-100; + } + + @Override + public Set supportTypes() { + return Sets.newHashSet(IsvEventExtendType.TODO_CENTER_ADD_TODO); + } + + @Override + public Class getEventClass() { + return ISVEventExtendDto.class; + } + +} diff --git a/src/main/java/com/yonyou/openapi/event/todo/TodoUpdateEvent.java b/src/main/java/com/yonyou/openapi/event/todo/TodoUpdateEvent.java new file mode 100644 index 0000000..b34795f --- /dev/null +++ b/src/main/java/com/yonyou/openapi/event/todo/TodoUpdateEvent.java @@ -0,0 +1,65 @@ +package com.yonyou.openapi.event.todo; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Sets; +import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; +import com.yonyou.openapi.base.event.EventListener; +import com.yonyou.openapi.event.ISVEventExtendDto; +import com.yonyou.openapi.event.IsvEventExtendType; +import com.yonyou.openapi.service.SSOToYSIndexService; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Map; +import java.util.Set; + +/** + * @description: 待办更新 + * @author: nishch + * @create: 2021-07-05 + **/ +@Slf4j +@Component +@RequiredArgsConstructor +public class TodoUpdateEvent implements EventListener { + + @Resource + SSOToYSIndexService ssoToYSIndexService; + private ObjectMapper objectMapper = new ObjectMapper(); + + /** + * TODO:在这里写待办的处理逻辑 + * @param type 事项类型 + * @param event 解析后对象 + * @param holder 响应消息体 + * @return boolean + */ + @Override + @SneakyThrows + public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder){ + Map info = objectMapper.readValue(event.getContent(), Map.class); + Map result = objectMapper.readValue(info.get("value"), Map.class); + log.info("todo id: {}", result.toString()); + log.info("todo webUrl: {}", result.get("webUrl")); + return true; + } + + @Override + public int priority() { + return EventListener.super.priority()-100; + } + + @Override + public Set supportTypes() { + return Sets.newHashSet(IsvEventExtendType.TODO_CENTER_UPDATE_TODO); + } + + @Override + public Class getEventClass() { + return ISVEventExtendDto.class; + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e468591..075c440 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,12 +4,12 @@ ucf.mdd.open-api.gateway-address-url=https://apigateway.yonyoucloud.com/open-aut ucf.mdd.open-api.sso-yht-url = https://euc.yonyoucloud.com # TODO:֤ı -ucf.mdd.open-api.third-uc-id = qv47l6vm +ucf.mdd.open-api.third-uc-id = bp8pve5e # TODO:⻧id -ucf.mdd.open-api.tenantId = lmeecl5m +ucf.mdd.open-api.tenantId = rybentc5 # TODO:ӦϢ------------begin -ucf.mdd.open-api.app-key=d8e643e740b7461e8933ed9765d4fedf -ucf.mdd.open-api.app-secret=4a7b9760d4ac80ccf98972b5462c6aac7988e703 +ucf.mdd.open-api.app-key=36fa263f55a14c3bb5aad181adbb03b5 +ucf.mdd.open-api.app-secret=c6ecbeac76804a45d607d94eb92bccdab49d82 -- Gitee From c4ba21f192222a966382f3659be4a6db1ccfd038 Mon Sep 17 00:00:00 2001 From: Administrator Date: Tue, 19 Sep 2023 12:22:20 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E8=A2=AB=E9=9B=86=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java b/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java index 89ba066..8b41d73 100644 --- a/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java +++ b/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java @@ -13,6 +13,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.Set; @@ -43,7 +45,7 @@ public class TodoAddEvent implements EventListener { Map info = objectMapper.readValue(event.getContent(), Map.class); Map result = objectMapper.readValue(info.get("value"), Map.class); log.info("todo id: {}", result.toString()); - log.info("todo webUrl: {}", result.get("webUrl")); + log.info("todo webUrl: {}", URLEncoder.encode(result.get("webUrl").toString(), StandardCharsets.UTF_8.toString())); return true; } -- Gitee From 3f17e1f494186cb9f75e5ce294e3268d0f501974 Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 20 Sep 2023 18:45:04 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/main/resources/application.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index de6e7dc..a292018 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,8 @@ ucf.mdd.open-api.third-uc-id = qv47l6vc # TODO:租户id ucf.mdd.open-api.tenantId = lmeecl5m # TODO:应用信息------------begin -ucf.mdd.open-api.app-key=d8e643e740b7461e8933ed95d4fedf -ucf.mdd.open-api.app-secret=4a7b9760d4ac80ccf982b5462c6aac7988e703 +ucf.mdd.open-api.app-key=d8e643e740***************d95d4fedf +ucf.mdd.open-api.app-secret=4a7b9760d4ac8***************c7988e703 ``` diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 075c440..05679d8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -8,8 +8,8 @@ ucf.mdd.open-api.third-uc-id = bp8pve5e # TODO:⻧id ucf.mdd.open-api.tenantId = rybentc5 # TODO:ӦϢ------------begin -ucf.mdd.open-api.app-key=36fa263f55a14c3bb5aad181adbb03b5 -ucf.mdd.open-api.app-secret=c6ecbeac76804a45d607d94eb92bccdab49d82 +ucf.mdd.open-api.app-key=d8e643e740***************d95d4fedf +ucf.mdd.open-api.app-secret=a7b9760d4ac8***************c7988e703 -- Gitee From e5ac3e36dc9ea63ba2a455fad767a53fa590489c Mon Sep 17 00:00:00 2001 From: Administrator Date: Fri, 3 Nov 2023 15:47:52 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8D=95=E7=82=B9?= =?UTF-8?q?=E5=88=B0=E6=8C=87=E5=AE=9A=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yonyou/openapi/base/sso/sso/SingleSignOn.java | 11 +++++++++++ .../com/yonyou/openapi/service/SSOToYSService.java | 6 ++++++ .../java/com/yonyou/openapi/sso/SSO_URL_Test.java | 8 ++++++++ 3 files changed, 25 insertions(+) diff --git a/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java b/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java index 4b558ab..405b8a2 100644 --- a/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java +++ b/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java @@ -59,6 +59,17 @@ public class SingleSignOn extends BaseOpenApi { } + /** + * 获取登录到指定页面 + * @param entity 第三方用户信息 + * @param url 要跳转的真实地址 + * @return 最终实现单点的地址 + */ + public String getSSOUrlToUrl2(ThirdUserBo entity,String url){ + return getString(entity, url, false); + } + + /** * 待办被集成 * @param entity 第三方用户信息 diff --git a/src/main/java/com/yonyou/openapi/service/SSOToYSService.java b/src/main/java/com/yonyou/openapi/service/SSOToYSService.java index cab0acf..56e74bb 100644 --- a/src/main/java/com/yonyou/openapi/service/SSOToYSService.java +++ b/src/main/java/com/yonyou/openapi/service/SSOToYSService.java @@ -12,6 +12,12 @@ import org.springframework.stereotype.Component; public class SSOToYSService extends SingleSignOn { + public String ssoUrl(String userId,String url){ + return getSSOUrlToUrl2(init(userId),url); + } + + + /** * 单点登录凭证列表页面 * @param userId 三方用户唯一标识 diff --git a/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java b/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java index f026a5a..ccfa3c1 100644 --- a/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java +++ b/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java @@ -58,6 +58,14 @@ public class SSO_URL_Test{ } + @Test + public void ssoUrl(){ + String ssoUrl = ssoToYSService.ssoUrl("wupb","https://c3.yonyoucloud.com/mdf-node/meta/voucher/sact_salescontract/1853650986270195713?domainKey=sact&businessStepCode=&tenantId=osy0gmcg&apptype=mdf&serviceCode=salescontractlist&taskId=5851899f-7a13-11ee-9312-26ce4027b229&from_mc_workflow=1&from_service=iuap-apcom-messagecenter&url_actual_build_source=iuap-apcom-messageplatform"); + log.info("最终单点登录地址:"+ssoUrl); + } + + + /** * 打开浏览器,方便调试使用 * @param url 最终的单点登录地址 -- Gitee From 95e557e35de345d6513f1302b0fc1535829f6aa7 Mon Sep 17 00:00:00 2001 From: ecological-technology <1809799092@qq.com> Date: Fri, 24 Nov 2023 10:35:53 +0000 Subject: [PATCH 09/16] update README.md. Signed-off-by: ecological-technology <1809799092@qq.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a292018..a62b567 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,9 @@ ucf.mdd.open-api.gateway-address-url=https://apigateway.yonyoucloud.com/open-aut ucf.mdd.open-api.sso-yht-url = https://euc.yonyoucloud.com # TODO:集成认证中心编码 -ucf.mdd.open-api.third-uc-id = qv47l6vc +ucf.mdd.open-api.third-uc-id = qv4***vc # TODO:租户id -ucf.mdd.open-api.tenantId = lmeecl5m +ucf.mdd.open-api.tenantId = lme***5m # TODO:应用信息------------begin ucf.mdd.open-api.app-key=d8e643e740***************d95d4fedf ucf.mdd.open-api.app-secret=4a7b9760d4ac8***************c7988e703 -- Gitee From ce92cceeada89d0635672d8b233cae77b6990234 Mon Sep 17 00:00:00 2001 From: ecological-technology <1809799092@qq.com> Date: Fri, 24 Nov 2023 10:36:31 +0000 Subject: [PATCH 10/16] update src/main/resources/application.properties. Signed-off-by: ecological-technology <1809799092@qq.com> --- src/main/resources/application.properties | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 05679d8..3c740e5 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,13 +1,13 @@ -#ȡ⻧ +#获取租户所在数据中心域名 ucf.mdd.open-api.gateway-address-url=https://apigateway.yonyoucloud.com/open-auth/dataCenter/getGatewayAddress?tenantId=%s -# ѻַͨ +# 友互通地址 ucf.mdd.open-api.sso-yht-url = https://euc.yonyoucloud.com -# TODO:֤ı -ucf.mdd.open-api.third-uc-id = bp8pve5e -# TODO:⻧id -ucf.mdd.open-api.tenantId = rybentc5 -# TODO:ӦϢ------------begin +# TODO:集成认证中心编码 +ucf.mdd.open-api.third-uc-id = bp***e5e +# TODO:租户id +ucf.mdd.open-api.tenantId = ry***tc5 +# TODO:应用信息------------begin ucf.mdd.open-api.app-key=d8e643e740***************d95d4fedf ucf.mdd.open-api.app-secret=a7b9760d4ac8***************c7988e703 -- Gitee From 8432a2cf082b903a119732f77f10898d401ece17 Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 8 Apr 2024 19:53:40 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E8=AA=BF=E6=95=B4JSON=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network/cryptor/ISVRequestCrypto.java | 5 +- .../cryptor/ISVRequestCryptoSHA256.java | 18 +- .../impl/ReceivedEventDispatcherImpl.java | 5 +- .../yonyou/openapi/base/sso/BaseOpenApi.java | 5 +- .../openapi/base/utils/JSONConvertUtil.java | 26 --- .../openapi/base/utils/JacksonUtils.java | 197 ++++++++++++++++++ .../openapi/base/utils/RequestUtil.java | 16 +- .../event/EventListenerController.java | 7 +- .../openapi/event/todo/TodoAddEvent.java | 7 +- .../openapi/event/todo/TodoUpdateEvent.java | 7 +- 10 files changed, 220 insertions(+), 73 deletions(-) delete mode 100644 src/main/java/com/yonyou/openapi/base/utils/JSONConvertUtil.java create mode 100644 src/main/java/com/yonyou/openapi/base/utils/JacksonUtils.java rename src/main/java/com/yonyou/openapi/{base => }/event/EventListenerController.java (87%) diff --git a/src/main/java/com/yonyou/openapi/base/auth/network/cryptor/ISVRequestCrypto.java b/src/main/java/com/yonyou/openapi/base/auth/network/cryptor/ISVRequestCrypto.java index 247636d..b9e2dc6 100644 --- a/src/main/java/com/yonyou/openapi/base/auth/network/cryptor/ISVRequestCrypto.java +++ b/src/main/java/com/yonyou/openapi/base/auth/network/cryptor/ISVRequestCrypto.java @@ -1,7 +1,7 @@ package com.yonyou.openapi.base.auth.network.cryptor; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yonyou.openapi.base.exception.BusinessException; +import com.yonyou.openapi.base.utils.JacksonUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; @@ -16,7 +16,6 @@ import java.util.Base64; @Slf4j public class ISVRequestCrypto { - private ObjectMapper objectMapper = new ObjectMapper(); private static final Charset CHARSET = StandardCharsets.UTF_8; private final byte[] aesKey; @@ -267,7 +266,7 @@ public class ISVRequestCrypto { } public EncryptionHolder jsonToHolder(String jsonStr) { - return objectMapper.convertValue(jsonStr, EncryptionHolder.class); + return JacksonUtils.toJavaObject(jsonStr, EncryptionHolder.class); } /** diff --git a/src/main/java/com/yonyou/openapi/base/auth/network/cryptor/ISVRequestCryptoSHA256.java b/src/main/java/com/yonyou/openapi/base/auth/network/cryptor/ISVRequestCryptoSHA256.java index ff9a29d..2fd48d6 100644 --- a/src/main/java/com/yonyou/openapi/base/auth/network/cryptor/ISVRequestCryptoSHA256.java +++ b/src/main/java/com/yonyou/openapi/base/auth/network/cryptor/ISVRequestCryptoSHA256.java @@ -1,8 +1,7 @@ package com.yonyou.openapi.base.auth.network.cryptor; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yonyou.openapi.base.exception.BusinessException; +import com.yonyou.openapi.base.utils.JacksonUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,8 +29,6 @@ public class ISVRequestCryptoSHA256 { private static Charset CHARSET = Charset.forName("utf-8"); - private static ObjectMapper mapper = new ObjectMapper(); - private byte[] aesKey; private String token; @@ -293,20 +290,11 @@ public class ISVRequestCryptoSHA256 { } public String holderToJsonStr(EncryptionHolder holder) throws BusinessException { - try { - return mapper.writeValueAsString(holder); - } catch (JsonProcessingException e) { - LOGGER.error("加密消息序列化失败"); - throw new BusinessException(ErrorCode.ENCRYPT_MESSAGE_SERIALIZE_FAILED.getCode(), e); - } + return JacksonUtils.toJSONString(holder); } public EncryptionHolder jsonToHolder(String jsonStr) throws BusinessException { - try { - return mapper.readValue(jsonStr, EncryptionHolder.class); - } catch (IOException e) { - throw new BusinessException(ErrorCode.ENCRYPT_MESSAGE_DESERIALIZE_FAILED.getCode(), e); - } + return JacksonUtils.toJavaObject(jsonStr, EncryptionHolder.class); } } diff --git a/src/main/java/com/yonyou/openapi/base/event/impl/ReceivedEventDispatcherImpl.java b/src/main/java/com/yonyou/openapi/base/event/impl/ReceivedEventDispatcherImpl.java index 7feba3c..fb42223 100644 --- a/src/main/java/com/yonyou/openapi/base/event/impl/ReceivedEventDispatcherImpl.java +++ b/src/main/java/com/yonyou/openapi/base/event/impl/ReceivedEventDispatcherImpl.java @@ -1,10 +1,10 @@ package com.yonyou.openapi.base.event.impl; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; import com.yonyou.openapi.base.event.EventListener; import com.yonyou.openapi.base.event.ReceivedEventDispatcher; import com.yonyou.openapi.base.event.pojo.Event; +import com.yonyou.openapi.base.utils.JacksonUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; @@ -22,7 +22,6 @@ public class ReceivedEventDispatcherImpl implements ReceivedEventDispatcher { private final ApplicationContext applicationContext; private List listeners; - private ObjectMapper objectMapper = new ObjectMapper(); @Override public List findEventListens() { @@ -45,7 +44,7 @@ public class ReceivedEventDispatcherImpl implements ReceivedEventDispatcher { continue; } Class eventClass = listener.getEventClass(); - boolean isContinue = listener.onEvent(event.getType(), objectMapper.readValue(source, eventClass), holder); + boolean isContinue = listener.onEvent(event.getType(), JacksonUtils.toJavaObject(source, eventClass), holder); if (!isContinue) { log.warn("listener {} want to stop event processing", listener.getClass()); return; diff --git a/src/main/java/com/yonyou/openapi/base/sso/BaseOpenApi.java b/src/main/java/com/yonyou/openapi/base/sso/BaseOpenApi.java index 18ff9ce..0d8d17f 100644 --- a/src/main/java/com/yonyou/openapi/base/sso/BaseOpenApi.java +++ b/src/main/java/com/yonyou/openapi/base/sso/BaseOpenApi.java @@ -1,12 +1,12 @@ package com.yonyou.openapi.base.sso; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yonyou.openapi.base.auth.TenantAuthProvider; import com.yonyou.openapi.base.datacenter.DataCenterUrlProvider; import com.yonyou.openapi.base.exception.BusinessException; import com.yonyou.openapi.base.properties.OpenApiProperties; import com.yonyou.openapi.base.response.OpenApiAccessToken; import com.yonyou.openapi.base.response.OpenApiResponse; +import com.yonyou.openapi.base.utils.JacksonUtils; import com.yonyou.openapi.base.utils.ReSubmitUtil; import com.yonyou.openapi.base.utils.RequestUtil; import lombok.Getter; @@ -25,7 +25,6 @@ import java.util.Map; @Component public class BaseOpenApi { - private ObjectMapper objectMapper = new ObjectMapper(); @Resource TenantAuthProvider tenantAuthProvider; @Resource @@ -64,7 +63,7 @@ public class BaseOpenApi { throw new BusinessException("unexpected response null when request open api isv access token"); } body.check(); - log.info(objectMapper.writeValueAsString(body)); + log.info(JacksonUtils.toJSONString(body)); return body.getData(); } diff --git a/src/main/java/com/yonyou/openapi/base/utils/JSONConvertUtil.java b/src/main/java/com/yonyou/openapi/base/utils/JSONConvertUtil.java deleted file mode 100644 index 07daad4..0000000 --- a/src/main/java/com/yonyou/openapi/base/utils/JSONConvertUtil.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.yonyou.openapi.base.utils; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.yonyou.openapi.base.exception.BusinessException; - -/** - * @author nishch - * @description: - * @date 2023/8/24 - */ -public class JSONConvertUtil { - - public static String convertString(Object object){ - try { - if(object!=null){ - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - return objectMapper.writeValueAsString(object); - } - }catch (Exception exception){ - throw new BusinessException("JSON转换异常"); - } - return null; - } -} diff --git a/src/main/java/com/yonyou/openapi/base/utils/JacksonUtils.java b/src/main/java/com/yonyou/openapi/base/utils/JacksonUtils.java new file mode 100644 index 0000000..e1efdcf --- /dev/null +++ b/src/main/java/com/yonyou/openapi/base/utils/JacksonUtils.java @@ -0,0 +1,197 @@ +package com.yonyou.openapi.base.utils; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + +@Slf4j +public class JacksonUtils { + private static ObjectMapper mapper; + + /** + * 设置一些通用的属性 + */ + static { + mapper = new ObjectMapper(); + // 如果存在未知属性,则忽略不报错 + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 允许key没有双引号 + mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); + // 允许key有单引号 + mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); + // 移除空字符 + mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); + } + + public static String toJSONString(Object obj) { + return obj != null ? toJSONString(obj, () -> "", false) : ""; + } + + public static String toFormatJSONString(Object obj) { + return obj != null ? toJSONString(obj, () -> "", true) : ""; + } + + + public static String toJSONString(Object obj, Supplier defaultSupplier, boolean format) { + try { + if (obj == null) { + return defaultSupplier.get(); + } + if (obj instanceof String) { + return obj.toString(); + } + if (obj instanceof Number) { + return obj.toString(); + } + if (format) { + return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); + } + return mapper.writeValueAsString(obj); + } catch (Throwable e) { + log.error(String.format("toJSONString %s", obj != null ? obj.toString() : "null"), e); + } + return defaultSupplier.get(); + } + + public static T toJavaObject(String value, Class tClass) { + return StringUtils.isNotBlank(value) ? toJavaObject(value, tClass, () -> null) : null; + } + + public static T toJavaObject(Object obj, Class tClass) { + return obj != null ? toJavaObject(toJSONString(obj), tClass, () -> null) : null; + } + + public static T toJavaObject(String value, Class tClass, Supplier defaultSupplier) { + try { + if (StringUtils.isBlank(value)) { + return defaultSupplier.get(); + } + return mapper.readValue(value, tClass); + } catch (Throwable e) { + log.error(String.format("toJavaObject exception: \n %s\n %s", value, tClass), e); + } + return defaultSupplier.get(); + } + + public static List toJavaObjectList(String value, Class tClass) { + return StringUtils.isNotBlank(value) ? toJavaObjectList(value, tClass, () -> null) : null; + } + + public static List toJavaObjectList(Object obj, Class tClass) { + return obj != null ? toJavaObjectList(toJSONString(obj), tClass, () -> null) : null; + } + + public static List toJavaObjectList(String value, Class tClass, Supplier> defaultSupplier) { + try { + if (StringUtils.isBlank(value)) { + return defaultSupplier.get(); + } + JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, tClass); + return mapper.readValue(value, javaType); + } catch (Throwable e) { + log.error(String.format("toJavaObjectList exception \n%s\n%s", value, tClass), e); + } + return defaultSupplier.get(); + } + + // 简单地直接用json复制或者转换(Cloneable) + public static T jsonCopy(Object obj, Class tClass) { + return obj != null ? toJavaObject(toJSONString(obj), tClass) : null; + } + + public static Map toMap(String value) { + return StringUtils.isNotBlank(value) ? toMap(value, () -> null) : null; + } + + public static Map toMap(Object value) { + return value != null ? toMap(value, () -> null) : null; + } + + public static Map toMap(Object value, Supplier> defaultSupplier) { + if (value == null) { + return defaultSupplier.get(); + } + try { + if (value instanceof Map) { + return (Map) value; + } + } catch (Exception e) { + log.info("fail to convert" + toJSONString(value), e); + } + return toMap(toJSONString(value), defaultSupplier); + } + + public static Map toMap(String value, Supplier> defaultSupplier) { + if (StringUtils.isBlank(value)) { + return defaultSupplier.get(); + } + try { + return toJavaObject(value, LinkedHashMap.class); + } catch (Exception e) { + log.error(String.format("toMap exception\n%s", value), e); + } + return defaultSupplier.get(); + } + + + public static List toList(String value) { + return StringUtils.isNotBlank(value) ? toList(value, () -> null) : null; + } + + public static List toList(Object value) { + return value != null ? toList(value, () -> null) : null; + } + + public static List toList(String value, Supplier> defaultSuppler) { + if (StringUtils.isBlank(value)) { + return defaultSuppler.get(); + } + try { + return toJavaObject(value, List.class); + } catch (Exception e) { + log.error("toList exception\n" + value, e); + } + return defaultSuppler.get(); + } + + public static List toList(Object value, Supplier> defaultSuppler) { + if (value == null) { + return defaultSuppler.get(); + } + if (value instanceof List) { + return (List) value; + } + return toList(toJSONString(value), defaultSuppler); + } + + public static long getLong(Map map, String key) { + if (map == null || map.size() ==0) { + return 0L; + } + String valueStr = String.valueOf(map.get(key)); + if (StringUtils.isBlank(valueStr) || !StringUtils.isNumeric(valueStr)) { + return 0L; + } + return Long.valueOf(valueStr); + } + + public static int getInt(Map map, String key) { + if (map == null || map.size() ==0) { + return 0; + } + String valueStr = String.valueOf(map.get(key)); + if (StringUtils.isBlank(valueStr) || !StringUtils.isNumeric(valueStr)) { + return 0; + } + return Integer.valueOf(valueStr); + } + +} diff --git a/src/main/java/com/yonyou/openapi/base/utils/RequestUtil.java b/src/main/java/com/yonyou/openapi/base/utils/RequestUtil.java index 2545364..5081ef4 100644 --- a/src/main/java/com/yonyou/openapi/base/utils/RequestUtil.java +++ b/src/main/java/com/yonyou/openapi/base/utils/RequestUtil.java @@ -1,7 +1,5 @@ package com.yonyou.openapi.base.utils; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; @@ -25,8 +23,6 @@ public class RequestUtil { private static PoolingHttpClientConnectionManager cm = null; - private static ObjectMapper mapper = new ObjectMapper(); - private static CloseableHttpClient httpClient; /** @@ -83,19 +79,15 @@ public class RequestUtil { } public static T doGet(String requestUrl, Map paramMap, Class type) throws IOException { - return mapper.readValue(doGet(requestUrl, paramMap), type); + return JacksonUtils.toJavaObject(doGet(requestUrl, paramMap), type); } public static T doGetType(String requestUrl, Class type) throws IOException { - return mapper.readValue(doGet(requestUrl, null), type); + return JacksonUtils.toJavaObject(doGet(requestUrl, null), type); } public static T doPost(String requestUrl, Object params, Class type) throws IOException { - return mapper.readValue(doPost(requestUrl, params), type); - } - - public static T doGet(String requestUrl, Map paramMap, TypeReference typeReference) throws IOException { - return mapper.readValue(doGet(requestUrl, paramMap), typeReference); + return JacksonUtils.toJavaObject(doPost(requestUrl, params), type); } public static String doGet(String requestUrl, Map paramMap) throws IOException { @@ -122,7 +114,7 @@ public class RequestUtil { public static String doPost(String requestUrl, Object params) throws IOException { CloseableHttpClient httpClient = getHttpClient(); HttpPost post = new HttpPost(requestUrl); - String paramsStr = JSONConvertUtil.convertString(params); + String paramsStr = JacksonUtils.toJSONString(params); assert paramsStr != null; StringEntity stringEntity = new StringEntity(paramsStr, ContentType.APPLICATION_JSON); post.setEntity(stringEntity); diff --git a/src/main/java/com/yonyou/openapi/base/event/EventListenerController.java b/src/main/java/com/yonyou/openapi/event/EventListenerController.java similarity index 87% rename from src/main/java/com/yonyou/openapi/base/event/EventListenerController.java rename to src/main/java/com/yonyou/openapi/event/EventListenerController.java index 5d898eb..0453ec9 100644 --- a/src/main/java/com/yonyou/openapi/base/event/EventListenerController.java +++ b/src/main/java/com/yonyou/openapi/event/EventListenerController.java @@ -1,11 +1,13 @@ -package com.yonyou.openapi.base.event; +package com.yonyou.openapi.event; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; import com.yonyou.openapi.base.auth.network.cryptor.PrivateAppCryptoSHA256; +import com.yonyou.openapi.base.event.ReceivedEventDispatcher; import com.yonyou.openapi.base.event.pojo.Event; import com.yonyou.openapi.base.properties.OpenApiProperties; +import com.yonyou.openapi.base.utils.JacksonUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -24,7 +26,6 @@ public class EventListenerController { ReceivedEventDispatcher receivedEventDispatcher; @Resource OpenApiProperties openApiProperties; - private ObjectMapper objectMapper = new ObjectMapper(); /** * 2022-07-29 后创建的应用使用该事件订阅回调 @@ -37,7 +38,7 @@ public class EventListenerController { // 验签解密后的消息体 String decrypt = crypto.decryptMsg(holder); log.info("接收事件信息"+decrypt); - Event event = objectMapper.readValue(decrypt, Event.class); + Event event = JacksonUtils.toJavaObject(decrypt, Event.class); receivedEventDispatcher.dispatch(event, decrypt, holder); return "success"; } diff --git a/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java b/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java index 8b41d73..bd5ca8a 100644 --- a/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java +++ b/src/main/java/com/yonyou/openapi/event/todo/TodoAddEvent.java @@ -1,9 +1,9 @@ package com.yonyou.openapi.event.todo; -import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Sets; import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; import com.yonyou.openapi.base.event.EventListener; +import com.yonyou.openapi.base.utils.JacksonUtils; import com.yonyou.openapi.event.ISVEventExtendDto; import com.yonyou.openapi.event.IsvEventExtendType; import com.yonyou.openapi.service.SSOToYSIndexService; @@ -30,7 +30,6 @@ public class TodoAddEvent implements EventListener { @Resource SSOToYSIndexService ssoToYSIndexService; - private ObjectMapper objectMapper = new ObjectMapper(); /** * TODO:在这里写待办的处理逻辑 @@ -42,8 +41,8 @@ public class TodoAddEvent implements EventListener { @Override @SneakyThrows public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder){ - Map info = objectMapper.readValue(event.getContent(), Map.class); - Map result = objectMapper.readValue(info.get("value"), Map.class); + Map info = JacksonUtils.toJavaObject(event.getContent(), Map.class); + Map result = JacksonUtils.toJavaObject(info.get("value"), Map.class); log.info("todo id: {}", result.toString()); log.info("todo webUrl: {}", URLEncoder.encode(result.get("webUrl").toString(), StandardCharsets.UTF_8.toString())); return true; diff --git a/src/main/java/com/yonyou/openapi/event/todo/TodoUpdateEvent.java b/src/main/java/com/yonyou/openapi/event/todo/TodoUpdateEvent.java index b34795f..d7a55bc 100644 --- a/src/main/java/com/yonyou/openapi/event/todo/TodoUpdateEvent.java +++ b/src/main/java/com/yonyou/openapi/event/todo/TodoUpdateEvent.java @@ -1,9 +1,9 @@ package com.yonyou.openapi.event.todo; -import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Sets; import com.yonyou.openapi.base.auth.network.cryptor.EncryptionHolder; import com.yonyou.openapi.base.event.EventListener; +import com.yonyou.openapi.base.utils.JacksonUtils; import com.yonyou.openapi.event.ISVEventExtendDto; import com.yonyou.openapi.event.IsvEventExtendType; import com.yonyou.openapi.service.SSOToYSIndexService; @@ -28,7 +28,6 @@ public class TodoUpdateEvent implements EventListener { @Resource SSOToYSIndexService ssoToYSIndexService; - private ObjectMapper objectMapper = new ObjectMapper(); /** * TODO:在这里写待办的处理逻辑 @@ -40,8 +39,8 @@ public class TodoUpdateEvent implements EventListener { @Override @SneakyThrows public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder){ - Map info = objectMapper.readValue(event.getContent(), Map.class); - Map result = objectMapper.readValue(info.get("value"), Map.class); + Map info = JacksonUtils.toJavaObject(event.getContent(), Map.class); + Map result = JacksonUtils.toJavaObject(info.get("value"), Map.class); log.info("todo id: {}", result.toString()); log.info("todo webUrl: {}", result.get("webUrl")); return true; -- Gitee From a878310a5836f592dd87fdb765ac5a66c54a3e67 Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 8 Apr 2024 20:10:06 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a62b567..6da59ba 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 开放平台客开场景接口调用示例 +# 开放平台客开场景-单点登录调用示例 ## 一、框架介绍 @@ -11,7 +11,8 @@ com/yonyou/openapi │ ├── exception # 异常处理 │ ├── properties # 配置文件 │ ├── response # 接口响应实体 -├── configure # base实现类注入 +├── configure # base实现类注入 +├── event # 事件订阅,业务实现 ├── service # 业务实现可在此包中编写 ``` @@ -44,6 +45,13 @@ com.yonyou.openapi.service.TokenProviderImpl 建议对多数据中心响应的域名地址信息和token做缓存处理, 目前默认使用的是caffeine,您也可以根据需求重新实现该类 +### 2.3 测试用例 + +| **类及方法** | **描述** | +|----------|----------------------------------------------| +| com.yonyou.openapi.sso.SSO_Index_Test.list | 单点登录至工作台首页 | +| com.yonyou.openapi.sso.SSO_URL_Test.ssoUrl | 单点指定页面,常用于待办被集成,三方打开YonBIP/YonSuite审批页面做审批操作 | + -- Gitee From b0f7605a7866e09016993cca16f56aaf35e0728d Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 8 Apr 2024 20:11:08 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6da59ba..eb89e2a 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ com.yonyou.openapi.service.TokenProviderImpl 建议对多数据中心响应的域名地址信息和token做缓存处理, 目前默认使用的是caffeine,您也可以根据需求重新实现该类 -### 2.3 测试用例 +### 2.3、测试用例 | **类及方法** | **描述** | |----------|----------------------------------------------| -- Gitee From 0389e8db8416eb1c7933c12b5596c7862722bc68 Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 8 Apr 2024 21:13:29 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dget=E8=AF=B7=E6=B1=82bu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yonyou/openapi/base/utils/RequestUtil.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/yonyou/openapi/base/utils/RequestUtil.java b/src/main/java/com/yonyou/openapi/base/utils/RequestUtil.java index 5081ef4..2828b6a 100644 --- a/src/main/java/com/yonyou/openapi/base/utils/RequestUtil.java +++ b/src/main/java/com/yonyou/openapi/base/utils/RequestUtil.java @@ -94,7 +94,11 @@ public class RequestUtil { CloseableHttpClient httpClient = getHttpClient(); StringBuilder param = new StringBuilder(); if (paramMap != null) { - param.append("?"); + if(!requestUrl.contains("?")){ + param.append("?"); + }else{ + param.append("&"); + } for(Map.Entry entry: paramMap.entrySet()) { param.append(entry.getKey()); param.append("="); -- Gitee From c18fc0e9a7f9696c53544a03c6cb91ae51769d21 Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 10 Apr 2024 14:49:22 +0800 Subject: [PATCH 15/16] =?UTF-8?q?=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../openapi/base/sso/sso/SingleSignOn.java | 23 +++++++-- .../openapi/sso/SSO_ServiceCode_Test.java | 49 +++++++++++++++++++ .../com/yonyou/openapi/sso/SSO_URL_Test.java | 16 +++--- 3 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 src/test/java/com/yonyou/openapi/sso/SSO_ServiceCode_Test.java diff --git a/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java b/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java index 405b8a2..48adb45 100644 --- a/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java +++ b/src/main/java/com/yonyou/openapi/base/sso/sso/SingleSignOn.java @@ -47,9 +47,18 @@ public class SingleSignOn extends BaseOpenApi { return String.format(open_ys_url,properties.getSsoYhtUrl(),thirdUCId,code,encode(getAccess_tet(),true)); } + /** + * 获取登录到指定页面 --- 根据serviceCode跳转 + * @param entity 第三方用户信息 + * @return 最终实现单点的地址 + */ + public String getSSOUrlToNode(ThirdUserBo entity) throws Exception { + return getString(entity, String.format(getAccess_tet_node(), entity.getServiceCode()), false); + } + /** - * 获取登录到指定页面 + * 获取登录到指定页面 --- url只填写路径,域名信息取对应数据中心 * @param entity 第三方用户信息 * @param url 要跳转的真实地址 * @return 最终实现单点的地址 @@ -60,7 +69,7 @@ public class SingleSignOn extends BaseOpenApi { /** - * 获取登录到指定页面 + * 获取登录到指定页面 ----完整地址 * @param entity 第三方用户信息 * @param url 要跳转的真实地址 * @return 最终实现单点的地址 @@ -71,7 +80,7 @@ public class SingleSignOn extends BaseOpenApi { /** - * 待办被集成 + * 待办被集成 ---- 用于待办被集成,拼接租户ID,避免跳转找不到数据. * @param entity 第三方用户信息 * @param url 要跳转的真实地址 * @return 最终实现单点的地址 @@ -97,6 +106,14 @@ public class SingleSignOn extends BaseOpenApi { return getBaseUrl()+ "/login"; } + /** + * 单点至指定节点 + * @return String 目标路径 + */ + private String getAccess_tet_node() { + return getBaseUrl()+ "/?effect=headless#/service/%s"; + } + /** * 获取免登code diff --git a/src/test/java/com/yonyou/openapi/sso/SSO_ServiceCode_Test.java b/src/test/java/com/yonyou/openapi/sso/SSO_ServiceCode_Test.java new file mode 100644 index 0000000..bd1ccca --- /dev/null +++ b/src/test/java/com/yonyou/openapi/sso/SSO_ServiceCode_Test.java @@ -0,0 +1,49 @@ +package com.yonyou.openapi.sso; + +import com.yonyou.openapi.base.sso.pojo.ThirdUserBo; +import com.yonyou.openapi.service.SSOToYSService; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; +import java.io.IOException; + +/** + * @description: 单点登录指定单据 ---根据service_code单点登录至指定页面 + * @author: nishch + * @create: 2021-07-06 + **/ +@RunWith(SpringRunner.class) +@SpringBootTest +@Slf4j +public class SSO_ServiceCode_Test { + + @Resource + SSOToYSService ssoToYSService; + + + @Test + public void ssoNode() throws Exception { + ThirdUserBo thirdUserBo = new ThirdUserBo("i49syz6m","200043","nscer1","nsc1","pc_product",null,null); + String ssoUrl = ssoToYSService.getSSOUrlToNode(thirdUserBo); + log.info("最终单点登录地址:"+ssoUrl); + openExplorer(ssoUrl); + } + + + /** + * 打开浏览器,方便调试使用 + * @param url 最终的单点登录地址 + */ + public static void openExplorer(String url){ + try { + Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java b/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java index ccfa3c1..2726c73 100644 --- a/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java +++ b/src/test/java/com/yonyou/openapi/sso/SSO_URL_Test.java @@ -11,7 +11,7 @@ import javax.annotation.Resource; import java.io.IOException; /** - * @description: 单点登录指定单据 + * @description: 单点登录指定单据 ---根据url单点指定页面 * @author: nishch * @create: 2021-07-06 **/ @@ -23,6 +23,13 @@ public class SSO_URL_Test{ @Resource SSOToYSService ssoToYSService; + + @Test + public void ssoUrl(){ + String ssoUrl = ssoToYSService.ssoUrl("wupb","https://c3.yonyoucloud.com/mdf-node/meta/voucher/sact_salescontract/1853650986270195713?domainKey=sact&businessStepCode=&tenantId=osy0gmcg&apptype=mdf&serviceCode=salescontractlist&taskId=5851899f-7a13-11ee-9312-26ce4027b229&from_mc_workflow=1&from_service=iuap-apcom-messagecenter&url_actual_build_source=iuap-apcom-messageplatform"); + log.info("最终单点登录地址:"+ssoUrl); + } + /** * 单点至凭证列表页面 * 注意:凭证的列表和卡片是分别两个页面,新增、联查、打印等等对应打开新页面的按钮点击均无效 @@ -58,13 +65,6 @@ public class SSO_URL_Test{ } - @Test - public void ssoUrl(){ - String ssoUrl = ssoToYSService.ssoUrl("wupb","https://c3.yonyoucloud.com/mdf-node/meta/voucher/sact_salescontract/1853650986270195713?domainKey=sact&businessStepCode=&tenantId=osy0gmcg&apptype=mdf&serviceCode=salescontractlist&taskId=5851899f-7a13-11ee-9312-26ce4027b229&from_mc_workflow=1&from_service=iuap-apcom-messagecenter&url_actual_build_source=iuap-apcom-messageplatform"); - log.info("最终单点登录地址:"+ssoUrl); - } - - /** * 打开浏览器,方便调试使用 -- Gitee From c8eafef495d220d3d80a33068bd1f1e7e3ee1294 Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 10 Apr 2024 14:51:34 +0800 Subject: [PATCH 16/16] =?UTF-8?q?=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index eb89e2a..63d9478 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ com.yonyou.openapi.service.TokenProviderImpl |----------|----------------------------------------------| | com.yonyou.openapi.sso.SSO_Index_Test.list | 单点登录至工作台首页 | | com.yonyou.openapi.sso.SSO_URL_Test.ssoUrl | 单点指定页面,常用于待办被集成,三方打开YonBIP/YonSuite审批页面做审批操作 | +| com.yonyou.openapi.sso.SSO_ServiceCode_Test.ssoNode | 单点指定页面,根据serviceCode单点指定页面,适用于平台统一框架的页面 | -- Gitee