From f0ca0446797327d97a503ce28c410a8c28d82019 Mon Sep 17 00:00:00 2001 From: pioneer Date: Fri, 23 Sep 2022 14:34:56 +0800 Subject: [PATCH] open --- .../.~智数单点登录(1).docx | Bin 0 -> 162 bytes JSD-9851(SLN5024)/plugin.xml | 19 + .../com/fr/plugin/login5024/Constants.java | 13 + .../login5024/LoginRequestFilter5024.java | 160 ++++++++ .../fr/plugin/login5024/RecordHandler.java | 41 ++ .../java/com/fr/plugin/login5024/Utils.java | 258 +++++++++++++ .../美云智数单点登录(1).docx | Bin 0 -> 34077 bytes .../.~R单点登录方案(1).doc | Bin 0 -> 162 bytes .../EHR单点登录方案(1).doc | Bin 0 -> 43520 bytes JSD-9851(SLN5987)/plugin.xml | 20 + .../fr/plugin/sln5987/login/Constants.java | 19 + .../sln5987/login/EhrLoginRequestFilter.java | 154 ++++++++ .../login/config/EhrPluginSimpleConfig.java | 122 ++++++ .../config/PluginInitializeFilterBridge.java | 25 ++ .../login/config/PluginInitializeMonitor.java | 21 ++ .../sln5987/login/service/IdpAuthService.java | 128 +++++++ .../sln5987/login/utils/AESEncryptUtil.java | 47 +++ .../sln5987/login/utils/FilterHelper.java | 141 +++++++ .../sln5987/login/utils/HttpClientUtils.java | 353 ++++++++++++++++++ .../plugin/sln5987/login/utils/MD5Util.java | 61 +++ .../plugin/sln5987/login/utils/Sha1Util.java | 27 ++ JSD-9851(SLN6735)/plugin.xml | 19 + .../com/fr/plugin/sln6735/rsa/RsaConfig.java | 69 ++++ .../com/fr/plugin/sln6735/rsa/RsaFilter.java | 135 +++++++ JSD-9851(SLN6735)/插件说明.docx | Bin 0 -> 137232 bytes README.md | 7 + 代码提交说明.doc | Bin 0 -> 10240 bytes 27 files changed, 1839 insertions(+) create mode 100644 JSD-9851(SLN5024)/.~智数单点登录(1).docx create mode 100644 JSD-9851(SLN5024)/plugin.xml create mode 100644 JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/Constants.java create mode 100644 JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/LoginRequestFilter5024.java create mode 100644 JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/RecordHandler.java create mode 100644 JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/Utils.java create mode 100644 JSD-9851(SLN5024)/美云智数单点登录(1).docx create mode 100644 JSD-9851(SLN5987)/.~R单点登录方案(1).doc create mode 100644 JSD-9851(SLN5987)/EHR单点登录方案(1).doc create mode 100644 JSD-9851(SLN5987)/plugin.xml create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/Constants.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/EhrLoginRequestFilter.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/EhrPluginSimpleConfig.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/PluginInitializeFilterBridge.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/PluginInitializeMonitor.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/service/IdpAuthService.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/AESEncryptUtil.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/FilterHelper.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/HttpClientUtils.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/MD5Util.java create mode 100644 JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/Sha1Util.java create mode 100644 JSD-9851(SLN6735)/plugin.xml create mode 100644 JSD-9851(SLN6735)/src/main/java/com/fr/plugin/sln6735/rsa/RsaConfig.java create mode 100644 JSD-9851(SLN6735)/src/main/java/com/fr/plugin/sln6735/rsa/RsaFilter.java create mode 100644 JSD-9851(SLN6735)/插件说明.docx create mode 100644 README.md create mode 100644 代码提交说明.doc diff --git a/JSD-9851(SLN5024)/.~智数单点登录(1).docx b/JSD-9851(SLN5024)/.~智数单点登录(1).docx new file mode 100644 index 0000000000000000000000000000000000000000..d47e78e2db32cdeeaf2ca3d3dfd3a79c4243b685 GIT binary patch literal 162 lcmZQC$jr}6O)X*|39vI1Fk~|1GvqO(0wIZ-NwSH70RR9w1@iy^ literal 0 HcmV?d00001 diff --git a/JSD-9851(SLN5024)/plugin.xml b/JSD-9851(SLN5024)/plugin.xml new file mode 100644 index 0000000..d02e64f --- /dev/null +++ b/JSD-9851(SLN5024)/plugin.xml @@ -0,0 +1,19 @@ + + com.fr.plugin.login5024 + + yes + 1.0.5 + 10.0 + 2018-07-31 + fr.open + + + com.fr.plugin.login5024 + + + + + + + \ No newline at end of file diff --git a/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/Constants.java b/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/Constants.java new file mode 100644 index 0000000..805deb2 --- /dev/null +++ b/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/Constants.java @@ -0,0 +1,13 @@ +package com.fr.plugin.login5024; + +public class Constants { + public static final String PLUGIN_ID = "com.fr.plugin.login5024"; + + public Constants() { + } + + public interface GrantType { + String AUTHORIZATION_CODE = "authorization_code"; + String REFRESH_TOKEN = "refresh_token"; + } +} diff --git a/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/LoginRequestFilter5024.java b/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/LoginRequestFilter5024.java new file mode 100644 index 0000000..c61ed83 --- /dev/null +++ b/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/LoginRequestFilter5024.java @@ -0,0 +1,160 @@ +package com.fr.plugin.login5024; + +import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; +import com.fr.decision.webservice.login.LogInOutResultInfo; +import com.fr.decision.webservice.v10.login.LoginService; +import com.fr.decision.webservice.v10.login.event.LogInOutEvent; +import com.fr.event.EventDispatcher; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.io.utils.ResourceIOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.stable.StringUtils; +import com.fr.web.utils.WebUtils; + +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@EnableMetrics +public class LoginRequestFilter5024 extends AbstractGlobalRequestFilterProvider { + public LoginRequestFilter5024() { + } + + public void init(FilterConfig var1) { + } + + public String filterName() { + return "LoginRequestFilter5024"; + } + + public String[] urlPatterns() { + return new String[]{"/*"}; + } + + public static void main(String[] args) { + String url = "http://lcoalhost:8075/webroot/decision/test"; + System.out.println(); + } + + public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) { + StringBuffer url = req.getRequestURL(); + String queryStr = req.getQueryString(); + FineLoggerFactory.getLogger().info("请求: " + url); + FineLoggerFactory.getLogger().info("参数: " + queryStr); + String token = req.getParameter("accessToken"); + String configPath = ResourceIOUtils.getRealPath("config.properties"); + FineLoggerFactory.getLogger().info("--*info*--配置文件路径:" + configPath); + Utils utils = new Utils(); + Map config = utils.readFile(configPath); + String tokenUrl = (String)config.get("url"); + if (StringUtils.isEmpty(token) || isLogin(req)) { + FineLoggerFactory.getLogger().info("FRLOG:没有token"); + release(req,res,chain); + return ; + } + + if (StringUtils.isEmpty(tokenUrl)) { + response("解析accessToken的地址未配置",res); + return; + } + + HashMap param = new HashMap(); + param.put("accessToken", token); + String result = utils.get(tokenUrl, param, (Map)null); + Map resultMap = utils.getResult(result); + Object code = resultMap.get("code"); + String username = ""; + + if (code != null && "1".equals(code.toString())) { + username = resultMap.get("username").toString(); + } + + if(!StringUtils.isNotEmpty(username)){ + response("获取用户名失败",res); + return ; + } + + FineLoggerFactory.getLogger().info("FRLOG:用户名:" + username); + + try { + if (utils.JudgeIsMobile(req)) { + req.setAttribute("__device__", "iPhone"); + req.setAttribute("deviceType", "iPhone"); + req.setAttribute("terminal", "H5"); + } + + if (!utils.isLogin(req, username)) { + utils.login(username, req, res); + req.getSession().setAttribute("loginUserName", username); + } + + String redirectUrl = WebUtils.getOriginalURL(req); + FineLoggerFactory.getLogger().info("FRLOG:url " + redirectUrl); + String index =(String)config.get("index"); + redirectUrl = index+redirectUrl.substring(redirectUrl.indexOf("decision")+8,redirectUrl.length()); + + res.sendRedirect(encodeCH(redirectUrl)); + } catch (Exception var24) { + response("用户名"+username+"登陆失败",res); + return ; + } + + + release(req,res,chain); + } + + private static void response(String msg,HttpServletResponse res){ + try { + PrintWriter var25 = WebUtils.createPrintWriter(res); + var25.print(msg); + var25.flush(); + var25.close(); + } catch (Exception var23) { + FineLoggerFactory.getLogger().error("返回信息失败:"+msg); + } + } + + private static void release(HttpServletRequest req,HttpServletResponse res,FilterChain chain){ + try { + chain.doFilter(req, res); + } catch (Exception e) { + FineLoggerFactory.getLogger().error("放行失败:"+e.getMessage()); + } + } + + /** + * 判断是否登录FR + * @param req + * @return + */ + public static boolean isLogin(HttpServletRequest req){ + return LoginService.getInstance().isLogged(req); + } + + /** + * 只编码中文 + * @param url + * @return + */ + public static String encodeCH(String url ){ + Matcher matcher = Pattern.compile("[\\u4e00-\\u9fa5]").matcher(url); + + while(matcher.find()){ + String chn = matcher.group(); + url = url.replaceAll(chn, URLEncoder.encode(chn)); + } + + return url; + } +} diff --git a/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/RecordHandler.java b/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/RecordHandler.java new file mode 100644 index 0000000..681dc6b --- /dev/null +++ b/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/RecordHandler.java @@ -0,0 +1,41 @@ +package com.fr.plugin.login5024; + +import com.fr.decision.fun.impl.BaseHttpHandler; +import com.fr.decision.webservice.v10.user.UserService; +import com.fr.plugin.transform.FunctionRecorder; +import com.fr.third.springframework.web.bind.annotation.RequestMethod; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@FunctionRecorder +public class RecordHandler extends BaseHttpHandler { + + + public RecordHandler() { + } + + @Override + public RequestMethod getMethod() { + return RequestMethod.POST; + } + + @Override + public String getPath() { + return "/record"; + } + + @Override + public boolean isPublic() { + return true; + } + + @Override + public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { + + } + + + + +} + diff --git a/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/Utils.java b/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/Utils.java new file mode 100644 index 0000000..ed382b9 --- /dev/null +++ b/JSD-9851(SLN5024)/src/main/java/com/fr/plugin/login5024/Utils.java @@ -0,0 +1,258 @@ +package com.fr.plugin.login5024; + +import com.fr.data.NetworkHelper; +import com.fr.decision.authority.data.User; +import com.fr.decision.mobile.terminal.TerminalHandler; +import com.fr.decision.webservice.exception.user.UserNotExistException; +import com.fr.decision.webservice.login.LogInOutResultInfo; +import com.fr.decision.webservice.v10.login.LoginService; +import com.fr.decision.webservice.v10.login.TokenResource; +import com.fr.decision.webservice.v10.login.event.LogInOutEvent; +import com.fr.decision.webservice.v10.user.UserService; +import com.fr.event.EventDispatcher; +import com.fr.general.ComparatorUtils; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.security.JwtUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.web.Device; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class Utils { + public Utils() { + } + + public Map readFile(String var1) { + HashMap var2 = new HashMap(16); + if (var1 == null) { +// FineLoggerFactory.getLogger().error("--*error*--readPath is null"); + return var2; + } else { + File var3 = new File(var1); + if (!var3.exists()) { +// FineLoggerFactory.getLogger().error("--*error*--the config file not exists"); + return var2; + } else { + try { + BufferedReader var4 = new BufferedReader(new FileReader(var3)); + + String var5; + while((var5 = var4.readLine()) != null) { + if (var5.contains("=")) { + int var6 = var5.indexOf("="); + if (var6 == 0) { +// FineLoggerFactory.getLogger().error("--*error*--配置文件格式有误!"); + return null; + } + + String var7 = var5.substring(0, var6); + String var8 = var5.substring(var6 + 1); + var2.put(var7, var8); + } + } + + var4.close(); + } catch (Exception var9) { + var9.printStackTrace(); + } + + return var2; + } + } + } + + public void login(String var1, HttpServletRequest var2, HttpServletResponse var3) throws Exception { + User var4 = UserService.getInstance().getUserByUserName(var1); +// FineLoggerFactory.getLogger().info("--*info*--显示返回回的user:" + var4.getUserName()); + if (var4 == null) { + throw new UserNotExistException(); + } else { + String var5 = TokenResource.COOKIE.getToken(var2); + if (var5 == null || !this.checkTokenValid(var2, var5, var1)) { + String var6 = LoginService.getInstance().login(var2, var3, var1); + EventDispatcher.fire(LogInOutEvent.LOGIN,new LogInOutResultInfo(var2,var3,var1,true)); + + var2.setAttribute("fine_auth_token", var6); + } + + } + } + + public boolean checkTokenValid(HttpServletRequest var1, String var2, String var3) { + try { + if (!ComparatorUtils.equals(var3, JwtUtils.parseJWT(var2).getSubject())) { +// FineLoggerFactory.getLogger().info("--*error*--username changed:" + var3); + return false; + } else { + Device var4 = NetworkHelper.getDevice(var1); + LoginService.getInstance().loginStatusValid(var2, TerminalHandler.getTerminal(var1, var4)); + return true; + } + } catch (Exception var5) { + return false; + } + } + + public Map getResult(String var1) { + HashMap var2 = new HashMap(); + + JSONObject var3; + try { + var3 = new JSONObject(var1); + } catch (Exception var7) { +// FineLoggerFactory.getLogger().error("--*error*--响应流不是json格式:" + var1); + return var2; + } + + int var4 = var3.getInt("code"); + var2.put("code", var4); + var2.put("msg", var3.getString("msg")); + String[] var5 = new String[]{"data", "userInfo", "username"}; + Object var6 = this.getJsonbyArray(var3, var5); + if (var6 != null) { + var2.put("username", var6.toString()); + } + + return var2; + } + + public Object getJsonbyArray(JSONObject var1, String[] var2) { + try { + Object var3 = null; + + for(int var4 = 0; var4 < var2.length; ++var4) { + if (var4 == var2.length - 1) { + var3 = var1.getString(var2[var4]); + } else { + var3 = var1 = var1.getJSONObject(var2[var4]); + } + } + + return var3; + } catch (Exception var5) { + FineLoggerFactory.getLogger().error("--*error*--解析用户名失败"); + return null; + } + } + + public boolean isLogin(HttpServletRequest var1, String var2) { + Object var3 = var1.getSession().getAttribute("loginUserName"); + return var3 != null && var2.equals(var3.toString()); + } + + public String get(String var1, Map var2, Map var3) { + StringBuilder var4 = new StringBuilder(); + + try { + StringBuilder var5 = new StringBuilder(); + Iterator var6 = var2.entrySet().iterator(); + + while(var6.hasNext()) { + Map.Entry var7 = (Map.Entry)var6.next(); + var5.append((String)var7.getKey()); + var5.append("="); + var5.append(var7.getValue().toString()); + var5.append("&"); + } + + if (var5.length() > 0) { + var5.deleteCharAt(var5.lastIndexOf("&")); + } + + URL var13 = new URL(var1 + (var5.length() > 0 ? "?" + var5.toString() : "")); + HttpURLConnection var14 = (HttpURLConnection)var13.openConnection(); + var14.setRequestMethod("GET"); + var14.setRequestProperty("Accept", "application/json"); + if (var3 != null) { + Iterator var8 = var3.entrySet().iterator(); + + while(var8.hasNext()) { + Map.Entry var9 = (Map.Entry)var8.next(); + var14.setRequestProperty((String)var9.getKey(), var9.getValue().toString()); + } + } + + if (var14.getResponseCode() != 200) { + throw new RuntimeException("HTTP GET Request Failed with Error code : " + var14.getResponseCode()); + } + + InputStream var15 = var14.getInputStream(); + byte[] var16 = new byte[1024]; + boolean var10 = true; + + int var17; + while((var17 = var15.read(var16)) != -1) { + var4.append(new String(var16, 0, var17, "UTF-8")); + } + } catch (MalformedURLException var11) { + FineLoggerFactory.getLogger().error("--*error*--get请求错误1", var11); + } catch (IOException var12) { + FineLoggerFactory.getLogger().error("--*error*--get请求错误2", var12); + } + + return var4.toString(); + } + + public boolean JudgeIsMobile(HttpServletRequest var1) { + boolean var2 = false; + String[] var3 = new String[]{"iphone", "android", "ipad", "phone", "mobile", "wap", "netfront", "java", "opera mobi", "opera mini", "ucweb", "windows ce", "symbian", "series", "webos", "sony", "blackberry", "dopod", "nokia", "samsung", "palmsource", "xda", "pieplus", "meizu", "midp", "cldc", "motorola", "foma", "docomo", "up.browser", "up.link", "blazer", "helio", "hosin", "huawei", "novarra", "coolpad", "webos", "techfaith", "palmsource", "alcatel", "amoi", "ktouch", "nexian", "ericsson", "philips", "sagem", "wellcom", "bunjalloo", "maui", "smartphone", "iemobile", "spice", "bird", "zte-", "longcos", "pantech", "gionee", "portalmmm", "jig browser", "hiptop", "benq", "haier", "^lct", "320x320", "240x320", "176x220", "w3c ", "acs-", "alav", "alca", "amoi", "audi", "avan", "benq", "bird", "blac", "blaz", "brew", "cell", "cldc", "cmd-", "dang", "doco", "eric", "hipt", "inno", "ipaq", "java", "jigs", "kddi", "keji", "leno", "lg-c", "lg-d", "lg-g", "lge-", "maui", "maxo", "midp", "mits", "mmef", "mobi", "mot-", "moto", "mwbp", "nec-", "newt", "noki", "oper", "palm", "pana", "pant", "phil", "play", "port", "prox", "qwap", "sage", "sams", "sany", "sch-", "sec-", "send", "seri", "sgh-", "shar", "sie-", "siem", "smal", "smar", "sony", "sph-", "symb", "t-mo", "teli", "tim-", "tosh", "tsm-", "upg1", "upsi", "vk-v", "voda", "wap-", "wapa", "wapi", "wapp", "wapr", "webc", "winw", "winw", "xda", "xda-", "Googlebot-Mobile"}; + if (var1.getHeader("User-Agent") != null) { + String var4 = var1.getHeader("User-Agent"); + String[] var5 = var3; + int var6 = var3.length; + + for(int var7 = 0; var7 < var6; ++var7) { + String var8 = var5[var7]; + if (var4.toLowerCase().indexOf(var8) >= 0 && var4.toLowerCase().indexOf("windows nt") <= 0 && var4.toLowerCase().indexOf("macintosh") <= 0) { + var2 = true; + break; + } + } + } + + return var2; + } + + public String getParams(String var1) { + StringBuffer var2 = new StringBuffer(); + if (!StringUtils.isEmpty(var1) && var1.contains("accessToken")) { + String[] var3 = var1.split("&"); + + for(int var4 = 0; var4 < var3.length; ++var4) { + String[] var5 = var3[var4].split("="); + if (var5.length <= 2 && StringUtils.isNotEmpty(var5[0]) && !"accessToken".equals(var5[0])) { + var2.append(var5[0]); + var2.append("="); + if (var5.length == 2) { + var2.append(var5[1]); + } + + var2.append("&"); + } + } + + String var6 = var2.toString(); + if (var6.contains("&")) { + int var7 = var6.lastIndexOf("&"); + var6 = var6.substring(0, var7); + } + + return var6; + } else { + FineLoggerFactory.getLogger().info("--*error*--The request parameter is null."); + return var1; + } + } +} \ No newline at end of file diff --git a/JSD-9851(SLN5024)/美云智数单点登录(1).docx b/JSD-9851(SLN5024)/美云智数单点登录(1).docx new file mode 100644 index 0000000000000000000000000000000000000000..3606a9c3ca391ddf168c1daa4d3d41e161b1af01 GIT binary patch literal 34077 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 literal 0 HcmV?d00001 diff --git a/JSD-9851(SLN5987)/plugin.xml b/JSD-9851(SLN5987)/plugin.xml new file mode 100644 index 0000000..264374c --- /dev/null +++ b/JSD-9851(SLN5987)/plugin.xml @@ -0,0 +1,20 @@ + + com.fr.plugin.sln5987.login + + yes + 1.0.5 + 10.0 + 2018-07-31 + fr.open + + + com.fr.plugin.sln5987.login + + + + + + + + \ No newline at end of file diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/Constants.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/Constants.java new file mode 100644 index 0000000..7a46b56 --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/Constants.java @@ -0,0 +1,19 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login; + +public class Constants { + public static final String PLUGIN_ID = "com.fr.plugin.sln5987.login"; + public static final String PLUGIN_CONFIG_GROUP = "EHR单点配置"; + public static final String ERRB = "POST"; + public static final String CONTENT_TYPE = "application/json"; + public static final String CANONICALIZED_QS_HEADERS = ""; + public static final String ACTION = "GetUserInfo"; + public static final String SOURCE = "fanruan"; + + public Constants() { + } +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/EhrLoginRequestFilter.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/EhrLoginRequestFilter.java new file mode 100644 index 0000000..ff354b3 --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/EhrLoginRequestFilter.java @@ -0,0 +1,154 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login; + +import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; +import com.fr.decision.mobile.terminal.TerminalHandler; +import com.fr.decision.webservice.bean.authentication.LoginClientBean; +import com.fr.decision.webservice.utils.WebServiceUtils; +import com.fr.decision.webservice.v10.login.LoginService; +import com.fr.decision.webservice.v10.login.TokenResource; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.sln5987.login.config.EhrPluginSimpleConfig; +import com.fr.plugin.sln5987.login.service.IdpAuthService; +import com.fr.plugin.sln5987.login.utils.FilterHelper; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.stable.StringUtils; +import com.fr.web.utils.WebUtils; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +@EnableMetrics +public class EhrLoginRequestFilter extends AbstractGlobalRequestFilterProvider { + public EhrLoginRequestFilter() { + } + + public void init(FilterConfig paramFilterConfig) { + } + + public String filterName() { + return "EhrLoginRequestFilter"; + } + + public String[] urlPatterns() { + return new String[]{"/decision/*"}; + } + + public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { + String url = WebUtils.getOriginalURL(request); + FineLoggerFactory.getLogger().info("FRLOG:进入拦截器"); + + String debugHtml; + try { + HttpSession session = request.getSession(true); + debugHtml = request.getParameter("ehrToken"); + if (StringUtils.isNotEmpty(debugHtml)) { + EhrPluginSimpleConfig config = EhrPluginSimpleConfig.getInstance(); + String index = config.getIndex(); + + if (isLogin(request)) { + + String afterUrl = IdpAuthService.getLoginAfterUrl(request); + afterUrl = index+afterUrl.substring(afterUrl.indexOf("decision")+8,afterUrl.length()); + FineLoggerFactory.getLogger().info("FRLOG:login"); + + FineLoggerFactory.getLogger().info("FRLOG:afterUrl"+afterUrl); + response.sendRedirect(afterUrl); + } else { + FineLoggerFactory.getLogger().info("FRLOG:nologin"); + + IdpAuthService var10000 = FilterHelper.authService; + String urlencodeToken = IdpAuthService.getParamByName(request, "ehrToken"); + this.doOauth(request, response, filterChain, urlencodeToken,config); + } + } else { + filterChain.doFilter(request, response); + } + } catch (Exception var8) { + Exception e = var8; + + try { + FineLoggerFactory.getLogger().error("单点登录失败" + e.getMessage(), e); + debugHtml = WebServiceUtils.generateUnavailableWebPage("没有权限,无法登陆", "", ""); + WebUtils.printAsString(response, debugHtml); + } catch (Exception var7) { + FineLoggerFactory.getLogger().error(var7.getMessage(), var7); + } + } + } + + public static boolean isLogin(HttpServletRequest request) { + return LoginService.getInstance().isLogged(request); + + } + + public static String getName(HttpServletRequest request) { + String oldToken = TokenResource.COOKIE.getToken(request); + + try { + LoginClientBean loginClientBean = LoginService.getInstance().loginStatusValid(oldToken, (TerminalHandler)null); + return loginClientBean.getUsername(); + } catch (Exception var3) { + FineLoggerFactory.getLogger().error("token校验失败:" + oldToken, var3); + return ""; + } + } + + private void doOauth(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain, String token,EhrPluginSimpleConfig config) throws Exception { + String index = config.getIndex(); + JSONObject userData = FilterHelper.authService.getUserInfo(token,config); + if (userData == null) { + FineLoggerFactory.getLogger().error("未获取到用户信息,返回null"); + String debugHtml = WebServiceUtils.generateUnavailableWebPage("未获取到用户信息", "", ""); + WebUtils.printAsString(response, debugHtml); + } else { + JSONObject errorObj = userData.getJSONObject("error"); + String username; + if (errorObj != null) { + username = errorObj.getString("error_msg"); + if (StringUtils.isNotEmpty(username)) { + FineLoggerFactory.getLogger().error("获取用户信息失败,返回errorMsg {},", new Object[]{username}); + String debugHtml = WebServiceUtils.generateUnavailableWebPage(username, "", ""); + WebUtils.printAsString(response, debugHtml); + return; + } + } + + username = ""; + JSONObject returnObj = userData.getJSONObject("return"); + if (returnObj != null) { + JSONObject msgObj = returnObj.getJSONObject("msg"); + if (returnObj != null) { + username = msgObj.getString("ID"); + } + } + + String debugHtml; + if (StringUtils.isNotEmpty(username)) { + if (FilterHelper.checkUserValid(username)) { + FilterHelper.login(username, request, response); + String afterUrl =IdpAuthService.getLoginAfterUrl(request); + afterUrl = index+afterUrl.substring(afterUrl.indexOf("decision")+8,afterUrl.length()); + FineLoggerFactory.getLogger().info("FRLOG:afterUrl"+afterUrl); + + response.sendRedirect(afterUrl); + } else { + FineLoggerFactory.getLogger().error("用户不存在或者无效,username: {}", new Object[]{username}); + debugHtml = WebServiceUtils.generateUnavailableWebPage("用户不存在或者无效", "", ""); + WebUtils.printAsString(response, debugHtml); + } + } else { + FineLoggerFactory.getLogger().error("解析用户JSON失败"); + debugHtml = WebServiceUtils.generateUnavailableWebPage("解析用户信息失败,无法登陆", "", ""); + WebUtils.printAsString(response, debugHtml); + } + } + } +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/EhrPluginSimpleConfig.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/EhrPluginSimpleConfig.java new file mode 100644 index 0000000..0f490a1 --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/EhrPluginSimpleConfig.java @@ -0,0 +1,122 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login.config; + +import com.fr.config.ConfigContext; +import com.fr.config.DefaultConfiguration; +import com.fr.config.Identifier; +import com.fr.config.Status; +import com.fr.config.Visualization; +import com.fr.config.holder.Conf; +import com.fr.config.holder.factory.Holders; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.record.analyzer.EnableMetrics; + +@Visualization( + category = "EHR单点配置" +) +@EnableMetrics +public class EhrPluginSimpleConfig extends DefaultConfiguration { + private static volatile EhrPluginSimpleConfig config = null; + @Identifier( + value = "userInfoUrl", + name = "用户信息接口", + description = "用户信息接口", + status = Status.SHOW + ) + private Conf userInfoUrl = Holders.simple("https://xxx/UniversalApi/GetUserInfo"); + @Identifier( + value = "accessKeyId", + name = "AccessKeyId", + description = "AccessKeyId", + status = Status.SHOW + ) + private Conf accessKeyId = Holders.simple("xxx"); + @Identifier( + value = "accessKeySecret", + name = "AccessKeySecret", + description = "AccessKeySecret", + status = Status.SHOW + ) + private Conf accessKeySecret = Holders.simple("xxx"); + @Identifier( + value = "aesKey", + name = "AES密钥", + description = "AES密钥", + status = Status.SHOW + ) + private Conf aesKey = Holders.simple("xxx"); + + @Identifier( + value = "index", + name = "帆软首页", + description = "帆软首页", + status = Status.SHOW + ) + private Conf index = Holders.simple("xxx"); + + public EhrPluginSimpleConfig() { + } + +// @Focus(id="com.fr.plugin.sln5987.login", text = "EHR单点配置", source = Original.PLUGIN) + public static EhrPluginSimpleConfig getInstance() { + if (config == null) { + config = (EhrPluginSimpleConfig)ConfigContext.getConfigInstance(EhrPluginSimpleConfig.class); + } + + return config; + } + + public String getUserInfoUrl() { + return (String)this.userInfoUrl.get(); + } + + public void setUserInfoUrl(String userInfoUrl) { + this.userInfoUrl.set(userInfoUrl); + } + + public String getAccessKeyId() { + return (String)this.accessKeyId.get(); + } + + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId.set(accessKeyId); + } + + public String getAccessKeySecret() { + return (String)this.accessKeySecret.get(); + } + + public void setAccessKeySecret(String accessKeySecret) { + this.accessKeySecret.set(accessKeySecret); + } + + public String getAesKey() { + return (String)this.aesKey.get(); + } + + public void setAesKey(String aesKey) { + this.aesKey.set(aesKey); + } + + public String getIndex() { + return (String)this.index.get(); + } + + public void setIndex(String aesKey) { + this.index.set(aesKey); + } + + public Object clone() throws CloneNotSupportedException { + EhrPluginSimpleConfig cloned = (EhrPluginSimpleConfig)super.clone(); + cloned.userInfoUrl = (Conf)this.userInfoUrl.clone(); + cloned.accessKeyId = (Conf)this.accessKeyId.clone(); + cloned.accessKeySecret = (Conf)this.accessKeySecret.clone(); + cloned.aesKey = (Conf)this.aesKey.clone(); + return cloned; + } +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/PluginInitializeFilterBridge.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/PluginInitializeFilterBridge.java new file mode 100644 index 0000000..3f63548 --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/PluginInitializeFilterBridge.java @@ -0,0 +1,25 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login.config; + +import com.fr.decision.fun.impl.AbstractEmbedRequestFilterProvider; +import java.io.IOException; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class PluginInitializeFilterBridge extends AbstractEmbedRequestFilterProvider { + public PluginInitializeFilterBridge() { + } + + public void init(FilterConfig filterConfig) { + EhrPluginSimpleConfig.getInstance(); + } + + public void filter(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException, ServletException { + } +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/PluginInitializeMonitor.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/PluginInitializeMonitor.java new file mode 100644 index 0000000..276acea --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/config/PluginInitializeMonitor.java @@ -0,0 +1,21 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login.config; + +import com.fr.plugin.context.PluginContext; +import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; + +public class PluginInitializeMonitor extends AbstractPluginLifecycleMonitor { + public PluginInitializeMonitor() { + } + + public void afterRun(PluginContext pluginContext) { + EhrPluginSimpleConfig.getInstance(); + } + + public void beforeStop(PluginContext pluginContext) { + } +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/service/IdpAuthService.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/service/IdpAuthService.java new file mode 100644 index 0000000..5a70e42 --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/service/IdpAuthService.java @@ -0,0 +1,128 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login.service; + +import com.fr.base.Base64; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.sln5987.login.config.EhrPluginSimpleConfig; +import com.fr.plugin.sln5987.login.utils.AESEncryptUtil; +import com.fr.plugin.sln5987.login.utils.HttpClientUtils; +import com.fr.plugin.sln5987.login.utils.MD5Util; +import com.fr.plugin.sln5987.login.utils.Sha1Util; +import com.fr.stable.StringUtils; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.TimeZone; +import javax.servlet.http.HttpServletRequest; + +public class IdpAuthService { + public IdpAuthService() { + } + + public JSONObject getUserInfo(String accessToken,EhrPluginSimpleConfig cfg) { + try { + String userInfoUrl = cfg.getUserInfoUrl(); + String accessKeyId = cfg.getAccessKeyId(); + String accessKeySecret = cfg.getAccessKeySecret(); + String aesKey = cfg.getAesKey(); + String errb = "POST"; + String contentType = "application/json"; + String canonicalizedQSHeaders = ""; + if (!StringUtils.isEmpty(userInfoUrl) && !StringUtils.isEmpty(accessKeyId) && !StringUtils.isEmpty(accessKeySecret)) { + JSONObject params = new JSONObject(); + JSONObject data = new JSONObject(); + data.put("action", "GetUserInfo"); + data.put("source", "fanruan"); + params.put("data", data); + Date date = new Date(); + DateFormat fmt = new SimpleDateFormat("EEE d MMM yyyy HH:mm:ss 'GMT'", Locale.US); + fmt.setTimeZone(TimeZone.getTimeZone("GMT+8")); + String nowdate = fmt.format(date); + String contentMD5 = Base64.encode(MD5Util.encryptByMD5(params.toString())); + String encryptKey = errb + "\n" + contentMD5 + "\n" + contentType + "\n" + nowdate + canonicalizedQSHeaders; + byte[] sha1 = Sha1Util.HmacSHA1Encrypt(encryptKey, accessKeySecret); + String Signature = Base64.encode(sha1); + String authorization = "QuickSwanEHR" + accessKeyId + ":" + Signature; + Map headers = new HashMap(); + headers.put("Authorization", authorization); + headers.put("Access-Token", accessToken); + headers.put("Date", nowdate); + headers.put("Content-Type", contentType); + String response = HttpClientUtils.doPostJson(userInfoUrl, params.toString(), headers); + if (StringUtils.isEmpty(response)) { + return null; + } else { + String decodeStr = AESEncryptUtil.decode(aesKey, response); + return StringUtils.isEmpty(decodeStr) ? null : new JSONObject(decodeStr); + } + } else { + return null; + } + } catch (Exception var23) { + FineLoggerFactory.getLogger().error(var23.getMessage(), var23); + return null; + } + } + + + + public static String getLoginAfterUrl(HttpServletRequest request) { + String requestURL = request.getRequestURL().toString(); + String queryString = request.getQueryString(); + new HashMap(); + if (StringUtils.isEmpty(queryString)) { + return requestURL; + } else { + String param = ""; + String[] split = queryString.split("&"); + StringBuffer paramSb = new StringBuffer(); + + for(int i = 0; i < split.length; ++i) { + param = split[i]; + if (!StringUtils.isEmpty(param) && !param.contains("ehrToken=")) { + paramSb.append("&").append(param); + } + } + + param = paramSb.toString(); + if (param.length() > 1) { + requestURL = requestURL + "?" + param.substring(1); + } + + return requestURL; + } + } + + public static String getParamByName(HttpServletRequest request, String paramName) { + String queryString = request.getQueryString(); + String paramVal = ""; + String[] split = queryString.split("&"); + new StringBuffer(); + String param = ""; + + for(int i = 0; i < split.length; ++i) { + param = split[i]; + if (StringUtils.isNotEmpty(param) && param.contains(paramName)) { + break; + } + } + + if (StringUtils.isNotEmpty(param)) { + String[] params = param.split("="); + if (params.length > 1) { + paramVal = params[1]; + } + } + + System.out.println(paramVal); + return paramVal; + } +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/AESEncryptUtil.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/AESEncryptUtil.java new file mode 100644 index 0000000..c88af60 --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/AESEncryptUtil.java @@ -0,0 +1,47 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login.utils; + +import com.fr.log.FineLoggerFactory; +import com.fr.third.org.apache.commons.codec.binary.Hex; +import java.security.Key; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; + +public class AESEncryptUtil { + private static final String CipherMode = "AES"; + + public AESEncryptUtil() { + } + + public static String encode(String thisKey, String data) { + try { + Key key = new SecretKeySpec(Hex.decodeHex(thisKey), "AES"); + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(2, key); + byte[] result = cipher.doFinal(Hex.decodeHex(data)); + return new String(result); + } catch (Exception var5) { + FineLoggerFactory.getLogger().error("AES加密失败", var5); + return null; + } + } + + public static String decode(String thisKey, String data) { + try { + Key key = new SecretKeySpec(Hex.decodeHex(thisKey), "AES"); + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(2, key); + byte[] result = cipher.doFinal(Hex.decodeHex(data)); + return new String(result); + } catch (Exception var5) { + FineLoggerFactory.getLogger().error("AES解密失败", var5); + return null; + } + } + + +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/FilterHelper.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/FilterHelper.java new file mode 100644 index 0000000..d0c3cba --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/FilterHelper.java @@ -0,0 +1,141 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login.utils; + +import com.fr.decision.authority.data.User; +import com.fr.decision.mobile.terminal.TerminalHandler; +import com.fr.decision.webservice.bean.authentication.LoginClientBean; +import com.fr.decision.webservice.v10.login.LoginService; +import com.fr.decision.webservice.v10.login.TokenResource; +import com.fr.decision.webservice.v10.user.UserService; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.sln5987.login.service.IdpAuthService; +import com.fr.stable.StringUtils; +import com.fr.web.utils.WebUtils; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +public class FilterHelper { + public static final IdpAuthService authService = new IdpAuthService(); + private static final String[] IGNORE_PATH = new String[]{"decision/file?path", "decision/resources?path", "decision/view/form?op=emb", "decision/view/form?op=resource", "decision/view/report?op=interface", "decision/remote/design", "/weixin", "/plugin/public/com.fr.plugin.mobile.web/", "/image", "/login/cross/domain"}; + + public FilterHelper() { + } + + public static boolean isIgnoreUrl(HttpServletRequest req) { + String url = WebUtils.getOriginalURL(req); + String[] var2 = IGNORE_PATH; + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + String path = var2[var4]; + if (url.contains(path)) { + return true; + } + } + + return false; + } + + public static boolean isLogout(HttpServletRequest req) { + HttpSession session = req.getSession(true); + String url = WebUtils.getOriginalURL(req); + return url.contains("/logout") || session.getAttribute("_cas_logout_") != null; + } + + public static boolean checkTokenValid(HttpServletRequest req, String token, String currentUserName) { + try { + if (StringUtils.isNotEmpty(currentUserName) && StringUtils.isNotEmpty(token)) { + LoginClientBean clientBean = LoginService.getInstance().loginStatusValid(token, (TerminalHandler)null); + if (clientBean != null) { + return currentUserName.equals(clientBean.getUsername()); + } + + return false; + } + } catch (Exception var4) { + FineLoggerFactory.getLogger().error("req = " + req.getRequestURL()); + FineLoggerFactory.getLogger().error("2校验token失败:", var4); + } + + return false; + } + + public static boolean checkUserValid(String username) { + if (StringUtils.isEmpty(username)) { + return false; + } else { + try { + User user = UserService.getInstance().getUserByUserName(username); + return user != null && user.isEnable(); + } catch (Exception var2) { + FineLoggerFactory.getLogger().error(var2.getMessage(), var2); + return false; + } + } + } + + public static void login(String username, HttpServletRequest req, HttpServletResponse res) throws Exception { + String oldToken = TokenResource.COOKIE.getToken(req); + if (oldToken != null && checkTokenValid(req, oldToken, username)) { +// FineLoggerFactory.getLogger().info("no need login----"); + } else { + try { + LoginService.getInstance().crossDomainLogout(req, res, ""); + } catch (Exception var5) { + FineLoggerFactory.getLogger().info("没登录"); + } + + if (JudgeIsMobile(req)) { +// FineLoggerFactory.getLogger().info("移动端请求"); + req.getSession().setAttribute("__device__", "iPhone"); + req.getSession().setAttribute("deviceType", "iPhone"); + req.getSession().setAttribute("terminal", "H5"); + } + + String token = LoginService.getInstance().login(req, res, username); +// FineLoggerFactory.getLogger().info("username = " + username); + req.setAttribute("fine_auth_token", token); + req.getSession().setAttribute("fine_auth_token", token); +// FineLoggerFactory.getLogger().info("登录成功---"); + } + + } + + public static boolean isLogin(HttpServletRequest request) { + try { + String oldToken = TokenResource.COOKIE.getToken(request); + LoginClientBean loginClientBean = LoginService.getInstance().loginStatusValid(oldToken, (TerminalHandler)null); + if (loginClientBean != null) { + return true; + } + } catch (Exception var3) { + } + + return false; + } + + private static boolean JudgeIsMobile(HttpServletRequest request) { + boolean isMobile = false; + String[] mobileAgents = new String[]{"iphone", "android", "ipad", "phone", "mobile", "wap", "netfront", "java", "opera mobi", "opera mini", "ucweb", "windows ce", "symbian", "series", "webos", "sony", "blackberry", "dopod", "nokia", "samsung", "palmsource", "xda", "pieplus", "meizu", "midp", "cldc", "motorola", "foma", "docomo", "up.browser", "up.link", "blazer", "helio", "hosin", "huawei", "novarra", "coolpad", "webos", "techfaith", "palmsource", "alcatel", "amoi", "ktouch", "nexian", "ericsson", "philips", "sagem", "wellcom", "bunjalloo", "maui", "smartphone", "iemobile", "spice", "bird", "zte-", "longcos", "pantech", "gionee", "portalmmm", "jig browser", "hiptop", "benq", "haier", "^lct", "320x320", "240x320", "176x220", "w3c ", "acs-", "alav", "alca", "amoi", "audi", "avan", "benq", "bird", "blac", "blaz", "brew", "cell", "cldc", "cmd-", "dang", "doco", "eric", "hipt", "inno", "ipaq", "java", "jigs", "kddi", "keji", "leno", "lg-c", "lg-d", "lg-g", "lge-", "maui", "maxo", "midp", "mits", "mmef", "mobi", "mot-", "moto", "mwbp", "nec-", "newt", "noki", "oper", "palm", "pana", "pant", "phil", "play", "port", "prox", "qwap", "sage", "sams", "sany", "sch-", "sec-", "send", "seri", "sgh-", "shar", "sie-", "siem", "smal", "smar", "sony", "sph-", "symb", "t-mo", "teli", "tim-", "tosh", "tsm-", "upg1", "upsi", "vk-v", "voda", "wap-", "wapa", "wapi", "wapp", "wapr", "webc", "winw", "winw", "xda", "xda-", "Googlebot-Mobile"}; + if (request.getHeader("User-Agent") != null) { + String agent = request.getHeader("User-Agent"); + String[] var4 = mobileAgents; + int var5 = mobileAgents.length; + + for(int var6 = 0; var6 < var5; ++var6) { + String mobileAgent = var4[var6]; + if (agent.toLowerCase().indexOf(mobileAgent) >= 0 && agent.toLowerCase().indexOf("windows nt") <= 0 && agent.toLowerCase().indexOf("macintosh") <= 0) { + isMobile = true; + break; + } + } + } + + return isMobile; + } +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/HttpClientUtils.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/HttpClientUtils.java new file mode 100644 index 0000000..0cd3c77 --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/HttpClientUtils.java @@ -0,0 +1,353 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login.utils; + +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.collections4.MapUtils; +import com.fr.third.org.apache.http.Consts; +import com.fr.third.org.apache.http.HeaderIterator; +import com.fr.third.org.apache.http.HttpEntity; +import com.fr.third.org.apache.http.HttpResponse; +import com.fr.third.org.apache.http.NameValuePair; +import com.fr.third.org.apache.http.ParseException; +import com.fr.third.org.apache.http.client.config.RequestConfig; +import com.fr.third.org.apache.http.client.entity.UrlEncodedFormEntity; +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.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.PlainConnectionSocketFactory; +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.conn.ssl.TrustStrategy; +import com.fr.third.org.apache.http.entity.ContentType; +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.impl.conn.PoolingHttpClientConnectionManager; +import com.fr.third.org.apache.http.message.BasicNameValuePair; +import com.fr.third.org.apache.http.ssl.SSLContextBuilder; +import com.fr.third.org.apache.http.util.EntityUtils; +import java.io.IOException; +import java.security.KeyStore; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +public class HttpClientUtils { + private static final Integer CONNECTION_TIMEOUT = 200000; + private static final Integer SO_TIMEOUT = 1200000; + private static final Integer CONN_MANAGER_TIMEOUT = 500; + private static final String http = "http"; + private static final String https = "https"; + private static SSLConnectionSocketFactory sslsf = null; + private static PoolingHttpClientConnectionManager cm = null; + private static SSLContextBuilder builder = null; + + public HttpClientUtils() { + } + + public static String post(String url, JSONObject params, Map header, HttpEntity entity) { + String result = ""; + CloseableHttpClient httpClient = null; + HttpResponse httpResponse = null; + HttpEntity resEntity = null; + + try { + httpClient = getHttpClient(); + HttpPost httpPost = new HttpPost(url); + if (MapUtils.isNotEmpty(header)) { + Iterator var9 = header.entrySet().iterator(); + + while(var9.hasNext()) { + Entry entry = (Entry)var9.next(); + httpPost.addHeader((String)entry.getKey(), (String)entry.getValue()); + } + } + + if (params != null) { + entity = new StringEntity(params.toString(), "utf-8"); + } + + if (entity != null) { + httpPost.setEntity((HttpEntity)entity); + } + + httpResponse = httpClient.execute(httpPost); + int statusCode = httpResponse.getStatusLine().getStatusCode(); + if (statusCode == 200) { + resEntity = httpResponse.getEntity(); + result = EntityUtils.toString(resEntity); + } else { + readHttpResponse(httpResponse); + } + } catch (Exception var14) { + FineLoggerFactory.getLogger().error("请求发送失败:", var14); + throw new RuntimeException("请求发送失败,URL:" + url + ",params:" + params); + } finally { + closeConnection(httpClient, httpResponse, resEntity); + } + + return result; + } + + public static String get(String url, Map params, Map header) { + String result = ""; + CloseableHttpClient httpClient = null; + HttpResponse httpResponse = null; + HttpEntity resEntity = null; + + try { + HttpGet httpGet = null; + List formParams = new ArrayList(); + Iterator var9; + Entry entry; + if (MapUtils.isNotEmpty(params)) { + var9 = params.entrySet().iterator(); + + while(var9.hasNext()) { + entry = (Entry)var9.next(); + formParams.add(new BasicNameValuePair((String)entry.getKey(), (String)entry.getValue())); + } + + UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(formParams, Consts.UTF_8); + url = url + "?" + EntityUtils.toString(urlEncodedFormEntity); + } + + httpGet = new HttpGet(url); + if (MapUtils.isNotEmpty(header)) { + var9 = header.entrySet().iterator(); + + while(var9.hasNext()) { + entry = (Entry)var9.next(); + httpGet.addHeader((String)entry.getKey(), (String)entry.getValue()); + } + } + + httpClient = getHttpClient(); + httpResponse = httpClient.execute(httpGet); + int statusCode = httpResponse.getStatusLine().getStatusCode(); + if (statusCode == 200) { + resEntity = httpResponse.getEntity(); + result = EntityUtils.toString(resEntity); + } else { + readHttpResponse(httpResponse); + } + } catch (Exception var14) { + FineLoggerFactory.getLogger().error("请求发送失败:", var14); + throw new RuntimeException("请求发送失败,URL:" + url + ",params:" + params); + } finally { + closeConnection(httpClient, httpResponse, resEntity); + } + + return result; + } + + public static String getString(String url, Map params, Map header) { + String result = ""; + CloseableHttpClient httpClient = null; + HttpResponse httpResponse = null; + HttpEntity resEntity = null; + + try { + HttpGet httpGet = new HttpGet(url); + if (MapUtils.isNotEmpty(header)) { + Iterator var8 = header.entrySet().iterator(); + + while(var8.hasNext()) { + Entry entry = (Entry)var8.next(); + httpGet.addHeader((String)entry.getKey(), (String)entry.getValue()); + } + } + + httpClient = getHttpClient(); + httpResponse = httpClient.execute(httpGet); + int statusCode = httpResponse.getStatusLine().getStatusCode(); + if (statusCode == 200) { + resEntity = httpResponse.getEntity(); + result = EntityUtils.toString(resEntity); + } else { + readHttpResponse(httpResponse); + } + } catch (Exception var13) { + FineLoggerFactory.getLogger().error("请求发送失败:", var13); + throw new RuntimeException("请求发送失败,URL:" + url + ",params:" + params); + } finally { + closeConnection(httpClient, httpResponse, resEntity); + } + + return result; + } + + public static CloseableHttpClient getHttpClient() { + return HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm).setConnectionManagerShared(true).setDefaultRequestConfig(RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT).setConnectionRequestTimeout(CONN_MANAGER_TIMEOUT).setSocketTimeout(SO_TIMEOUT).build()).build(); + } + + public static String readHttpResponse(HttpResponse httpResponse) throws ParseException, IOException { + StringBuilder builder = new StringBuilder(); + HttpEntity entity = httpResponse.getEntity(); + builder.append("status:" + httpResponse.getStatusLine()); + builder.append("headers:"); + HeaderIterator iterator = httpResponse.headerIterator(); + + while(iterator.hasNext()) { + builder.append("\t" + iterator.next()); + } + + if (entity != null) { + String responseString = EntityUtils.toString(entity); + builder.append("response length:" + responseString.length()); + builder.append("response content:" + responseString.replace("\r\n", "")); + } + + return builder.toString(); + } + + public static void closeConnection(CloseableHttpClient httpClient, HttpResponse httpResponse, HttpEntity httpEntity) { + if (httpEntity != null) { + try { + EntityUtils.consume(httpEntity); + } catch (IOException var6) { + FineLoggerFactory.getLogger().error("关闭HttpEntity出错:{}", new Object[]{var6.getMessage()}); + } + } + + if (httpResponse != null) { + try { + ((CloseableHttpResponse)httpResponse).close(); + } catch (IOException var5) { + FineLoggerFactory.getLogger().error("关闭HttpResponse出错:{}", new Object[]{var5.getMessage()}); + } + } + + if (httpClient != null) { + try { + httpClient.close(); + } catch (IOException var4) { + FineLoggerFactory.getLogger().error("关闭HttpClient出错:{}", new Object[]{var4.getMessage()}); + } + } + + } + + public static String postMsg(String url, Map params) { + CloseableHttpClient httpClient = null; + CloseableHttpResponse response = null; + String resultString = ""; + + try { + httpClient = getHttpClient(); + HttpPost post = new HttpPost(url); + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(10000).setConnectionRequestTimeout(10000).setSocketTimeout(10000).build(); + post.setConfig(requestConfig); + post.setHeader("Content-Type", "application/json; charset=UTF-8"); + List formParams = new ArrayList(); + if (MapUtils.isNotEmpty(params)) { + Iterator var8 = params.entrySet().iterator(); + + while(var8.hasNext()) { + Entry entry = (Entry)var8.next(); + formParams.add(new BasicNameValuePair((String)entry.getKey(), (String)entry.getValue())); + } + + UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(formParams, Consts.UTF_8); + post.setEntity(urlEncodedFormEntity); + } + + response = httpClient.execute(post); + if (response.getStatusLine().getStatusCode() == 200) { + resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); + } + } catch (IOException var18) { + FineLoggerFactory.getLogger().error(var18.getMessage(), var18); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException var17) { + var17.printStackTrace(); + } + + } + + return resultString; + } + + public static String doPostJson(String url, String json, Map headers) throws Exception { + CloseableHttpClient httpClient = null; + CloseableHttpResponse response = null; + String resultString = ""; + HttpEntity resEntity = null; + + Iterator var8; + try { + httpClient = getHttpClient(); + HttpPost httpPost = new HttpPost(url); + if (MapUtils.isNotEmpty(headers)) { + var8 = headers.entrySet().iterator(); + + while(var8.hasNext()) { + Entry entry = (Entry)var8.next(); + httpPost.addHeader((String)entry.getKey(), (String)entry.getValue()); + } + } + + if (StringUtils.isNotEmpty(json)) { + StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON); + httpPost.setEntity(entity); + } + + response = httpClient.execute(httpPost); + int statusCode = response.getStatusLine().getStatusCode(); + resEntity = response.getEntity(); + if (statusCode == 200) { + resultString = EntityUtils.toString(resEntity); + } else { + resultString = EntityUtils.toString(resEntity); + FineLoggerFactory.getLogger().error("HTTP请求返回值不是200, 是 {}", new Object[]{statusCode}); + } + + String var17 = resultString; + return var17; + } catch (Exception var13) { + FineLoggerFactory.getLogger().error("请求发送失败:", var13); + var8 = null; + } finally { + closeConnection(httpClient, response, (HttpEntity)null); + } + + return ""; + } + + static { + try { + builder = new SSLContextBuilder(); + builder.loadTrustMaterial((KeyStore)null, new TrustStrategy() { + public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { + return true; + } + }); + sslsf = new SSLConnectionSocketFactory(builder.build(), new String[]{"TLSv1"}, (String[])null, NoopHostnameVerifier.INSTANCE); + RegistryBuilder registryBuilder = RegistryBuilder.create(); + Registry registry = registryBuilder.register("http", new PlainConnectionSocketFactory()).register("https", sslsf).build(); + cm = new PoolingHttpClientConnectionManager(registry); + cm.setMaxTotal(200); + cm.setDefaultMaxPerRoute(20); + } catch (Exception var1) { + FineLoggerFactory.getLogger().error("HttpClientUtils 初始化失败", var1); + } + + } +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/MD5Util.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/MD5Util.java new file mode 100644 index 0000000..d06f3dc --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/MD5Util.java @@ -0,0 +1,61 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login.utils; + +import java.nio.charset.Charset; +import java.security.MessageDigest; + +public class MD5Util { + public MD5Util() { + } + + public static byte[] encryptByMD5(String plainText) throws Exception { + if (plainText != null && !"".equals(plainText)) { + byte[] plainTextBytes = plainText.getBytes(); + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(plainTextBytes); + byte[] digest = md.digest(); + return digest; + } else { + throw new NullPointerException("参数不能为空"); + } + } + + public static String encryptByMD5Hex(String plainText) throws Exception { + if (plainText != null && !"".equals(plainText)) { + byte[] plainTextBytes = plainText.getBytes(Charset.defaultCharset()); + MessageDigest sha = MessageDigest.getInstance("MD5"); + sha.update(plainTextBytes); + byte[] digest = sha.digest(); + String encrypt = byteToHex(digest); + return encrypt; + } else { + throw new NullPointerException("参数不能为空"); + } + } + + public static String byteToHex(byte[] b) { + if (b == null) { + throw new IllegalArgumentException("Argument b ( byte array ) is null! "); + } else { + String hs = ""; + String stmp = ""; + + for(int n = 0; n < b.length; ++n) { + stmp = Integer.toHexString(b[n] & 255); + if (stmp.length() == 1) { + hs = hs + "0" + stmp; + } else { + hs = hs + stmp; + } + } + + return hs.toUpperCase(); + } + } + + +} diff --git a/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/Sha1Util.java b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/Sha1Util.java new file mode 100644 index 0000000..a8b4d3e --- /dev/null +++ b/JSD-9851(SLN5987)/src/main/java/com/fr/plugin/sln5987/login/utils/Sha1Util.java @@ -0,0 +1,27 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln5987.login.utils; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; + +public class Sha1Util { + private static final String MAC_NAME = "HmacSHA1"; + private static final String ENCODING = "UTF-8"; + + public Sha1Util() { + } + + public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception { + byte[] data = encryptKey.getBytes("UTF-8"); + SecretKey secretKey = new SecretKeySpec(data, "HmacSHA1"); + Mac mac = Mac.getInstance("HmacSHA1"); + mac.init(secretKey); + byte[] text = encryptText.getBytes("UTF-8"); + return mac.doFinal(text); + } +} diff --git a/JSD-9851(SLN6735)/plugin.xml b/JSD-9851(SLN6735)/plugin.xml new file mode 100644 index 0000000..be8ebec --- /dev/null +++ b/JSD-9851(SLN6735)/plugin.xml @@ -0,0 +1,19 @@ + + com.fr.plugin.sln6735.rsa + + yes + 1.0.2 + 10.0 + 2018-07-31 + fr.open + + + com.fr.plugin.sln6735.rsa + + + + + + + \ No newline at end of file diff --git a/JSD-9851(SLN6735)/src/main/java/com/fr/plugin/sln6735/rsa/RsaConfig.java b/JSD-9851(SLN6735)/src/main/java/com/fr/plugin/sln6735/rsa/RsaConfig.java new file mode 100644 index 0000000..9d75563 --- /dev/null +++ b/JSD-9851(SLN6735)/src/main/java/com/fr/plugin/sln6735/rsa/RsaConfig.java @@ -0,0 +1,69 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln6735.rsa; + +import com.fr.config.ConfigContext; +import com.fr.config.DefaultConfiguration; +import com.fr.config.Identifier; +import com.fr.config.Status; +import com.fr.config.Visualization; +import com.fr.config.holder.Conf; +import com.fr.config.holder.factory.Holders; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.record.analyzer.EnableMetrics; + +@Visualization( + category = "Rsa配置" +) +@EnableMetrics +public class RsaConfig extends DefaultConfiguration { + private static volatile RsaConfig config = null; + @Identifier( + value = "privateKey", + name = "私钥", + description = "用于解密", + status = Status.SHOW + ) + private Conf privateKey = Holders.simple(""); + + @Identifier( + value = "index", + name = "帆软首页", + description = "帆软首页", + status = Status.SHOW + ) + private Conf index = Holders.simple(""); + + public RsaConfig() { + } + + @Focus(id="com.fr.plugin.sln6735.rsa", text = "Rsa配置", source = Original.PLUGIN) + public static RsaConfig getInstance() { + if (config == null) { + config = (RsaConfig)ConfigContext.getConfigInstance(RsaConfig.class); + } + + return config; + } + + public String getPrivateKey() { + return (String)this.privateKey.get(); + } + + public void setPrivateKey(String text) { + this.privateKey.set(text); + } + + public String getIndex() { + return (String)this.index.get(); + } + + public void setIndex(String text) { + this.index.set(text); + } + +} diff --git a/JSD-9851(SLN6735)/src/main/java/com/fr/plugin/sln6735/rsa/RsaFilter.java b/JSD-9851(SLN6735)/src/main/java/com/fr/plugin/sln6735/rsa/RsaFilter.java new file mode 100644 index 0000000..6a1848f --- /dev/null +++ b/JSD-9851(SLN6735)/src/main/java/com/fr/plugin/sln6735/rsa/RsaFilter.java @@ -0,0 +1,135 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.fr.plugin.sln6735.rsa; + +import com.fr.decision.authority.data.User; +import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; +import com.fr.decision.webservice.v10.login.LoginService; +import com.fr.decision.webservice.v10.user.UserService; +import com.fr.log.FineLoggerFactory; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.swift.util.Strings; +import com.fr.web.utils.WebUtils; +import javax.crypto.Cipher; +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.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.security.KeyFactory; +import java.security.interfaces.RSAPrivateKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Base64; +import java.util.Iterator; +import java.util.Map; + +@EnableMetrics +public class RsaFilter extends AbstractGlobalRequestFilterProvider { + public RsaFilter() { + } + + public String filterName() { + return "RsaFilter"; + } + + public String[] urlPatterns() { + return new String[]{"/*"}; + } + + public void init(FilterConfig filterConfig) { + RsaConfig.getInstance(); + } + + public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { + String rsaToken = WebUtils.getHTTPRequestParameter(req, "rsaToken"); + if (Strings.isNotEmpty(rsaToken)) { + RsaConfig config = RsaConfig.getInstance(); +// FineLoggerFactory.getLogger().info("rsaToken = " + rsaToken); + String username = this.decrypt(rsaToken, config.getPrivateKey()); +// FineLoggerFactory.getLogger().info("username = " + username); + + try { + User user = UserService.getInstance().getUserByUserName(username); + if (user != null) { + String token = LoginService.getInstance().login(req, res, username); + req.setAttribute("fine_auth_token", token); +// FineLoggerFactory.getLogger().info("登录成功"); + String afterUrl =this.getUri(req); + afterUrl = config.getIndex()+afterUrl.substring(afterUrl.indexOf("decision")+8,afterUrl.length()); + FineLoggerFactory.getLogger().info("FRLOG:afterUrl"+afterUrl); + res.sendRedirect(afterUrl); + return; + } + } catch (Exception var9) { + FineLoggerFactory.getLogger().error("登录失败:", var9); + } + } + + try { + filterChain.doFilter(req, res); + } catch (ServletException | IOException var8) { + var8.printStackTrace(); + } + + } + + private String getUri(HttpServletRequest req) throws UnsupportedEncodingException { + String uri = req.getRequestURI(); + Map map = req.getParameterMap(); + StringBuilder paramStr = new StringBuilder(); + Iterator var5 = map.keySet().iterator(); + + while(var5.hasNext()) { + String key = (String)var5.next(); + if (!"rsaToken".equals(key)) { + paramStr.append(key).append("=").append(URLEncoder.encode(((String[])map.get(key))[0], "UTF-8")).append("&"); + } + } + + if (Strings.isNotEmpty(paramStr.toString())) { + uri = uri + "?" + paramStr.toString().substring(0, paramStr.toString().length() - 1); + } + + FineLoggerFactory.getLogger().error(uri); + return uri; + } + + private String decrypt(String str, String privateKey) { + byte[] decoded; + try { + decoded = Base64.getDecoder().decode(privateKey.replace(" ", "").replace("\n", "")); + } catch (Exception var10) { + FineLoggerFactory.getLogger().error("私钥base64解密错误", var10); + return ""; + } + + byte[] inputByte; + try { + String t = str.replaceAll("-", "+").replaceAll("\\*", "/"); + inputByte = Base64.getDecoder().decode(t.getBytes(StandardCharsets.UTF_8)); + } catch (Exception var9) { + FineLoggerFactory.getLogger().error("文本base64解密出错", var9); + return ""; + } + + try { + RSAPrivateKey priKey = (RSAPrivateKey)KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(2, priKey); + String outString = new String(cipher.doFinal(inputByte)); + return outString; + } catch (Exception var8) { + FineLoggerFactory.getLogger().error("rsa解码失败", var8); + return ""; + } + } + + +} diff --git a/JSD-9851(SLN6735)/插件说明.docx b/JSD-9851(SLN6735)/插件说明.docx new file mode 100644 index 0000000000000000000000000000000000000000..bae0d74c4cdce113e2a36e79a4182db93c0e00bc GIT binary patch literal 137232 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

aSQ;*UFx4=I>mI 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

5qgC{mPwkeDUwWS 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..fbbafd1 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ + +# open-JSD-9851 + +JSD-9851 单点+访问mac记录等\ +免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ +仅作为开发者学习参考使用!禁止用于任何商业用途!\ +为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 \ No newline at end of file diff --git a/代码提交说明.doc b/代码提交说明.doc new file mode 100644 index 0000000000000000000000000000000000000000..731fafac94832d2aa0b3d37759336c8422d8855d GIT binary patch literal 10240 zcmeHNeN2_t8GqjQUhpDUzz-17)~g~#EBNv$Xf2;2AMNE!r7bEVT!cb_0oty1>uu|* znI>Yp%q<~no3ON7mxaYHo9U9eEZNd5uDZ0-HA{wB_+wrFxa&4E)9Sn5@7#NYA}H9g z*vTQk_c`Y|&pGEg=XuWap7UPLy*GdOwVxzh3Xd>_>5O_x$%EpMYj%W$2g~Yd;2ERK z$V4Mg-Zk5{$zA{;JDa{lEAa96e<|NQ65$kCRP_#xs7>sGU4ba6sI92|l^}aVa=PLq zHENXo>}YnvoNd!%f@!k6t{+sH1!2Lmrn+__x-SBAn5beB9{Y5o?%oj9VtFX9rCWc& zlr&c)xTmJp(JJVl2+_B(5uNb@s$}tKIh56GJ}gZd&t%8nDf?mC5@n_8zO=T9;hs z-1gCPhkcj5xsRqmpLut^^|1gr*j)rZ1U>_J=KI&*E?t;inmcg?7Ir1e6QvQ(UZAto z>FNW(Gj5kBPTHTgr`@lPo${w+3$ywEvlZaUfiTy}@}cKbJwv}PSTW?9v#S5qu$7>R zpsR;O77x`r;)jME=~bqr_2*1*-bivr zM#s^eV;fyhxB%WVjg`Npa7ch{#<$DHZIPHx()#JPnog&WJ4IIOe#Rkk4j2Xk09;XG z01sdR`9Kx02j~X;KtC{9JKe9Q9?0HKKX-e($FTH&w@m@P{t3~PruM@=kw}=SG11{j zbfhI>b)~30Rw~O)sVX<58gzF#>dWJ$qSUwRV!y`kDf4w*xLo|+ z;L)G9Z$4C4Ut3A8SK9LbVV?pWm2ygFOG1C^kq25ul4awLNXh&|xEKapNo7n&M=;~m z92YpInnP$LY)!sR@!3XgQ|7rbO+D|>XELyrcgohdegsz240nV%!%T_fQ; zwL$IngCkP52)(**J-1>=KaRFLWIx*1su}g7{gvlW`%=VzkRO)$d3kJ_Ck4`s*|%Z# zZCI5)Xw-;j7w8=62CoY>KK%8JZFW8H!Fm|3Bk>}G#$T_ts`*`r9DIG??H{~Oq0odw z^1+f*9NLVEZzw4(`EF>b9dPp`Ss`m=outY}*(7R7Q_D*}3z1tpEAKOD} z{ZB};)XPEW9`9M^aanUMw-sf@Sc|MU%LV;5+4c4%d*lmi<(l(q*jq9nrhmMpXKIq4 zT@CJ$3Hz@icTK>KhK=(?-nfbA*!JmT3o38;4fvxdkU^henMu>&p(*%U9|=~eXF`v89-7zWtpV}PswZ$SN$fljzyE>O-p26Q3lx7fLee*l!44PlVw zplmyN$O_7EJg*924C@^TAI&KBApSE07dH;tm zo_plIi|S=SwX_#&O1&Ng>ZA%`*CUnEfF?eC)c(k>)Ki4OpGC(Q7XkG>IeDVlDTkipQq-X_@ z{PZDhW4)%DvK^DAny=?cKjK(S7QpfQ0QUC`K>0xc$sfQ&%?Xt4D`2fkXx9VpXvRyk z2`vjj+u$?Jc#Z0p9{Zq=mtnPcfNEW7cg`mrBL^*%0UPH6q}j@Xxu~by3ZNLgVo2s- zlw#N|8`e*QR3`ok&_^NY2K7CVk{K9{WqL>v{<6_SQ19v5S2dh{%-9Oh=japKPw0>I zd&Wab%*hin_udn>2G7eY_!~;u!1Yjw!47dll7ocBx z0Q%NSU=@%EtOk;R`+#I%4ZwHJ{lGdP1xN+f1Kcxd0AINoKqim{(AzcuIRO7RVI$}! z-~nJWz<8GjfUN*yKpBAR2lkubOSs6xfETC)s(@;s2B-zL0owuY zGajiKGadzS=fMF=WGAo-*bOuQdw@oOIugyu`+yc;AHW#HBlhC}>pMXC9_R$RfNtO` z0PAiy@dCm3iw86B1nrTpqQ|MHI7Bc#HvMS)|B+1Alb_CjREN=f5V49un-ITv!J!^g zO$lNedVJEUw$uN&V8LpQxXg5@m7i+sQMo9LulLSW$7ftk<^cn#7^C+oF9?>W`<#0l z^QXV)aq8ejz3~41>H@{f;})9o<2F4KgZQ6*z3)o?Wle$H2%#cXTFwdaNlYl arX9JKw~GJtA%gLr^r~KfS^A|~f&T!aEh-ZL literal 0 HcmV?d00001