LAPTOP-SB56SG4Q\86185
3 years ago
11 changed files with 1143 additions and 1 deletions
@ -1,3 +1,6 @@
|
||||
# open-JSD-8997 |
||||
|
||||
JSD-8997 根据参数或其他请求条件控制决策平台的报表目录展现 |
||||
JSD-8997 根据参数或其他请求条件控制决策平台的报表目录展现\ |
||||
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。 |
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<plugin> |
||||
<id>com.fr.plugin.xxxx.xxxx.menu</id> |
||||
<main-package>com.fr.plugin.xxxx.xxxx.menu</main-package> |
||||
<name><![CDATA[决策平台菜单过滤]]></name> |
||||
<active>yes</active> |
||||
<version>1.18</version> |
||||
<env-version>10.0</env-version> |
||||
<jartime>2018-07-31</jartime> |
||||
<vendor>fr.open</vendor> |
||||
<description><![CDATA[决策平台菜单过滤]]></description> |
||||
<change-notes><![CDATA[ |
||||
[2021-11-10]【1.0】初始化插件。<br/> |
||||
[2021-11-13]【1.1】过滤逻辑修改。<br/> |
||||
[2021-11-13]【1.2】增加一个报表。<br/> |
||||
[2021-11-13]【1.3】增加登出调用。<br/> |
||||
[2021-11-15]【1.4】增加保存日志拦截。<br/> |
||||
[2021-11-18]【1.5】修改日志注入机制。<br/> |
||||
[2021-11-19]【1.6】增加导出日志注入。<br/> |
||||
[2021-11-21]【1.7】增加导出日志类型转换。<br/> |
||||
[2021-11-21]【1.8】增加导出日志result类型转换。<br/> |
||||
[2021-11-21]【1.9】打印导出日志。<br/> |
||||
[2021-11-23]【1.10】日志推送逻辑修改。<br/> |
||||
[2021-11-26]【1.11】增加特定报表隐藏。<br/> |
||||
[2021-11-29]【1.12】增加日志详细输出和隐藏根目录菜单。<br/> |
||||
[2021-11-29]【1.13】自定义报表和定制报表不隐藏。<br/> |
||||
[2021-11-29]【1.14】自定义报表和定制报表不隐藏。<br/> |
||||
[2021-11-30]【1.15】指定范围报表目录隐藏。<br/> |
||||
[2021-11-30]【1.16】问题修改。<br/> |
||||
[2021-11-30]【1.17】问题修改。<br/> |
||||
[2021-11-30]【1.18】问题修改。<br/> |
||||
]]></change-notes> |
||||
<lifecycle-monitor class="com.fr.plugin.xxxx.xxxx.menu.PluginLifecycleMonitor"/> |
||||
<extra-decision> |
||||
<LogInOutEventProvider class="com.fr.plugin.xxxx.xxxx.menu.CustomLogInOutEventProvider"/> |
||||
<GlobalRequestFilterProvider class="com.fr.plugin.xxxx.xxxx.menu.GlobalFilter"/> |
||||
</extra-decision> |
||||
<function-recorder class="com.fr.plugin.xxxx.xxxx.menu.GlobalFilter"/> |
||||
</plugin> |
@ -0,0 +1,9 @@
|
||||
package com.fr.plugin.xxxx.xxxx.menu; |
||||
|
||||
/** |
||||
* @author fr.open |
||||
* @date 2020/5/14 |
||||
*/ |
||||
public class Constants { |
||||
public static final String PLUGIN_ID = "com.fr.plugin.xxxx.xxxx.menu"; |
||||
} |
@ -0,0 +1,18 @@
|
||||
package com.fr.plugin.xxxx.xxxx.menu; |
||||
|
||||
import com.fr.decision.fun.impl.AbstractLogInOutEventProvider; |
||||
import com.fr.decision.webservice.login.LogInOutResultInfo; |
||||
import com.fr.general.PropertiesUtils; |
||||
|
||||
/** |
||||
* @Author fr.open |
||||
* @Date 2020/11/13 |
||||
* @Description |
||||
**/ |
||||
public class CustomLogInOutEventProvider extends AbstractLogInOutEventProvider { |
||||
@Override |
||||
public String logoutAction(LogInOutResultInfo result) { |
||||
return PropertiesUtils.getProperties("sso").getProperty("logout"); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,228 @@
|
||||
package com.fr.plugin.xxxx.xxxx.menu; |
||||
|
||||
import com.fr.base.PropertiesUtils; |
||||
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||
import com.fr.decision.webservice.v10.config.ConfigService; |
||||
import com.fr.intelli.record.Focus; |
||||
import com.fr.intelli.record.MetricRegistry; |
||||
import com.fr.intelli.record.Original; |
||||
import com.fr.json.JSONArray; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.plugin.context.PluginContexts; |
||||
import com.fr.plugin.xxxx.xxxx.menu.log.MyLogCacheMetric; |
||||
import com.fr.plugin.xxxx.xxxx.menu.util.HttpUtil; |
||||
import com.fr.plugin.xxxx.xxxx.menu.util.TokenFactory; |
||||
import com.fr.plugin.transform.FunctionRecorder; |
||||
import com.fr.record.analyzer.EnableMetrics; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.fun.Authorize; |
||||
|
||||
import javax.servlet.FilterChain; |
||||
import javax.servlet.FilterConfig; |
||||
import javax.servlet.ServletException; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.*; |
||||
import java.nio.charset.StandardCharsets; |
||||
import java.util.HashMap; |
||||
import java.util.HashSet; |
||||
import java.util.Map; |
||||
import java.util.Set; |
||||
import java.util.stream.Stream; |
||||
|
||||
/** |
||||
* @Author fr.open |
||||
* @Date 2021/10/29 |
||||
* @Description |
||||
**/ |
||||
@FunctionRecorder |
||||
@Authorize(callSignKey = Constants.PLUGIN_ID) |
||||
@EnableMetrics |
||||
public class GlobalFilter extends AbstractGlobalRequestFilterProvider { |
||||
|
||||
private static final String MENU_URI = "/rest/openapi/security/v3/system/service-capability"; |
||||
|
||||
private static final Map<String, String> REAL_MAP; |
||||
|
||||
private MyLogCacheMetric cacheMetric = new MyLogCacheMetric(); |
||||
|
||||
static { |
||||
REAL_MAP = new HashMap<>(); |
||||
REAL_MAP.put("AXXX", "capacity|asset"); |
||||
REAL_MAP.put("XXXX", "capacity|asset"); |
||||
REAL_MAP.put("XXXX", "capacity|asset"); |
||||
REAL_MAP.put("XXXX", "capacity|asset"); |
||||
REAL_MAP.put("XXXX", "capacity|asset"); |
||||
REAL_MAP.put("XXXX", "capacity|asset"); |
||||
REAL_MAP.put("XXXX", "capacity|asset"); |
||||
REAL_MAP.put("XXXX", "capacity|asset"); |
||||
REAL_MAP.put("XXXX", "capacity|asset"); |
||||
REAL_MAP.put("XXXX", "capacity,asset"); |
||||
REAL_MAP.put("XXXX", "capacity|asset"); |
||||
} |
||||
|
||||
private static final String[] menu = new String[]{"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX"}; |
||||
|
||||
@Override |
||||
public void init(FilterConfig filterConfig) { |
||||
super.init(filterConfig); |
||||
MetricRegistry.register(cacheMetric); |
||||
} |
||||
|
||||
@Override |
||||
public String filterName() { |
||||
return "global"; |
||||
} |
||||
|
||||
@Override |
||||
@Focus(id = Constants.PLUGIN_ID, text = "XXXX权限过滤", source = Original.PLUGIN) |
||||
public String[] urlPatterns() { |
||||
if (PluginContexts.currentContext().isAvailable()) { |
||||
String servletPathName = "decision"; |
||||
try { |
||||
servletPathName = ConfigService.getInstance().getBasicParam().getServletPathName(); |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
return new String[]{ |
||||
"/" + servletPathName + "/v10/view/entry/tree", |
||||
|
||||
}; |
||||
} else { |
||||
return new String[0]; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { |
||||
try { |
||||
ResponseWrapperImpl responseWrapper = new ResponseWrapperImpl(res); |
||||
filterChain.doFilter(req, responseWrapper); |
||||
byte[] dataStream = responseWrapper.getDataStream(); |
||||
//JSONObject object = new JSONObject(readJsonFile("/Users/hujian/Desktop/1.json"));
|
||||
JSONObject object = new JSONObject(new String(dataStream)); |
||||
JSONArray array = new JSONArray(); |
||||
JSONArray resArray = new JSONArray(); |
||||
JSONObject map = getMenuAuth(); |
||||
Set<String> set = new HashSet(); |
||||
Set<String> level1 = new HashSet<>(); |
||||
Map<String, Integer> children = new HashMap<>(); |
||||
for (int i = 0; i < object.getJSONArray("data").size(); i++) { |
||||
JSONObject data = object.getJSONArray("data").getJSONObject(i); |
||||
String text = data.getString("text"); |
||||
if (StringUtils.equals("decision-directory-root", data.getString("pId")) |
||||
&& Stream.of(menu).anyMatch(text::equals) |
||||
) { |
||||
level1.add(data.getString("id")); |
||||
children.put(data.getString("id"),0); |
||||
} |
||||
if (StringUtils.equals(text, "自定义报表") || StringUtils.equals(text, "定制报表")) { |
||||
set.add(data.getString("id")); |
||||
} |
||||
if (!REAL_MAP.containsKey(text)) { |
||||
array.add(data); |
||||
continue; |
||||
} |
||||
if (checkAuth(REAL_MAP.get(text), map)) { |
||||
array.add(data); |
||||
} |
||||
} |
||||
FineLoggerFactory.getLogger().info("level1 menu is {}",level1); |
||||
FineLoggerFactory.getLogger().info("get filter size is {}", set); |
||||
for (int i = 0; i < array.size(); i++) { |
||||
JSONObject data = array.getJSONObject(i); |
||||
//只处理俩个特定的一级节点
|
||||
if (set.contains(data.getString("pId"))) { |
||||
//只有包含这俩的不处理,其他不展示
|
||||
if ((data.getString("text").endsWith("流程图") || data.getString("text").endsWith("列表"))) { |
||||
resArray.add(data); |
||||
} |
||||
} else { |
||||
//非特定的不做处理
|
||||
resArray.add(data); |
||||
} |
||||
} |
||||
Map<String, JSONObject> dataMap = new HashMap<>(); |
||||
for (int i = 0; i < resArray.size(); i++) { |
||||
JSONObject data = resArray.getJSONObject(i); |
||||
//只处理俩个特定的一级节点
|
||||
if (level1.contains(data.getString("pId"))) { |
||||
Integer count = children.get(data.getString("pId")); |
||||
count = count == null?0:count; |
||||
children.put(data.getString("pId"),count+1); |
||||
} |
||||
dataMap.put(data.getString("id"),data); |
||||
} |
||||
FineLoggerFactory.getLogger().info("children res {}",children); |
||||
children.forEach((k,v) -> { |
||||
if(v == 0){ |
||||
JSONObject remove = dataMap.remove(k); |
||||
FineLoggerFactory.getLogger().info("remove menu is {}",remove.getString("text")); |
||||
} |
||||
}); |
||||
|
||||
FineLoggerFactory.getLogger().info("check auth menu result is {}", dataMap.values()); |
||||
object.put("data", new JSONArray(dataMap.values())); |
||||
res.getOutputStream().write(object.toString().getBytes(StandardCharsets.UTF_8)); |
||||
} catch (IOException e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} catch (ServletException e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
private boolean checkAuth(String text, JSONObject map) { |
||||
if (text.contains("|")) { |
||||
Boolean[] flag = new Boolean[]{false}; |
||||
Stream.of(text.split("\\|")).forEach(e -> flag[0] = flag[0] || map.getBoolean(e)); |
||||
return flag[0]; |
||||
} else if (text.contains(",")) { |
||||
Boolean[] flag = new Boolean[]{true}; |
||||
Stream.of(text.split(",")).forEach(e -> flag[0] = flag[0] && map.getBoolean(e)); |
||||
return flag[0]; |
||||
} |
||||
return map.getBoolean(text); |
||||
|
||||
} |
||||
|
||||
private JSONObject getMenuAuth() { |
||||
String tokenUrl = PropertiesUtils.getProperties("conf").getProperty("tokenUrl"); |
||||
String userid = PropertiesUtils.getProperties("conf").getProperty("userid"); |
||||
String value = PropertiesUtils.getProperties("conf").getProperty("value"); |
||||
String prefix = PropertiesUtils.getProperties("conf").getProperty("prefix"); |
||||
String token = TokenFactory.getToken(tokenUrl, userid, value); |
||||
FineLoggerFactory.getLogger().info("get token is {}", token); |
||||
Map<String, Object> headerMap = new HashMap(); |
||||
headerMap.put("openid", token); |
||||
String res = HttpUtil.sendGet(prefix + MENU_URI, null, headerMap, null); |
||||
FineLoggerFactory.getLogger().info("get menu auth res is {}", res); |
||||
JSONObject object = new JSONObject(res); |
||||
return object.getJSONObject("data"); |
||||
} |
||||
|
||||
public static String readJsonFile(String fileName) { |
||||
String jsonStr = ""; |
||||
try { |
||||
File jsonFile = new File(fileName); |
||||
FileReader fileReader = new FileReader(jsonFile); |
||||
Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8"); |
||||
int ch = 0; |
||||
StringBuffer sb = new StringBuffer(); |
||||
while ((ch = reader.read()) != -1) { |
||||
sb.append((char) ch); |
||||
} |
||||
fileReader.close(); |
||||
reader.close(); |
||||
jsonStr = sb.toString(); |
||||
return jsonStr; |
||||
} catch (IOException e) { |
||||
e.printStackTrace(); |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
/*public static void main(String[] args) { |
||||
new GlobalFilter().doFilter(null,null,null); |
||||
}*/ |
||||
} |
@ -0,0 +1,21 @@
|
||||
package com.fr.plugin.xxxx.xxxx.menu; |
||||
|
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||
|
||||
/** |
||||
* @Author fr.open |
||||
* @Date 2020/9/15 |
||||
* @Description |
||||
**/ |
||||
public class PluginLifecycleMonitor extends AbstractPluginLifecycleMonitor { |
||||
|
||||
@Override |
||||
public void afterRun(PluginContext pluginContext) { |
||||
//MetricRegistry.register(new MyLogCacheMetric());
|
||||
} |
||||
|
||||
@Override |
||||
public void beforeStop(PluginContext pluginContext) { |
||||
} |
||||
} |
@ -0,0 +1,84 @@
|
||||
package com.fr.plugin.xxxx.xxxx.menu; |
||||
|
||||
import javax.servlet.ServletOutputStream; |
||||
import javax.servlet.WriteListener; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import javax.servlet.http.HttpServletResponseWrapper; |
||||
import java.io.ByteArrayOutputStream; |
||||
import java.io.DataOutputStream; |
||||
import java.io.IOException; |
||||
import java.io.OutputStream; |
||||
|
||||
|
||||
/** |
||||
* @author fr.open |
||||
* @Date 2021/8/1 |
||||
*/ |
||||
public class ResponseWrapperImpl extends HttpServletResponseWrapper { |
||||
ByteArrayOutputStream output; |
||||
FilterServletOutputStream filterOutput; |
||||
|
||||
public ResponseWrapperImpl(HttpServletResponse response) { |
||||
super(response); |
||||
output = new ByteArrayOutputStream(); |
||||
} |
||||
|
||||
@Override |
||||
public ServletOutputStream getOutputStream() throws IOException { |
||||
if (filterOutput == null) { |
||||
filterOutput = new FilterServletOutputStream(output); |
||||
} |
||||
return filterOutput; |
||||
} |
||||
|
||||
public void setContent(ByteArrayOutputStream output){ |
||||
this.output = output; |
||||
this.filterOutput = null; |
||||
} |
||||
|
||||
public void clear(){ |
||||
output = new ByteArrayOutputStream(); |
||||
filterOutput = new FilterServletOutputStream(output); |
||||
} |
||||
public ByteArrayOutputStream getOut(){ |
||||
return output; |
||||
} |
||||
|
||||
public byte[] getDataStream() { |
||||
return output.toByteArray(); |
||||
} |
||||
|
||||
class FilterServletOutputStream extends ServletOutputStream { |
||||
DataOutputStream output; |
||||
|
||||
public FilterServletOutputStream(OutputStream output) { |
||||
this.output = new DataOutputStream(output); |
||||
} |
||||
|
||||
@Override |
||||
public void write(int arg0) throws IOException { |
||||
output.write(arg0); |
||||
} |
||||
|
||||
@Override |
||||
public void write(byte[] arg0, int arg1, int arg2) throws IOException { |
||||
output.write(arg0, arg1, arg2); |
||||
} |
||||
|
||||
@Override |
||||
public void write(byte[] arg0) throws IOException { |
||||
output.write(arg0); |
||||
System.out.printf(""); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isReady() { |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public void setWriteListener(WriteListener writeListener) { |
||||
|
||||
} |
||||
} |
||||
} |
@ -0,0 +1,34 @@
|
||||
package com.fr.plugin.xxxx.xxxx.menu.bean; |
||||
|
||||
/** |
||||
* @Author fr.open |
||||
* @Date 2021/11/11 |
||||
* @Description |
||||
**/ |
||||
public class Token { |
||||
|
||||
private String token; |
||||
|
||||
private Long timeout; |
||||
|
||||
public Token(String token, long timeout) { |
||||
this.timeout = timeout; |
||||
this.token = token; |
||||
} |
||||
|
||||
public String getToken() { |
||||
return token; |
||||
} |
||||
|
||||
public void setToken(String token) { |
||||
this.token = token; |
||||
} |
||||
|
||||
public Long getTimeout() { |
||||
return timeout; |
||||
} |
||||
|
||||
public void setTimeout(Long timeout) { |
||||
this.timeout = timeout; |
||||
} |
||||
} |
@ -0,0 +1,158 @@
|
||||
package com.fr.plugin.xxxx.xxxx.menu.log; |
||||
|
||||
import com.fr.base.PropertiesUtils; |
||||
import com.fr.decision.log.ExecuteMessage; |
||||
import com.fr.decision.record.OperateMessage; |
||||
import com.fr.intelli.record.scene.impl.LogCacheMetric; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.locale.InterProvider; |
||||
import com.fr.locale.InterProviderFactory; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.plugin.holger.hwny.menu.util.HttpUtil; |
||||
import com.fr.plugin.holger.hwny.menu.util.TokenFactory; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.stream.Stream; |
||||
|
||||
/** |
||||
* @Author fr.open |
||||
* @Date 2021/11/14 |
||||
* @Description |
||||
**/ |
||||
public class MyLogCacheMetric extends LogCacheMetric { |
||||
|
||||
private static final String[] ARRAY = new String[]{"page","view","write","form","write_plus","page_plus"}; |
||||
|
||||
private static final String LOG_API = "/rest/openapi/security/v3/log/op-logs"; |
||||
|
||||
private static final String system = "op-report-system"; |
||||
|
||||
private static final Map<Integer,String> exportType; |
||||
|
||||
static { |
||||
exportType = new HashMap<>(); |
||||
exportType.put(0,"分页预览"); |
||||
exportType.put(1,"在线分析"); |
||||
exportType.put(2,"填报预览"); |
||||
exportType.put(3,"决策报表预览"); |
||||
exportType.put(4,"行式引擎"); |
||||
exportType.put(5,"在线编辑"); |
||||
exportType.put(7,"新引擎预览"); |
||||
exportType.put(10,"Excel 分页导出"); |
||||
exportType.put(11,"Excel 原样导出"); |
||||
exportType.put(12,"Excel 整页导出"); |
||||
exportType.put(13,"Excel 分页分 sheet 导出"); |
||||
exportType.put(14,"PDF 导出"); |
||||
exportType.put(15,"Word 导出"); |
||||
exportType.put(16,"SVG 导出"); |
||||
exportType.put(17,"CSV 导出"); |
||||
exportType.put(18,"文本导出"); |
||||
exportType.put(19,"JPG 图片导出"); |
||||
exportType.put(20,"PNG 图片导出"); |
||||
exportType.put(21,"GIF 图片导出"); |
||||
exportType.put(22,"BMP 图片导出"); |
||||
exportType.put(23,"WBMP 图片导出"); |
||||
exportType.put(24,"内置数据集导出模板"); |
||||
exportType.put(25,"HTML 导出"); |
||||
exportType.put(26,"填报 HTML 导出"); |
||||
exportType.put(27,"BI 导出 Excel"); |
||||
exportType.put(30,"Flash 打印"); |
||||
exportType.put(31,"PDF 打印"); |
||||
exportType.put(32,"Applet 打印"); |
||||
exportType.put(33,"零客户端打印"); |
||||
exportType.put(34,"本地软件打印"); |
||||
} |
||||
|
||||
@Override |
||||
public void submit(Object o) { |
||||
super.submit(o); |
||||
if (o instanceof OperateMessage) { |
||||
OperateMessage message = (OperateMessage) o; |
||||
sendMessage(coverJSONByMessage(message)); |
||||
} |
||||
if (o instanceof ExecuteMessage) { |
||||
ExecuteMessage message = (ExecuteMessage) o; |
||||
sendMessage(coverJSONByExportMessage(message)); |
||||
} |
||||
} |
||||
|
||||
private JSONObject coverJSONByExportMessage(ExecuteMessage message) { |
||||
FineLoggerFactory.getLogger().info("export message is {}",JSONObject.mapFrom(message)); |
||||
JSONObject object = new JSONObject(); |
||||
object.put("userName", message.getUsername()); |
||||
object.put("templateId", system); |
||||
String type = exportType.get(message.getType()); |
||||
String detail = String.format("报表%s执行%s操作", message.getTemplate(), type); |
||||
object.put("detail", detail); |
||||
FineLoggerFactory.getLogger().info("get export detail is {}",detail); |
||||
if(Stream.of(ARRAY).anyMatch(type::contains)){ |
||||
object.put("result", message.getComplete() == 1 ? "SUCCESSFUL" : "FAILURE"); |
||||
}else { |
||||
object.put("result","SUCCESSFUL"); |
||||
|
||||
} |
||||
object.put("terminal", message.getIp()); |
||||
return object; |
||||
} |
||||
|
||||
private void sendMessage(JSONObject object) { |
||||
String tokenUrl = PropertiesUtils.getProperties("conf").getProperty("tokenUrl"); |
||||
String userid = PropertiesUtils.getProperties("conf").getProperty("userid"); |
||||
String value = PropertiesUtils.getProperties("conf").getProperty("value"); |
||||
String prefix = PropertiesUtils.getProperties("conf").getProperty("prefix"); |
||||
String token = TokenFactory.getToken(tokenUrl, userid, value); |
||||
FineLoggerFactory.getLogger().info("get token is {}", token); |
||||
Map<String, Object> headerMap = new HashMap(); |
||||
headerMap.put("openid", token); |
||||
FineLoggerFactory.getLogger().info("url {} send data is {}", prefix + LOG_API, object); |
||||
String res = HttpUtil.doJSONPost(prefix + LOG_API, headerMap, object, null, null); |
||||
FineLoggerFactory.getLogger().info("save log res is {}", res); |
||||
} |
||||
|
||||
@Override |
||||
public void submit(List<Object> list) { |
||||
super.submit(list); |
||||
if (list != null && !list.isEmpty()) { |
||||
for (int i = 0; i < list.size(); i++) { |
||||
Object o = list.get(i); |
||||
if (o instanceof OperateMessage) { |
||||
OperateMessage message = (OperateMessage) o; |
||||
sendMessage(coverJSONByMessage(message)); |
||||
} |
||||
if (o instanceof ExecuteMessage) { |
||||
ExecuteMessage message = (ExecuteMessage) o; |
||||
sendMessage(coverJSONByExportMessage(message)); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
private JSONObject coverJSONByMessage(OperateMessage message) { |
||||
JSONObject object = new JSONObject(); |
||||
object.put("userName", message.getUsername()); |
||||
object.put("templateId", system); |
||||
object.put("result", message.getStatus() > 0 ? "SUCCESSFUL" : "FAILURE"); |
||||
InterProvider provider = InterProviderFactory.getProvider(); |
||||
String detail = String.format("%s模块%s设置项%s执行%s操作", provider.getLocText(message.getType()), |
||||
provider.getLocText(message.getItem()), |
||||
StringUtils.isBlank(message.getResource())?"":provider.getLocText(message.getResource()), |
||||
provider.getLocText(message.getOperate()) |
||||
); |
||||
FineLoggerFactory.getLogger().info("get detail is {}",detail); |
||||
object.put("detail", detail); |
||||
object.put("terminal", message.getIp()); |
||||
return object; |
||||
} |
||||
|
||||
/* public static void main(String[] args) { |
||||
ExecuteMessage message = new ExecuteMessage(); |
||||
message.setComplete(0); |
||||
message.setType(11); |
||||
MyLogCacheMetric myLogCacheMetric = new MyLogCacheMetric(); |
||||
System.out.println(myLogCacheMetric.coverJSONByExportMessage(message)); |
||||
}*/ |
||||
} |
@ -0,0 +1,480 @@
|
||||
package com.fr.plugin.xxxx.xxxx.menu.util; |
||||
|
||||
import com.fr.json.JSONObject; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.third.org.apache.http.HttpResponse; |
||||
import com.fr.third.org.apache.http.HttpStatus; |
||||
import com.fr.third.org.apache.http.NameValuePair; |
||||
import com.fr.third.org.apache.http.client.HttpClient; |
||||
import com.fr.third.org.apache.http.client.entity.UrlEncodedFormEntity; |
||||
import com.fr.third.org.apache.http.client.methods.HttpPost; |
||||
import com.fr.third.org.apache.http.client.methods.HttpPut; |
||||
import com.fr.third.org.apache.http.config.Registry; |
||||
import com.fr.third.org.apache.http.config.RegistryBuilder; |
||||
import com.fr.third.org.apache.http.conn.socket.ConnectionSocketFactory; |
||||
import com.fr.third.org.apache.http.conn.socket.LayeredConnectionSocketFactory; |
||||
import com.fr.third.org.apache.http.conn.socket.PlainConnectionSocketFactory; |
||||
import com.fr.third.org.apache.http.conn.ssl.SSLConnectionSocketFactory; |
||||
import com.fr.third.org.apache.http.conn.ssl.SSLContexts; |
||||
import com.fr.third.org.apache.http.conn.ssl.TrustStrategy; |
||||
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.HttpClientBuilder; |
||||
import com.fr.third.org.apache.http.impl.conn.PoolingHttpClientConnectionManager; |
||||
import com.fr.third.org.apache.http.message.BasicNameValuePair; |
||||
import com.fr.third.org.apache.http.util.EntityUtils; |
||||
|
||||
import javax.net.ssl.*; |
||||
import java.io.*; |
||||
import java.net.HttpURLConnection; |
||||
import java.net.URL; |
||||
import java.net.URLEncoder; |
||||
import java.security.KeyManagementException; |
||||
import java.security.KeyStore; |
||||
import java.security.KeyStoreException; |
||||
import java.security.NoSuchAlgorithmException; |
||||
import java.security.cert.CertificateException; |
||||
import java.util.ArrayList; |
||||
import java.util.Iterator; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* @Author fr.open |
||||
* @Date 2021/11/11 |
||||
* @Description |
||||
**/ |
||||
public class HttpUtil { |
||||
|
||||
private static HostnameVerifier hv = new HostnameVerifier() { |
||||
@Override |
||||
public boolean verify(String urlHostName, SSLSession session) { |
||||
System.out.println("Warning: URL Host: " + urlHostName + " vs. " |
||||
+ session.getPeerHost()); |
||||
return true; |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* 发送get请求 |
||||
* |
||||
* @param url |
||||
* @param param |
||||
* @param header |
||||
* @return |
||||
* @throws IOException |
||||
*/ |
||||
public static String sendGet(String url, Map<String, Object> param, Map<String, Object> header, String charset) { |
||||
String result = ""; |
||||
BufferedReader in = null; |
||||
String urlNameString = url; |
||||
try { |
||||
if (param != null && !param.isEmpty()) { |
||||
urlNameString += "?"; |
||||
urlNameString += param.entrySet() |
||||
.stream() |
||||
.map(entry -> entry.getKey() + "=" + entry.getValue().toString()) |
||||
.collect(Collectors.joining("&")); |
||||
} |
||||
|
||||
URL realUrl = new URL(urlNameString); |
||||
// 打开和URL之间的连接
|
||||
HttpURLConnection connection; |
||||
if (url.startsWith("https")) { |
||||
trustAllHttpsCertificates(); |
||||
HttpsURLConnection.setDefaultHostnameVerifier(hv); |
||||
connection = (HttpURLConnection) realUrl.openConnection(); |
||||
} else { |
||||
connection = (HttpURLConnection) realUrl.openConnection(); |
||||
} |
||||
//设置超时时间
|
||||
connection.setDoInput(true); |
||||
connection.setRequestMethod("GET"); |
||||
connection.setConnectTimeout(5000); |
||||
connection.setReadTimeout(15000); |
||||
// 设置通用的请求属性
|
||||
if (header != null) { |
||||
Iterator<Map.Entry<String, Object>> it = header.entrySet().iterator(); |
||||
while (it.hasNext()) { |
||||
Map.Entry<String, Object> entry = it.next(); |
||||
System.out.println(entry.getKey() + ":::" + entry.getValue()); |
||||
connection.setRequestProperty(entry.getKey(), entry.getValue().toString()); |
||||
} |
||||
} |
||||
connection.setRequestProperty("accept", "*/*"); |
||||
connection.setRequestProperty("connection", "Keep-Alive"); |
||||
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); |
||||
// 建立实际的连接
|
||||
connection.connect(); |
||||
if(connection.getResponseCode() == 200){ |
||||
// 定义 BufferedReader输入流来读取URL的响应,设置utf8防止中文乱码
|
||||
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), charset == null ? "utf-8" : charset)); |
||||
String line; |
||||
while ((line = in.readLine()) != null) { |
||||
result += line; |
||||
} |
||||
if (in != null) { |
||||
in.close(); |
||||
} |
||||
}else { |
||||
in = new BufferedReader(new InputStreamReader(connection.getErrorStream(), charset == null ? "utf-8" : charset)); |
||||
String line; |
||||
while ((line = in.readLine()) != null) { |
||||
result += line; |
||||
} |
||||
if (in != null) { |
||||
in.close(); |
||||
} |
||||
FineLoggerFactory.getLogger().error("Http post form code is {},message is {}",connection.getResponseCode(),result); |
||||
return StringUtils.EMPTY; |
||||
} |
||||
|
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e, "get url error ,url is:{},error is {}", urlNameString, e.getMessage()); |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
public static String sendPost(String url, Map<String, Object> header, JSONObject body) { |
||||
PrintWriter out = null; |
||||
BufferedReader in = null; |
||||
String result = null; |
||||
String res = null; |
||||
try { |
||||
String urlNameString = url; |
||||
|
||||
URL realUrl = new URL(urlNameString); |
||||
// 打开和URL之间的连接
|
||||
HttpURLConnection conn; |
||||
if (url.startsWith("https")) { |
||||
trustAllHttpsCertificates(); |
||||
HttpsURLConnection.setDefaultHostnameVerifier(hv); |
||||
conn = (HttpURLConnection) realUrl.openConnection(); |
||||
} else { |
||||
conn = (HttpURLConnection) realUrl.openConnection(); |
||||
} |
||||
// 设置通用的请求属性
|
||||
conn.setRequestProperty("accept", "*/*"); |
||||
conn.setRequestProperty("connection", "Keep-Alive"); |
||||
// conn.setRequestProperty("user-agent",
|
||||
// "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
|
||||
conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); |
||||
if (header != null) { |
||||
header.forEach((k, v) -> { |
||||
conn.setRequestProperty(k, String.valueOf(v)); |
||||
}); |
||||
} |
||||
// 发送POST请求必须设置如下两行
|
||||
conn.setDoOutput(true); |
||||
conn.setDoInput(true); |
||||
//获取请求头
|
||||
|
||||
// 获取URLConnection对象对应的输出流
|
||||
out = new PrintWriter(conn.getOutputStream()); |
||||
// 发送请求参数
|
||||
if (body != null) { |
||||
FineLoggerFactory.getLogger().error("content data: {}", body.toString()); |
||||
FineLoggerFactory.getLogger().error("content cover data: {}", new String(body.toString().getBytes("UTF-8"), "UTF-8")); |
||||
out.print(new String(body.toString().getBytes("UTF-8"), "UTF-8")); |
||||
} |
||||
// flush输出流的缓冲
|
||||
out.flush(); |
||||
// 定义BufferedReader输入流来读取URL的响应
|
||||
in = new BufferedReader( |
||||
new InputStreamReader(conn.getInputStream())); |
||||
String line; |
||||
while ((line = in.readLine()) != null) { |
||||
result += line; |
||||
} |
||||
res = result; |
||||
if (res.startsWith("null")) { |
||||
res = res.replace("null", ""); |
||||
} |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
//使用finally块来关闭输出流、输入流
|
||||
finally { |
||||
try { |
||||
if (out != null) { |
||||
out.close(); |
||||
} |
||||
if (in != null) { |
||||
in.close(); |
||||
} |
||||
} catch (IOException e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
return res; |
||||
} |
||||
|
||||
|
||||
public static String doJSONPost(String url, Map<String, Object> header, JSONObject json, Map<String, Object> param, String chartset) { |
||||
HttpClient client = getHttpsClient(); |
||||
/*if (url.startsWith("https")) { |
||||
SSLContext sslcontext = createIgnoreVerifySSL(); |
||||
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() |
||||
.register("http", PlainConnectionSocketFactory.INSTANCE) |
||||
.register("https", new SSLConnectionSocketFactory(sslcontext)) |
||||
.build(); |
||||
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); |
||||
HttpClients.custom().setConnectionManager(connManager); |
||||
client = HttpClients.custom().setConnectionManager(connManager).build(); |
||||
}*/ |
||||
if (param != null && !param.isEmpty()) { |
||||
url += "?"; |
||||
url += param.entrySet() |
||||
.stream() |
||||
.map(entry -> entry.getKey() + "=" + entry.getValue()) |
||||
.collect(Collectors.joining("&")); |
||||
} |
||||
HttpPost post = new HttpPost(url); |
||||
post.setHeader("accept", "*/*"); |
||||
post.setHeader("connection", "Keep-Alive"); |
||||
post.setHeader("Content-Type", "application/json"); |
||||
if (header != null) { |
||||
header.forEach((k, v) -> { |
||||
post.setHeader(k, v.toString()); |
||||
}); |
||||
} |
||||
try { |
||||
StringEntity s = new StringEntity(json.toString(), chartset == null ? "UTF-8" : chartset); |
||||
s.setContentEncoding("UTF-8"); |
||||
s.setContentType("application/json; charset=UTF-8");//发送json数据需要设置contentType
|
||||
post.setEntity(s); |
||||
HttpResponse res = client.execute(post); |
||||
if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { |
||||
String result = EntityUtils.toString(res.getEntity());// 返回json格式:
|
||||
return result; |
||||
} else { |
||||
FineLoggerFactory.getLogger().error("Http post form code is {},message is {}", res.getStatusLine().getStatusCode(), EntityUtils.toString(res.getEntity())); |
||||
} |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
public static String doJSONPut(String url, Map<String, Object> header, JSONObject json, Map<String, Object> param, String chartset) { |
||||
HttpClient client = getHttpsClient(); |
||||
/*if (url.startsWith("https")) { |
||||
SSLContext sslcontext = createIgnoreVerifySSL(); |
||||
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() |
||||
.register("http", PlainConnectionSocketFactory.INSTANCE) |
||||
.register("https", new SSLConnectionSocketFactory(sslcontext)) |
||||
.build(); |
||||
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); |
||||
HttpClients.custom().setConnectionManager(connManager); |
||||
client = HttpClients.custom().setConnectionManager(connManager).build(); |
||||
}*/ |
||||
if (param != null && !param.isEmpty()) { |
||||
url += "?"; |
||||
url += param.entrySet() |
||||
.stream() |
||||
.map(entry -> entry.getKey() + "=" + entry.getValue()) |
||||
.collect(Collectors.joining("&")); |
||||
} |
||||
HttpPut post = new HttpPut(url); |
||||
post.setHeader("accept", "*/*"); |
||||
post.setHeader("connection", "Keep-Alive"); |
||||
post.setHeader("Content-Type", "application/json"); |
||||
if (header != null) { |
||||
header.forEach((k, v) -> { |
||||
post.setHeader(k, v.toString()); |
||||
}); |
||||
} |
||||
try { |
||||
StringEntity s = new StringEntity(json.toString(), chartset == null ? "UTF-8" : chartset); |
||||
s.setContentEncoding("UTF-8"); |
||||
s.setContentType("application/json; charset=UTF-8");//发送json数据需要设置contentType
|
||||
post.setEntity(s); |
||||
HttpResponse res = client.execute(post); |
||||
if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { |
||||
String result = EntityUtils.toString(res.getEntity());// 返回json格式:
|
||||
return result; |
||||
} else { |
||||
FineLoggerFactory.getLogger().error("Http post form code is {},message is {}", res.getStatusLine().getStatusCode(), EntityUtils.toString(res.getEntity())); |
||||
} |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
|
||||
public static String doFormPost(String url,Map<String, Object> header, Map<String, Object> map, String chartset) { |
||||
//声明返回结果
|
||||
String result = ""; |
||||
UrlEncodedFormEntity entity = null; |
||||
HttpResponse httpResponse = null; |
||||
HttpClient httpClient = null; |
||||
try { |
||||
// 创建连接
|
||||
httpClient = getHttpsClient(); |
||||
; |
||||
/*if (url.startsWith("https")) { |
||||
SSLContext sslcontext = createIgnoreVerifySSL(); |
||||
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() |
||||
.register("http", PlainConnectionSocketFactory.INSTANCE) |
||||
.register("https", new SSLConnectionSocketFactory(sslcontext)) |
||||
.build(); |
||||
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); |
||||
HttpClients.custom().setConnectionManager(connManager); |
||||
httpClient = HttpClients.custom().setConnectionManager(connManager).build(); |
||||
}*/ |
||||
// 设置请求头和报文
|
||||
HttpPost httpPost = new HttpPost(url); |
||||
if (header != null) { |
||||
header.forEach((k, v) -> { |
||||
httpPost.setHeader(k, v.toString()); |
||||
}); |
||||
} |
||||
//设置参数
|
||||
List<NameValuePair> list = new ArrayList<NameValuePair>(); |
||||
Iterator iterator = map.entrySet().iterator(); |
||||
while (iterator.hasNext()) { |
||||
Map.Entry<String, String> elem = (Map.Entry<String, String>) iterator.next(); |
||||
list.add(new BasicNameValuePair(elem.getKey(), elem.getValue())); |
||||
} |
||||
entity = new UrlEncodedFormEntity(list, chartset == null ? "UTF-8" : chartset); |
||||
httpPost.setEntity(entity); |
||||
//执行发送,获取相应结果
|
||||
httpResponse = httpClient.execute(httpPost); |
||||
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { |
||||
result = EntityUtils.toString(httpResponse.getEntity()); |
||||
} else { |
||||
FineLoggerFactory.getLogger().error("Http post form code is {},message is {}", httpResponse.getStatusLine().getStatusCode(), EntityUtils.toString(httpResponse.getEntity())); |
||||
} |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
return result; |
||||
|
||||
} |
||||
|
||||
private static void trustAllHttpsCertificates() throws Exception { |
||||
TrustManager[] trustAllCerts = new TrustManager[1]; |
||||
TrustManager tm = new miTM(); |
||||
trustAllCerts[0] = tm; |
||||
SSLContext sc = SSLContext.getInstance("SSL", "SunJSSE"); |
||||
sc.init(null, trustAllCerts, null); |
||||
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* encode url by UTF-8 |
||||
* |
||||
* @param url url before encoding |
||||
* @return url after encoding |
||||
*/ |
||||
public static String encodeUrl(String url) { |
||||
String eurl = url; |
||||
try { |
||||
eurl = URLEncoder.encode(url, "UTF-8"); |
||||
} catch (UnsupportedEncodingException e) { |
||||
} |
||||
return eurl; |
||||
} |
||||
|
||||
private static class miTM implements TrustManager, |
||||
X509TrustManager { |
||||
@Override |
||||
public java.security.cert.X509Certificate[] getAcceptedIssuers() { |
||||
return null; |
||||
} |
||||
|
||||
public boolean isServerTrusted( |
||||
java.security.cert.X509Certificate[] certs) { |
||||
return true; |
||||
} |
||||
|
||||
public boolean isClientTrusted( |
||||
java.security.cert.X509Certificate[] certs) { |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public void checkServerTrusted( |
||||
java.security.cert.X509Certificate[] certs, String authType) |
||||
throws CertificateException { |
||||
return; |
||||
} |
||||
|
||||
@Override |
||||
public void checkClientTrusted( |
||||
java.security.cert.X509Certificate[] certs, String authType) |
||||
throws CertificateException { |
||||
return; |
||||
} |
||||
} |
||||
|
||||
public static SSLContext createIgnoreVerifySSL() { |
||||
try { |
||||
SSLContext sc = SSLContext.getInstance("TLSv1.2"); |
||||
|
||||
// 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法
|
||||
X509TrustManager trustManager = new X509TrustManager() { |
||||
@Override |
||||
public void checkClientTrusted( |
||||
java.security.cert.X509Certificate[] paramArrayOfX509Certificate, |
||||
String paramString) throws CertificateException { |
||||
} |
||||
|
||||
@Override |
||||
public void checkServerTrusted( |
||||
java.security.cert.X509Certificate[] paramArrayOfX509Certificate, |
||||
String paramString) throws CertificateException { |
||||
} |
||||
|
||||
@Override |
||||
public java.security.cert.X509Certificate[] getAcceptedIssuers() { |
||||
return null; |
||||
} |
||||
}; |
||||
|
||||
sc.init(null, new TrustManager[]{trustManager}, null); |
||||
return sc; |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
private static CloseableHttpClient getHttpsClient() { |
||||
RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder.<ConnectionSocketFactory>create(); |
||||
ConnectionSocketFactory plainSF = new PlainConnectionSocketFactory(); |
||||
registryBuilder.register("http", plainSF); |
||||
// 指定信任密钥存储对象和连接套接字工厂
|
||||
try { |
||||
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); |
||||
// 信任任何链接
|
||||
TrustStrategy anyTrustStrategy = new TrustStrategy() { |
||||
|
||||
@Override |
||||
public boolean isTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throws CertificateException { |
||||
// TODO Auto-generated method stub
|
||||
return true; |
||||
} |
||||
}; |
||||
SSLContext sslContext = SSLContexts.custom().useTLS().loadTrustMaterial(trustStore, anyTrustStrategy).build(); |
||||
LayeredConnectionSocketFactory sslSF = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); |
||||
registryBuilder.register("https", sslSF); |
||||
} catch (KeyStoreException e) { |
||||
throw new RuntimeException(e); |
||||
} catch (KeyManagementException e) { |
||||
throw new RuntimeException(e); |
||||
} catch (NoSuchAlgorithmException e) { |
||||
throw new RuntimeException(e); |
||||
} |
||||
Registry<ConnectionSocketFactory> registry = registryBuilder.build(); |
||||
// 设置连接管理器
|
||||
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(registry); |
||||
// 构建客户端
|
||||
return HttpClientBuilder.create().setConnectionManager(connManager).build(); |
||||
|
||||
} |
||||
} |
@ -0,0 +1,68 @@
|
||||
package com.fr.plugin.xxxx.xxxx.menu.util; |
||||
|
||||
import com.fr.json.JSONObject; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.plugin.holger.hwny.menu.bean.Token; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import java.time.Instant; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @Author fr.open |
||||
* @Date 2021/11/11 |
||||
* @Description |
||||
**/ |
||||
public class TokenFactory { |
||||
|
||||
private static Token token; |
||||
|
||||
private static TokenFactory instance; |
||||
|
||||
private TokenFactory() { |
||||
|
||||
} |
||||
|
||||
public static TokenFactory getInstance() { |
||||
if (instance == null) { |
||||
instance = new TokenFactory(); |
||||
} |
||||
return instance; |
||||
} |
||||
|
||||
public static String getToken(String tokenUrl, String userid, String value) { |
||||
String token = getTempToken(); |
||||
if (StringUtils.isNotBlank(token)) { |
||||
return token; |
||||
} |
||||
return refreshToken(tokenUrl, userid, value); |
||||
|
||||
} |
||||
|
||||
private static String getTempToken() { |
||||
if (token == null) { |
||||
return null; |
||||
} |
||||
if (token.getTimeout() < System.currentTimeMillis()) { |
||||
return null; |
||||
} |
||||
return token.getToken(); |
||||
} |
||||
|
||||
private static String refreshToken(String tokenUrl, String userid, String value) { |
||||
JSONObject object = JSONObject.create().put("userid", userid).put("value", value); |
||||
/*FineLoggerFactory.getLogger().info("get token param is {}", object);*/ |
||||
Map<String, Object> header = new HashMap<>(); |
||||
header.put("Accept", "application/json"); |
||||
header.put("Content-Type", "application/json;charset=UTF-8"); |
||||
String res = HttpUtil.doJSONPut(tokenUrl, header, object, null, null); |
||||
FineLoggerFactory.getLogger().info("get token res is {} by url {}", res, tokenUrl); |
||||
JSONObject resObj = new JSONObject(res); |
||||
if (resObj.containsKey("data") && StringUtils.isNotBlank("data")) { |
||||
token = new Token(resObj.getString("data"), Instant.now().plusSeconds(28 * 60).toEpochMilli()); |
||||
return resObj.getString("data"); |
||||
} |
||||
return StringUtils.EMPTY; |
||||
} |
||||
} |
Loading…
Reference in new issue