📄 main.java
字号:
registerKeyStores();
//
threadGroup = new ThreadGroup("MainThreadGroup");
if (install) {
setupMode();
} else {
normalMode();
redirectFromHttpsMode();
}
} catch (Throwable t) {
startupException = t;
log.error("Failed to start SSL Explorer. " + t.getMessage(), t);
return new Integer(1);
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.tanukisoftware.wrapper.WrapperListener#controlEvent(int)
*/
public void controlEvent(int evt) {
if (evt == WrapperManager.WRAPPER_CTRL_C_EVENT) {
if (log.isInfoEnabled())
log.info("Got CTRL+C event");
WrapperManager.stop(0);
} else if (evt == WrapperManager.WRAPPER_CTRL_CLOSE_EVENT) {
if (log.isInfoEnabled())
log.info("Got windows close event, ignoring.");
} else if (evt == WrapperManager.WRAPPER_CTRL_LOGOFF_EVENT) {
if (log.isInfoEnabled())
log.info("Got windows logoff event, ignoring.");
} else if (evt == WrapperManager.WRAPPER_CTRL_SHUTDOWN_EVENT) {
if (log.isInfoEnabled())
log.info("Got shutdown event");
WrapperManager.stop(0);
} else {
if (log.isInfoEnabled())
log.info("Got unknown control event " + evt + ", ignoring.");
}
}
/*
* (non-Javadoc)
*
* @see org.tanukisoftware.wrapper.WrapperListener#stop(int)
*/
public int stop(int exitCode) {
if (log != null) {
if (log.isInfoEnabled())
log.info("Shutting down SSL Explorer.");
}
if (useWrapper) {
WrapperManager.signalStopping(20000);
}
// TODO This really screws up wrapper on windows - no idea why
if (server != null && server.isStarted()) {
try {
server.stop(false);
} catch (InterruptedException e) {
if (log != null) {
if (log.isInfoEnabled())
log.info("Failed to stop server.", e);
}
}
}
// Inform all context listeners of what is happening
for (int i = contextListeners.size() - 1; i >= 0; i--) {
((ContextListener) contextListeners.get(i)).stopped();
}
//
if (log.isInfoEnabled()) {
log.info("Flushing preferences");
}
try {
ContextHolder.getContext().getPreferences().flush();
} catch (BackingStoreException bse) {
log.error("Failed to flush context preferences.", bse);
}
try {
Preferences.systemRoot().flush();
} catch (BackingStoreException bse) {
log.error("Failed to flush system preferences");
}
return exitCode;
}
void copyNode(Preferences from, Preferences to) throws BackingStoreException {
String[] keys = from.keys();
for (int i = 0; i < keys.length; i++) {
to.put(keys[i], from.get(keys[i], ""));
}
String childNodes[] = from.childrenNames();
for (int i = 0; i < childNodes.length; i++) {
Preferences cn = from.node(childNodes[i]);
Preferences tn = to.node(childNodes[i]);
copyNode(cn, tn);
}
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#isSetupMode()
*/
public boolean isSetupMode() {
return install;
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#isRestartAvailableMode()
*/
public boolean isRestartAvailableMode() {
return useWrapper && !isSetupMode();
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#shutdown(boolean)
*/
public void shutdown(boolean restart) {
shuttingDown = true;
if (useWrapper) {
if (restart) {
WrapperManager.restart();
} else {
WrapperManager.stop(0);
}
} else {
stop(0);
System.exit(0);
}
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#getVersion()
*/
public Version getVersion() {
return VersionInfo.getVersion();
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#getConfDirectory()
*/
public File getConfDirectory() {
return CONF_DIR;
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#getTempDirectory()
*/
public File getTempDirectory() {
return TMP_DIR;
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#getLogDirectory()
*/
public File getLogDirectory() {
return LOG_DIR;
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#getApplicationDirectory()
*/
public File getApplicationDirectory() {
return appDir;
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#getDBDirectory()
*/
public File getDBDirectory() {
return DB_DIR;
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#getMainThread()
*/
public Thread getMainThread() {
return mainThread;
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#addResourceBase(java.net.URL)
*/
public void addResourceBase(URL base) {
if (log.isInfoEnabled())
log.info("Adding new resource base " + base.toExternalForm());
ResourceCache cache = new ResourceCache();
cache.setMimeMap(webappContext.getMimeMap());
cache.setEncodingMap(webappContext.getEncodingMap());
cache.setResourceBase(base.toExternalForm());
try {
cache.start();
webappContext.addResourceCache(cache);
if (httpContext != null) {
httpContext.addResourceCache(cache);
}
resourceCaches.put(base, cache);
} catch (Exception e) {
log.error("Failed to add new resource base " + base.toExternalForm() + ".", e);
}
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#addResourceBase(java.net.URL)
*/
public void removeResourceBase(URL base) {
if (log.isInfoEnabled())
log.info("Removing resource base " + base.toExternalForm());
ResourceCache cache = (ResourceCache) resourceCaches.get(base);
webappContext.removeResourceCache(cache);
if (httpContext != null) {
httpContext.removeResourceCache(cache);
}
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#getHostname()
*/
public String getHostname() {
return hostname;
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#getPort()
*/
public int getPort() {
return actualPort;
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#addContextLoaderURL(java.net.URL)
*/
public void addContextLoaderURL(URL url) {
webappContext.addContextLoaderURL(url);
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#registerRequestHandler(com.sslexplorer.boot.RequestHandler)
*/
public void registerRequestHandler(RequestHandler requestHandler) {
if (httpContext != null) {
httpContext.registerRequestHandler(requestHandler);
}
}
/*
* (non-Javadoc)
*
* @see com.sslexplorer.boot.Context#deregisterRequestHandler(com.sslexplorer.boot.RequestHandler)
*/
public void deregisterRequestHandler(RequestHandler requestHandler) {
if (httpContext != null) {
httpContext.deregisterRequestHandler(requestHandler);
}
}
private void registerKeyStores() throws Exception {
String defaultKeyStorePassword = getContextProperty("webServer.keystore.sslCertificate.password");
KeyStoreManager.registerKeyStore(KeyStoreManager.DEFAULT_KEY_STORE, "keystore", false, defaultKeyStorePassword,
KeyStoreManager.getKeyStoreType(getContextProperty("webServer.keyStoreType")));
KeyStoreManager.registerKeyStore(KeyStoreManager.SERVER_AUTHENTICATION_CERTIFICATES_KEY_STORE, "keystore", true,
"sslexplorer", KeyStoreManager.TYPE_JKS);
KeyStoreManager.registerKeyStore(KeyStoreManager.TRUSTED_SERVER_CERTIFICATES_KEY_STORE, "keystore", true, "sslexplorer",
KeyStoreManager.TYPE_JKS);
}
private void clearTemp() {
if ("true".equalsIgnoreCase(System.getProperty("sslexplorer.clearTemp"))) {
if (log.isInfoEnabled())
log.info("Clearing temporary directory");
Util.delTree(getTempDirectory());
if (!getTempDirectory().mkdirs()) {
log.error("CRITICAL. Failed to recreate the temporary directory " + getTempDirectory() + ".");
}
}
}
private void initialiseLogging() {
log = LogFactory.getLog(Main.class);
}
private void redirectFromHttpsMode() throws Exception {
boolean useHTTPRedirect = "true".equals(getContextProperty("webServer.enableHTTPRedirect"));
if (!useHTTPRedirect) {
if (log.isInfoEnabled())
log.info("No HTTP redirect server required.");
return;
}
int port = Integer.parseInt(getContextProperty("webServer.httpRedirectPort"));
if (port <= 0) {
if (log.isInfoEnabled())
log.info("HTTP redirect port " + port + " is invalid");
return;
}
serverLock.start(port);
server = new Server();
SocketListener listener = new SocketListener();
listener.setPort(port);
listener.setMinThreads(Integer.parseInt(getContextProperty("webServer.minThreads")));
listener.setMaxThreads(Integer.parseInt(getContextProperty("webServer.maxThreads")));
listener.setMaxIdleTimeMs(0);
listener.setLowResourcePersistTimeMs(2000);
listener.setAcceptQueueSize(0);
listener.setPoolName("P2");
server.addListener(listener);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -