pioneer
2 years ago
commit
0b97edb9ab
10 changed files with 673 additions and 0 deletions
@ -0,0 +1,6 @@
|
||||
# open-JSD-10114 |
||||
|
||||
JSD-10114 对接客户系统OA推送\ |
||||
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 |
Binary file not shown.
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin> |
||||
<id>com.fr.plugin.third.party.jsdbabbe</id> |
||||
<name><![CDATA[消息待办推送_EK]]></name> |
||||
<active>yes</active> |
||||
<version>1.0.7</version> |
||||
<env-version>10.0</env-version> |
||||
<jartime>2019-01-01</jartime> |
||||
<vendor>FR.OPEN</vendor> |
||||
<description><![CDATA[]]></description> |
||||
<change-notes><![CDATA[ |
||||
[2022-07-18]JSD-10114插件初始化<br/> |
||||
]]></change-notes> |
||||
<lifecycle-monitor class="com.fr.plugin.third.party.jsdbabbe.OutputPluginLifecycleMonitor"/> |
||||
<extra-core> |
||||
</extra-core> |
||||
<extra-decision> |
||||
<HttpHandlerProvider class="com.fr.plugin.third.party.jsdbabbe.http.CustomHttpHandlerProvider"/> |
||||
<URLAliasProvider class="com.fr.plugin.third.party.jsdbabbe.http.CustomURLAliasProvider"/> |
||||
</extra-decision> |
||||
<function-recorder class="com.fr.plugin.third.party.jsdbabbe.OutputPluginLifecycleMonitor"/> |
||||
</plugin> |
@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
|
||||
<parent> |
||||
<groupId>com.fr.plugin</groupId> |
||||
<artifactId>starter</artifactId> |
||||
<version>10.0</version> |
||||
</parent> |
||||
<packaging>jar</packaging> |
||||
<artifactId>plugin-jsd-10114</artifactId> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>com.fanruan.api</groupId> |
||||
<artifactId>finekit</artifactId> |
||||
<version>10.0</version> |
||||
<scope>system</scope> |
||||
<systemPath>${project.basedir}/lib/finekit-10.0.jar</systemPath> |
||||
</dependency> |
||||
</dependencies> |
||||
<properties> |
||||
<!---如果要更改调试插件,改这里的配置就可以了--> |
||||
<plugin-path> |
||||
${project.basedir}/../webroot/WEB-INF/plugins/plugin-com.fr.plugin.third.party.jsdbabbe-1.0 |
||||
</plugin-path> |
||||
</properties> |
||||
<build> |
||||
<outputDirectory>${plugin-path}/classes</outputDirectory> |
||||
<resources> |
||||
<resource> |
||||
<targetPath>${plugin-path}</targetPath> |
||||
<directory>${project.basedir}</directory> |
||||
<includes> |
||||
<include>plugin.xml</include> |
||||
</includes> |
||||
</resource> |
||||
<resource> |
||||
<targetPath>${plugin-path}</targetPath> |
||||
<directory>${project.basedir}/lib</directory> |
||||
<includes> |
||||
<include>*.jar</include> |
||||
<include>*.dll</include> |
||||
</includes> |
||||
</resource> |
||||
</resources> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-compiler-plugin</artifactId> |
||||
<configuration> |
||||
<source>8</source> |
||||
<target>8</target> |
||||
</configuration> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
</project> |
@ -0,0 +1,27 @@
|
||||
package com.fr.plugin.third.party.jsdbabbe; |
||||
|
||||
import com.fr.intelli.record.Focus; |
||||
import com.fr.intelli.record.Original; |
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||
import com.fr.plugin.third.party.jsdbabbe.config.CustomDataConfig; |
||||
import com.fr.record.analyzer.EnableMetrics; |
||||
import com.fr.stable.fun.Authorize; |
||||
|
||||
|
||||
/** |
||||
* 配置信息初始化 |
||||
*/ |
||||
@EnableMetrics |
||||
@Authorize(callSignKey = "com.fr.plugin.third.party.jsdbabbe") |
||||
public class OutputPluginLifecycleMonitor extends AbstractPluginLifecycleMonitor { |
||||
@Override |
||||
@Focus(id = "com.fr.plugin.third.party.jsdbabbe", text = "plugin-jsdbabbe", source = Original.PLUGIN) |
||||
public void afterRun(PluginContext pluginContext) { |
||||
CustomDataConfig.getInstance(); |
||||
} |
||||
|
||||
@Override |
||||
public void beforeStop(PluginContext pluginContext) { |
||||
} |
||||
} |
@ -0,0 +1,342 @@
|
||||
package com.fr.plugin.third.party.jsdbabbe; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.decision.authority.data.User; |
||||
import com.fr.decision.webservice.bean.user.UserBean; |
||||
import com.fr.decision.webservice.bean.user.UserUpdateBean; |
||||
import com.fr.decision.webservice.impl.user.UserPageQueryAuthorityParam; |
||||
import com.fr.decision.webservice.utils.ControllerFactory; |
||||
import com.fr.decision.webservice.utils.controller.UserController; |
||||
import com.fr.decision.webservice.v10.user.UserService; |
||||
import com.fr.plugin.third.party.jsdbabbe.config.CustomDataConfig; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.query.data.DataList; |
||||
import com.fr.stable.query.restriction.Restriction; |
||||
import com.fr.third.org.apache.http.HttpEntity; |
||||
import com.fr.third.org.apache.http.HttpStatus; |
||||
import com.fr.third.org.apache.http.client.config.RequestConfig; |
||||
import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; |
||||
import com.fr.third.org.apache.http.client.methods.HttpGet; |
||||
import com.fr.third.org.apache.http.client.methods.HttpPost; |
||||
import com.fr.third.org.apache.http.conn.ssl.NoopHostnameVerifier; |
||||
import com.fr.third.org.apache.http.conn.ssl.SSLConnectionSocketFactory; |
||||
import com.fr.third.org.apache.http.entity.StringEntity; |
||||
import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; |
||||
import com.fr.third.org.apache.http.impl.client.HttpClients; |
||||
import com.fr.third.org.apache.http.ssl.SSLContextBuilder; |
||||
import com.fr.third.org.apache.http.ssl.TrustStrategy; |
||||
import com.fr.third.org.apache.http.util.EntityUtils; |
||||
|
||||
import javax.net.ssl.HostnameVerifier; |
||||
import javax.net.ssl.SSLContext; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.IOException; |
||||
import java.security.cert.CertificateException; |
||||
import java.security.cert.X509Certificate; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.UUID; |
||||
|
||||
public class Utils { |
||||
public static String DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"; |
||||
public static RequestConfig REQUEST_CONFIG = RequestConfig.custom() |
||||
.setConnectionRequestTimeout(30000) |
||||
.setSocketTimeout(30000) // 服务端相应超时
|
||||
.setConnectTimeout(30000) // 建立socket链接超时时间
|
||||
.build(); |
||||
|
||||
public static CloseableHttpClient createSslHttpClient() { |
||||
try { |
||||
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { |
||||
|
||||
@Override |
||||
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
||||
return true; |
||||
} |
||||
}).build(); |
||||
HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; |
||||
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); |
||||
return HttpClients.custom() |
||||
.setSSLSocketFactory(sslsf) |
||||
.build(); |
||||
} catch (Exception e) { |
||||
LogKit.error(e.getMessage(), e); |
||||
} |
||||
return HttpClients.createDefault(); |
||||
} |
||||
|
||||
public static CloseableHttpClient createDefaultHttpClient() { |
||||
CloseableHttpClient httpClient = HttpClients.custom() |
||||
.build(); |
||||
return httpClient; |
||||
} |
||||
|
||||
public static synchronized CloseableHttpClient createHttpClient(String url) { |
||||
CloseableHttpClient httpClient = null; |
||||
if (StringKit.isEmpty(url)) { |
||||
httpClient = createDefaultHttpClient(); |
||||
return httpClient; |
||||
} |
||||
|
||||
if (url.startsWith("https://")) { |
||||
httpClient = createSslHttpClient(); |
||||
return httpClient; |
||||
} |
||||
httpClient = createDefaultHttpClient(); |
||||
return httpClient; |
||||
} |
||||
|
||||
public static synchronized String createHttpGetContent(CloseableHttpClient httpClient, String url, String basicAuth) throws IOException { |
||||
if ((httpClient == null) || (StringKit.isEmpty(url))) { |
||||
return ""; |
||||
} |
||||
|
||||
HttpGet httpGet = new HttpGet(url); |
||||
httpGet.addHeader("User-Agent", Utils.DEFAULT_USER_AGENT); |
||||
if (StringKit.isNotEmpty(basicAuth)) { |
||||
httpGet.addHeader("Authorization", basicAuth); |
||||
} |
||||
|
||||
httpGet.setConfig(Utils.REQUEST_CONFIG); |
||||
CloseableHttpResponse response = httpClient.execute(httpGet); |
||||
int statusCode = response.getStatusLine().getStatusCode(); |
||||
if (statusCode != HttpStatus.SC_OK) { |
||||
response.close(); |
||||
LogKit.info("http请求出错,http status:" + statusCode); |
||||
return ""; |
||||
} |
||||
|
||||
HttpEntity httpEntity = response.getEntity(); |
||||
if (httpEntity == null) { |
||||
response.close(); |
||||
LogKit.info("http请求出错,http响应内容为空"); |
||||
return ""; |
||||
} |
||||
String responseContent = EntityUtils.toString(httpEntity, "UTF-8"); |
||||
response.close(); |
||||
if (StringKit.isEmpty(responseContent)) { |
||||
LogKit.info("http请求出错,http响应内容为空1"); |
||||
return ""; |
||||
} |
||||
return responseContent; |
||||
} |
||||
|
||||
public static synchronized String createHttpPostContent(CloseableHttpClient httpClient, String url, String bodyContent, String basicAuth, String contentType, Map<String, String> headers) throws IOException { |
||||
if ((httpClient == null) || (StringKit.isEmpty(url))) { |
||||
return ""; |
||||
} |
||||
|
||||
HttpPost httpPost = new HttpPost(url); |
||||
httpPost.addHeader("User-Agent", Utils.DEFAULT_USER_AGENT); |
||||
httpPost.setConfig(Utils.REQUEST_CONFIG); |
||||
if (StringKit.isNotEmpty(basicAuth)) { |
||||
httpPost.addHeader("Authorization", basicAuth); |
||||
} |
||||
if ((headers != null) && (headers.size() >= 1)) { |
||||
for (Map.Entry<String,String> entry: headers.entrySet()) { |
||||
httpPost.addHeader(entry.getKey(), entry.getValue()); |
||||
} |
||||
} |
||||
|
||||
if (StringKit.isNotEmpty(contentType)) { |
||||
httpPost.addHeader("Content-Type", contentType); |
||||
} |
||||
StringEntity bodyEntity = new StringEntity(bodyContent, "UTF-8"); |
||||
httpPost.setEntity(bodyEntity); |
||||
CloseableHttpResponse response = httpClient.execute(httpPost); |
||||
int statusCode = response.getStatusLine().getStatusCode(); |
||||
if (statusCode != HttpStatus.SC_OK) { |
||||
response.close(); |
||||
LogKit.info("http请求出错,http status:" + statusCode); |
||||
return ""; |
||||
} |
||||
|
||||
HttpEntity httpEntity = response.getEntity(); |
||||
if (httpEntity == null) { |
||||
response.close(); |
||||
LogKit.info("http请求出错,http响应内容为空"); |
||||
return ""; |
||||
} |
||||
String responseContent = EntityUtils.toString(httpEntity, "UTF-8"); |
||||
response.close(); |
||||
if (StringKit.isEmpty(responseContent)) { |
||||
LogKit.info("http请求出错,http响应内容为空1"); |
||||
return ""; |
||||
} |
||||
return responseContent; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 获取完整请求链接 |
||||
* |
||||
* @param req 请求 |
||||
* @return |
||||
*/ |
||||
public static String getFullRequestUrl(HttpServletRequest req) { |
||||
if (req == null) { |
||||
return ""; |
||||
} |
||||
String url = req.getRequestURL().toString(); |
||||
String queryUrl = req.getQueryString(); |
||||
if ((queryUrl == null) || "null".equalsIgnoreCase(queryUrl)) { |
||||
queryUrl = ""; |
||||
} else { |
||||
queryUrl = "?" + queryUrl; |
||||
} |
||||
String fullUrl = url + queryUrl; |
||||
return fullUrl; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 重定向 |
||||
* |
||||
* @param res |
||||
* @param url |
||||
*/ |
||||
public static void sendRedirect(HttpServletResponse res, String url) { |
||||
if ((res == null) || (StringKit.isEmpty(url))) { |
||||
return; |
||||
} |
||||
res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); |
||||
res.setHeader("Location", url); |
||||
} |
||||
|
||||
|
||||
public static synchronized String getUuid() { |
||||
String uuid = UUID.randomUUID().toString().replace("-", ""); |
||||
return uuid; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 获取用户信息 |
||||
* |
||||
* @param userCount 用户数,-1为不限制用户数 |
||||
* @param isAdminContained 是否包含管理员用户 |
||||
* @return |
||||
* @throws Exception |
||||
*/ |
||||
public static List<UserBean> getAllUsers(int userCount, boolean isAdminContained) throws Exception { |
||||
List<UserBean> userBeans = new ArrayList<>(); |
||||
if (userCount == 0) { |
||||
return userBeans; |
||||
} |
||||
int limitCount = userCount; |
||||
if (userCount <= -1) { |
||||
limitCount = Integer.MAX_VALUE; |
||||
} |
||||
List<String> adminUserIds = UserService.getInstance().getAdminUserIdList(); |
||||
if ((adminUserIds == null) || (adminUserIds.size() <= 0)) { |
||||
return userBeans; |
||||
} |
||||
String adminUserId = adminUserIds.get(0); |
||||
|
||||
UserController userController = ControllerFactory.getInstance().getUserController(adminUserId); |
||||
|
||||
DataList dataList = userController.findPageUsersPerfectMatch(adminUserId, new UserPageQueryAuthorityParam(1, limitCount, "", null), new Restriction[0]); |
||||
if (dataList == null) { |
||||
return userBeans; |
||||
} |
||||
List users = dataList.getList(); |
||||
if ((users == null) || (users.size() <= 0)) { |
||||
return userBeans; |
||||
} |
||||
User user; |
||||
UserBean userBean; |
||||
String userId; |
||||
for (int i = 0, max = users.size() - 1; i <= max; i++) { |
||||
user = (User) users.get(i); |
||||
userId = user.getId(); |
||||
if ((!isAdminContained) && (adminUserIds.contains(userId))) { |
||||
continue; |
||||
} |
||||
userBean = new UserBean(user.getEmail(), user.isEnable(), user.getMobile(), user.getRealName(), user.getUserName(), user.getId()); |
||||
userBean.setCreationType(user.getCreationType().toInteger()); |
||||
userBeans.add(userBean); |
||||
} |
||||
return userBeans; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 获取不包含管理员的用户信息 |
||||
* |
||||
* @param userCount |
||||
* @return |
||||
* @throws Exception |
||||
*/ |
||||
public static List<UserBean> getAllUsersWithoutAdmin(int userCount) throws Exception { |
||||
return getAllUsers(userCount, false); |
||||
} |
||||
|
||||
public static List<String> getAllUserNames(int userCount, boolean isAdminContained) throws Exception { |
||||
List<String> userNames = new ArrayList<>(); |
||||
List<UserBean> userBeans = getAllUsers(userCount, isAdminContained); |
||||
UserBean userBean; |
||||
for (int i = 0, max = userBeans.size() - 1; i <= max; i++) { |
||||
userBean = userBeans.get(i); |
||||
userNames.add(userBean.getUsername()); |
||||
} |
||||
return userNames; |
||||
} |
||||
|
||||
public static List<String> getAllUserNamesWithoutAdmin(int userCount) throws Exception { |
||||
return getAllUserNames(userCount, false); |
||||
} |
||||
|
||||
/** |
||||
* 通过用户名删除用户,管理员用户无法删除 |
||||
* |
||||
* @param username 用户名 |
||||
* @return |
||||
* @throws Exception |
||||
*/ |
||||
public static int deleteUsersByUsername(String username) throws Exception { |
||||
if (StringUtils.isEmpty(username)) { |
||||
return 0; |
||||
} |
||||
User user = UserService.getInstance().getUserByUserName(username); |
||||
if (user == null) { |
||||
return 0; |
||||
} |
||||
String userId = user.getId(); |
||||
List<String> adminUserIds = UserService.getInstance().getAdminUserIdList(); |
||||
if ((adminUserIds != null) && (adminUserIds.size() >= 1) && (adminUserIds.contains(userId))) { |
||||
return 0; |
||||
} |
||||
UserUpdateBean userUpdateBean = new UserUpdateBean(); |
||||
userUpdateBean.setRemoveUserIds(new String[]{userId}); |
||||
return UserService.getInstance().deleteUsers(userUpdateBean); |
||||
} |
||||
|
||||
public static int deleteUsersByUsernames(List<String> usernames) throws Exception { |
||||
if ((usernames == null) || (usernames.size() <= 0)) { |
||||
return 0; |
||||
} |
||||
String username; |
||||
int totalCount = 0, count; |
||||
for (int i = 0, max = usernames.size() - 1; i <= max; i++) { |
||||
username = usernames.get(i); |
||||
count = deleteUsersByUsername(username); |
||||
totalCount = totalCount + count; |
||||
} |
||||
return totalCount; |
||||
} |
||||
|
||||
public static void editRealNameByUsername(String username, String realName) throws Exception { |
||||
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(realName)) { |
||||
return; |
||||
} |
||||
User user = UserService.getInstance().getUserByUserName(username); |
||||
if (user == null) { |
||||
return; |
||||
} |
||||
UserBean userBean = new UserBean(user.getEmail(), user.isEnable(), user.getMobile(), realName, user.getUserName(), user.getId()); |
||||
UserService.getInstance().editAccount(username, userBean); |
||||
} |
||||
} |
@ -0,0 +1,71 @@
|
||||
package com.fr.plugin.third.party.jsdbabbe.config; |
||||
|
||||
import com.fr.config.*; |
||||
import com.fr.config.holder.Conf; |
||||
import com.fr.config.holder.factory.Holders; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* 配置数据保存 |
||||
*/ |
||||
@Visualization(category = "消息待办推送") |
||||
public class CustomDataConfig extends DefaultConfiguration { |
||||
public String getNameSpace() { |
||||
return this.getClass().getName(); |
||||
} |
||||
|
||||
private static volatile CustomDataConfig config = null; |
||||
|
||||
public static CustomDataConfig getInstance() { |
||||
if (config == null) { |
||||
config = ConfigContext.getConfigInstance(CustomDataConfig.class); |
||||
} |
||||
return config; |
||||
} |
||||
|
||||
|
||||
|
||||
@Identifier(value = "key", name = "key", description = "", status = Status.SHOW) |
||||
private Conf<String> key = Holders.simple(""); |
||||
|
||||
@Identifier(value = "username", name = "用户名(username)", description = "", status = Status.SHOW) |
||||
private Conf<String> username = Holders.simple(""); |
||||
|
||||
@Identifier(value = "password", name = "密码(password)", description = "", status = Status.SHOW) |
||||
private Conf<String> password = Holders.simple(""); |
||||
|
||||
public String getKey() { |
||||
return key.get(); |
||||
} |
||||
|
||||
public void setKey(String key) { |
||||
this.key.set(key); |
||||
} |
||||
|
||||
public String getUsername() { |
||||
return username.get(); |
||||
} |
||||
|
||||
public void setUsername(String username) { |
||||
this.username.set(username); |
||||
} |
||||
|
||||
public String getPassword() { |
||||
return password.get(); |
||||
} |
||||
|
||||
public void setPassword(String password) { |
||||
this.password.set(password); |
||||
} |
||||
|
||||
@Override |
||||
public Object clone() throws CloneNotSupportedException { |
||||
CustomDataConfig cloned = (CustomDataConfig) super.clone(); |
||||
cloned.key = (Conf<String>) key.clone(); |
||||
cloned.username = (Conf<String>) username.clone(); |
||||
cloned.password = (Conf<String>) password.clone(); |
||||
return cloned; |
||||
} |
||||
} |
@ -0,0 +1,117 @@
|
||||
package com.fr.plugin.third.party.jsdbabbe.http; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||
import com.fr.general.IOUtils; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.plugin.third.party.jsdbabbe.Utils; |
||||
import com.fr.plugin.third.party.jsdbabbe.config.CustomDataConfig; |
||||
import com.fr.third.org.apache.commons.codec.digest.DigestUtils; |
||||
import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||
import com.fr.web.utils.WebUtils; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.IOException; |
||||
import java.nio.charset.StandardCharsets; |
||||
import java.util.Base64; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import java.util.UUID; |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
public class CustomConfigHttpHandler extends BaseHttpHandler { |
||||
|
||||
@Override |
||||
public RequestMethod getMethod() { |
||||
return RequestMethod.POST; |
||||
} |
||||
|
||||
@Override |
||||
public String getPath() { |
||||
return "/jsdbabbe/push/message"; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isPublic() { |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||
res.setContentType("application/json; charset=utf-8"); |
||||
String reqContent = IOUtils.inputStream2String(req.getInputStream()); |
||||
if (StringKit.isEmpty(reqContent)) { |
||||
LogKit.error("消息待办推送流程:请求内容为空"); |
||||
WebUtils.printAsJSON(res, getFailureJson("请求内容为空")); |
||||
return; |
||||
} |
||||
|
||||
String url = req.getHeader("Process-Url"); |
||||
if (StringKit.isEmpty(url)) { |
||||
url = WebUtils.getHTTPRequestParameter(req, "process_url"); |
||||
} |
||||
if (StringKit.isEmpty(url)) { |
||||
LogKit.error("消息待办推送流程:流程地址为空"); |
||||
WebUtils.printAsJSON(res, getFailureJson("流程地址为空")); |
||||
return; |
||||
} |
||||
LogKit.info("消息待办推送流程地址:" + url + "\n请求内容:\n" + reqContent); |
||||
String resContent = pushMessage(url, reqContent); |
||||
if (StringKit.isEmpty(reqContent)) { |
||||
WebUtils.printAsJSON(res, getFailureJson("请求内容出错")); |
||||
return; |
||||
} |
||||
WebUtils.printAsJSON(res, getResultJson("success", resContent)); |
||||
} |
||||
|
||||
private String pushMessage(String url, String reqContent) throws IOException { |
||||
//reqContent = handleStr(reqContent);
|
||||
CloseableHttpClient httpclient = Utils.createHttpClient(url); |
||||
Base64.Encoder encoder = Base64.getEncoder(); |
||||
String auth = CustomDataConfig.getInstance().getUsername() + ":" + CustomDataConfig.getInstance().getPassword(); |
||||
String basicAuth = "Basic " + (encoder.encodeToString(auth.getBytes(StandardCharsets.UTF_8))); |
||||
Map<String, String> headers = new HashMap<>(); |
||||
headers.put("key", CustomDataConfig.getInstance().getKey()); |
||||
LogKit.info("消息待办推送发起流程验证内容:\n" + headers); |
||||
String result = Utils.createHttpPostContent(httpclient, url, reqContent, basicAuth, "application/json; charset=utf-8", headers); |
||||
return result; |
||||
} |
||||
|
||||
|
||||
private JSONObject getSuccessJson() { |
||||
JSONObject json = getResultJson("success", ""); |
||||
return json; |
||||
} |
||||
|
||||
private JSONObject getFailureJson(String content) { |
||||
JSONObject json = getResultJson("failure", content); |
||||
return json; |
||||
} |
||||
|
||||
private JSONObject getResultJson(String status, String content) { |
||||
JSONObject json = new JSONObject(); |
||||
json.put("status", status); |
||||
json.put("content", new JSONObject(content)); |
||||
return json; |
||||
} |
||||
|
||||
|
||||
private String handleStr(String value) { |
||||
if (StringKit.isEmpty(value)) { |
||||
return ""; |
||||
} |
||||
String result = value; |
||||
result = result.trim(); |
||||
result = result.replaceAll("\n", ""); |
||||
result = result.replaceAll("\r", ""); |
||||
result = result.trim(); |
||||
return result; |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,16 @@
|
||||
package com.fr.plugin.third.party.jsdbabbe.http; |
||||
|
||||
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||
|
||||
|
||||
public class CustomHttpHandlerProvider extends AbstractHttpHandlerProvider { |
||||
@Override |
||||
public BaseHttpHandler[] registerHandlers() { |
||||
return new BaseHttpHandler[]{ |
||||
new CustomConfigHttpHandler(), |
||||
|
||||
|
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,14 @@
|
||||
package com.fr.plugin.third.party.jsdbabbe.http; |
||||
|
||||
import com.fr.decision.fun.impl.AbstractURLAliasProvider; |
||||
import com.fr.decision.webservice.url.alias.URLAlias; |
||||
import com.fr.decision.webservice.url.alias.URLAliasFactory; |
||||
|
||||
public class CustomURLAliasProvider extends AbstractURLAliasProvider { |
||||
@Override |
||||
public URLAlias[] registerAlias() { |
||||
return new URLAlias[]{ |
||||
URLAliasFactory.createPluginAlias("/jsdbabbe/push/message", "/jsdbabbe/push/message", true), |
||||
}; |
||||
} |
||||
} |
Loading…
Reference in new issue