package de.superx.servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.InvocationTargetException; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; import java.text.ParseException; import java.util.Date; import java.util.Enumeration; import java.util.Set; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import org.apache.log4j.Logger; import org.dom4j.DocumentException; import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.database.DataSourceProviderFactory; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.logging.KettleLogStore; import org.xml.sax.SAXException; import de.memtext.db.NichtAngemeldetException; import de.memtext.tree.KeyParentEqualException; import de.memtext.util.DateUtils; import de.memtext.util.ServletHelper; import de.memtext.util.TimeUtils; import de.memtext.util.TransletUtils; import de.memtext.util.XMLUtils; import de.superx.common.DBServletException; import de.superx.common.SxUser; import de.superx.common.TransletCache; import de.superx.sec.HttpGetAccessGuard; import de.superx.sec.HttpGetAccessListParser; import de.superx.sec.InputCheckRegistry; import de.superx.util.SqlStringUtils; /** * A servlet which can be advised to reload static resources */ public class SuperXManager extends HttpServlet { private static Logger logger = Logger.getLogger(SuperXManager.class); public static final String QIS_CONTEXT = "QIS_CONTEXT"; private static final long serialVersionUID = 2L; public static final long maxMillisWaitingTime = 60000 * 15; // 15 minutes should be sufficient public static String his1_refapp=""; private SuperXInitThread initThread; public static boolean isZukuenftigerStandErlaubt = true; public static int maxRows = 20000; public static String defaultMaskXsl = "maske_html.xsl"; public static String defaultTableHtmlXsl = "tabelle_html.xsl"; public static String defaultTableXlsXsl = "tabelle_xls.xsl"; public static String defaultTablePdfXsl = "tabelle_fo_pdf.xsl"; public static String csvEncoding = null; public static String sharedSecret = ""; private static String xmenu, xmask, xtablehtml, xtablexsl, xtablepdf; public static boolean isSichtenCachingWanted = true; public static String sxversion="@version@"; public static String builddatum="@sxtimestamp@"; public static HttpGetAccessGuard httpGetAccessGuard; private static final String ADMIN_ONLY = de.superx.servlet.SuperXManager.htmlPageHead("Admin-Bereich")+"

Hier ist ein Login nur für Administratoren möglich.

(Cookies müssen aktiviert sein)" + "

Kennung:

Passwort:
" + "

MandantenID


"; private static String pageBeginning = htmlPageHead("Webanwendung Manager")+"

SuperX Manager

" + "SuperX @version@ (build:@sxtimestamp@)" + "
"; public static String pageEnd = ""; public static StringBuffer activityLog = new StringBuffer(); // letzter maskensql bevor FreeMarker loslegte private static String lastFMMaskenSql; private static String lastMaskenSql = "--"; private static String lastXml = "--"; private static String lastMaskenSqlMandantid = ""; private static String lastXmlMandantid = "--"; // siehe SxSql_server.executeAll public static boolean isDevelopmentMode = true; private static boolean isLastSqlExtraPageWanted = true; // private static ResourceBundle rb = // ResourceBundle.getBundle("LocalStrings"); static public boolean isXMLReturnLinkWanted = true; static String refererstart = null; public static String field1Cache; private static CacheUpdater cashUpdater = new CacheUpdater(); public static boolean isHis1 = false; private static String webinfPfad = "."; private static String moduleDir=""; // public static boolean isResponseCompressionWanted=true; public static String sendBackLocalizedHtml=""; private static String noSessionFieldDefaults; private static Date start = null; private static boolean isStandaloneLdapActive = false; // public static String userField1Cache;//in UserInitializer sind Ansaetze - // (noch) nicht umgesetzt public static String getMaxRowsHinweis() { return " Die Datenbank lieferte eine große Menge an Datensätzen. Es werden generell nur die ersten " + SuperXManager.maxRows + " dargestellt, in Datenblatt-Abfragen ggf. sogar weniger. Schränken Sie Ihre Abfrage ggfs. weiter ein oder nutzen den Excelexport"; } public static boolean isSessionFieldDefaultsWanted(String mandantenID) { if (noSessionFieldDefaults==null) noSessionFieldDefaults=""; return noSessionFieldDefaults.indexOf(","+mandantenID+",")==-1; } public void init(ServletConfig config) throws ServletException { super.init(config); logger.debug("SuperXManager start."); start = new Date(); //tomcat8 verlangt einen virtual Path separator / vor WEB-INF //vergl. http://stackoverflow.com/questions/25555541/getservletcontext-getrealpath-in-tomcat-8-returns-wrong-path webinfPfad = getServletConfig().getServletContext().getRealPath( "/WEB-INF"); //System.out.println("WEB-INF Pfad : "+webinfPfad); // are we running in a HISinOne env? // init Prozess wird in eigenem Thread gestaretet, damit HIs1-init // weiterläuft während superx wartet try { //MB provisorisch an dieser Stelle für Kern4.9 eingebaut //Kern5 bzw HisMaster ab 2021.06 ist woanders initLdapPasswordCheckingIfConfigured(); initThread = new SuperXInitThread(config); initThread.start(); } catch (Exception e) { throw new ServletException(e.getMessage()); } } public static String getWEB_INFPfad() { return webinfPfad; } public static void setWEB_INFPfad(String p) { webinfPfad=p; } private void initXSLFilenames() { //tomcat8 verlangt einen virtual Path separator / vor xml //vergl. http://stackoverflow.com/questions/25555541/getservletcontext-getrealpath-in-tomcat-8-returns-wrong-path xmenu = "file:///" + getServletConfig().getServletContext().getRealPath( "/xml/" + "menue_html.xsl"); xmask = "file:///" + getServletConfig().getServletContext().getRealPath( "/xml/" + SuperXManager.defaultMaskXsl); xtablehtml = "file:///" + getServletConfig().getServletContext().getRealPath( "/xml/" + SuperXManager.defaultTableHtmlXsl); xtablexsl = "file:///" + getServletConfig().getServletContext().getRealPath( "/xml/" + SuperXManager.defaultTableXlsXsl); xtablepdf = "file:///" + getServletConfig().getServletContext().getRealPath( "/xml/" + SuperXManager.defaultTablePdfXsl); } public static void initStandardXsl() throws TransformerConfigurationException, DBServletException { TransletCache.getTransformer(null, xmenu); TransletCache.getTransformer(null, xmask); TransletCache.getTransformer(null, xtablehtml); TransletCache.getTransformer(null, xtablexsl); // TransletCache.getTransformer("default", xtablepdf); } public void destroy() { super.destroy(); try { if (initThread != null) initThread.destroy(); SxPools.closeAll(); cashUpdater.setActive(false); cashUpdater.interrupt(); } catch (Exception e) { e.printStackTrace(); } try { for (Enumeration en = DriverManager.getDrivers(); en .hasMoreElements();) { Driver d = (Driver) en.nextElement(); try { DriverManager.deregisterDriver(d); logger.info(new java.util.Date() + "{} deregister {}" + d); } catch (Exception e) { } } } catch (Exception e) { e.printStackTrace(); } finally { // System.setProperty("SuperX-DB-PROPERTIES-SET", "false"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { AbstractSuperXServlet.setEncoding(request); response.setContentType("text/html; charset=" + SqlStringUtils.getEncoding()); if (ServletHelper.getParameter(request, "kennung") != null && ServletHelper.getParameter(request, "passwort") != null) { UserInitializer ui = new UserInitializer(request, false); try { ui.perform(); } catch (Exception e) { throw new ServletException("Authentifizierung für " + ServletHelper.getParameter(request, "kennung") + " fehlgeschlagen"); } } if (request.getParameter("xupdater") != null) { XUpdaterServlet xu = new XUpdaterServlet(); xu.doPost(request, response); } else { SxUser user = (SxUser) request.getSession().getAttribute("user"); if (user == null || !user.isAdmin()) { PrintWriter output = response.getWriter(); output.write(ADMIN_ONLY); output.flush(); } else { SxManager m = new SxManager(request, response); m.run(false); } } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=" + SqlStringUtils.getEncoding()); SxUser user = (SxUser) request.getSession().getAttribute("user"); if (user == null || !user.isAdmin()) { PrintWriter output = response.getWriter(); output.write(ADMIN_ONLY); output.flush(); output.close(); } else { if (request.getParameter("xupdater") != null) { XUpdaterServlet xu = new XUpdaterServlet(); xu.doGet(request, response); } else { PrintWriter output = response.getWriter(); String showLastSqlXml = ServletHelper.getParameter(request, "showlastsqlxml"); boolean isLastSqlXmlWantend = showLastSqlXml != null && showLastSqlXml.equals("true"); if (isLastSqlXmlWantend) { output.write(pageBeginning + getLastSqlXml(request) + pageEnd); } else { output.write(getStandardPage(request, "") + pageEnd); } output.flush(); output.close(); } } } private String getLastSqlXml(HttpServletRequest currentreq) { StringBuffer result = new StringBuffer("
"); String m = ServletUtils.getMandantenID(currentreq); if(m.equalsIgnoreCase(lastMaskenSqlMandantid)) { //
Stand:"+new Date()+" result.append("
"); result.append(""); result.append("" + "

letzter Masken sql (vom XML-Frontend)
vor FreeMarker-Transformation

letzter Masken sql (vom XML-Frontend)

letztes XML

"); } else result.append("Bitte wiederholen Sie den Aufruf mit dem jew. Mandant"); return result.toString(); } public String getStandardPage(HttpServletRequest request, String comment) { String m = ServletUtils.getMandantenID(request); StringBuffer result = new StringBuffer( pageBeginning + (m.equals("default") ? "" : "
(Mandant: " + m + ")
\n") + "\n
" + "
" + comment + "\n

 
" + "Es werden Erläuterungen und Übersetzungen (captions) gecacht.
Fürs XML-Frontend auch: User,Userrechte und Sichten,
und auch Abfragen wenn in der db.properties eingetragen


" + "Entwicklungsmodus ist " + (isDevelopmentMode ? "AN" : "AUS") + " an\naus\n" + "\n
" + "(Im Entwicklungsmodus werden alle SQL-Befehle von Abfragen einzeln an die Datenbank geschickt.
Das dauert länger, ermöglicht aber bessere Fehlermeldungen.)

" + "Achtung: bei Informix sollten Sie den Entwicklungsmodus nicht ausschalten, der JDBC-Treiber arbeitet dann instabil.

" + "\n


\n"); result.append("
"); if (isLastSqlExtraPageWanted) { result.append(getLastSqlXml(request)); } else { result.append("letzter SQL / XML


"); } result.append("

LOG aktualisieren


" + //
"); result.append(pageEnd); return result.toString(); } public static void setLastMaskenSql(String sql) { lastMaskenSql = sql; } public static String getLastMaskenSql() { return lastMaskenSql; } public static void setLastXml(String xml) { lastXml = xml; } public static String getLastXml() { return lastXml; } public static String getLastMaskenSqlMandantid() { return lastMaskenSqlMandantid; } public static void setLastMaskenSqlMandantid(String lastMaskenSqlMandantid) { SuperXManager.lastMaskenSqlMandantid = lastMaskenSqlMandantid; } public static String getLastXmlMandantid() { return lastXmlMandantid; } public static void setLastXmlMandantid(String lastXmlMandantid) { SuperXManager.lastXmlMandantid = lastXmlMandantid; } /** * Alles neu einlesen Immer nur ein Thread darf zugreifen * * @param request * darf null sein * * @throws KeyParentEqualException * @throws NichtAngemeldetException * @throws ParseException * @throws ParserConfigurationException * @throws FactoryConfigurationError * @throws SAXException * @throws DocumentException * @throws SQLException * @throws DBServletException * @throws TransformerException * @throws NoSuchMethodException * @throws InvocationTargetException * @throws IllegalAccessException * @throws InstantiationException * @throws SecurityException * @throws IllegalArgumentException */ static synchronized void initAll() throws KeyParentEqualException, NichtAngemeldetException, ParseException, ParserConfigurationException, FactoryConfigurationError, SAXException, DocumentException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, SQLException, DBServletException, TransformerException { SxPools.resetAllPools(); logger.debug(" using encoding: " + SqlStringUtils.getEncoding()); clearTransletStylesheets(); } public static void initPool(HttpServletRequest request, String mandantenID) throws TransformerConfigurationException, SQLException, DBServletException, IOException { logger.debug(de.memtext.util.DateUtils.getNowString() + " Server Cache wird neu geladen für :" + mandantenID); MaskenContainer mc = MaskenContainer.getFromRequest(request); mc.clear(); if (mandantenID.equals("default")) SxPools.resetAllPools(); else SxPools.get(mandantenID).init(); logger.debug(" using encoding: " + SqlStringUtils.getEncoding()); clearTransletStylesheets(); initStandardXsl(); } public static void clearTransletStylesheets() throws TransformerConfigurationException, DBServletException { logger.debug(DateUtils.getNowString() + " Stylesheet-Cache geleert"); TransletCache.clear(); } public String getServletInfo() { return "SuperXManager"; } public static void clearLog() { activityLog.setLength(0); } public static void logActivity(java.util.logging.Level level, String log) { if (level == null) level = java.util.logging.Level.INFO; activityLog.append(TimeUtils.getNowString() + " " + log + "
"); } /** * Als innere Klasse hat SxManager auch Zugriff auf die initAll-Methode */ private class SxManager extends SuperXServletHelper { public SxManager(HttpServletRequest request, HttpServletResponse response) throws IOException { super(request, response); } protected void perform() throws IOException, IllegalArgumentException, SecurityException, KeyParentEqualException, NichtAngemeldetException, ParseException, ParserConfigurationException, FactoryConfigurationError, SAXException, DocumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, SQLException, DBServletException, TransformerException { String comment = ""; if (request.getParameterMap().containsKey("cache")) { initPool(request, getMandantenID()); initStandardXsl(); comment = "Resources neu geladen: " + DateUtils.getTodayString() + " " + DateUtils.getNowString(); } if (request.getParameterMap().containsKey("clearStylesheets")) { clearTransletStylesheets(); comment = "Stylesheet-Cache geleert: " + DateUtils.getTodayString() + " " + DateUtils.getNowString(); } if (request.getParameterMap().containsKey("clearlogfiles")) { SxPools.clearLogFiles(); comment = "LogDateien geleert"; } if (ServletHelper.getParameter(request, "Entwicklungsmodus") != null) isDevelopmentMode = ServletHelper.getParameter(request, "Entwicklungsmodus").equals("an"); PrintWriter output = response.getWriter(); response.setContentType("text/html; charset=" + SqlStringUtils.getEncoding()); output.write(getStandardPage(request, comment)); output.write(pageEnd); output.flush(); } } /** * @return Returns the lastFMMaskenSql. */ public static String getLastFMMaskenSql() { return lastFMMaskenSql; } /** * @param lastFMMaskenSql * The lastFMMaskenSql to set. */ public static void setLastFMMaskenSql(String lastFMMaskenSql) { SuperXManager.lastFMMaskenSql = lastFMMaskenSql; } public static void main(String args[]) { System.out.println("SuperX @version@ (build:@sxtimestamp@)"); System.out.println(SqlStringUtils.getEncoding()); } class SuperXInitThread extends Thread { private ServletConfig config; private boolean isDestroyWanted = false; public SuperXInitThread(ServletConfig config) throws SecurityException, IOException { this.config = config; } public void destroy() { isDestroyWanted = true; } public void run() { logger.debug("SuperXInit thread start."); while (!isDestroyWanted && (System.getProperty("SuperX-DB-PROPERTIES-SET") == null || !System .getProperty("SuperX-DB-PROPERTIES-SET") .equalsIgnoreCase("true"))) { long totalTimeWaiting = System.currentTimeMillis() - start.getTime(); try { Thread.sleep(4000); logger.info("SuperXInit waiting. Total: " + Long.valueOf(totalTimeWaiting) + "millis"); if (totalTimeWaiting > maxMillisWaitingTime) { throw new InterruptedException("*** SuperXManager timeout!\n" + "Java System-Property SuperX-DB-PROPERTIES-SET not set!\n" + "HISinOne Business Intelligence may not be usable!\n" + "Please check if Module EDUSTORE in modules.xml is active\n" + "and EdustoreManager has run correctly on HISinOne startup! ***"); } } catch (InterruptedException e) { logger.warn("SuperXinit interrupted!", e); throw new RuntimeException(e); } } isHis1 = true; logger.debug("Webanwendung Manager startet - SuperX-DB-PROPERTIES-SET=true gefunden"); try { doInit(); } catch (ServletException e) { e.printStackTrace(); throw new IllegalStateException("SuperX Init fehlgeschlagen " + e.getMessage()); } } private void doInit() throws ServletException { initHttpGetAccessGuard(); InputCheckRegistry.registerDefaultChecks(); his1_refapp=System.getProperty(QIS_CONTEXT); if(his1_refapp==null) his1_refapp=""; else logger.debug("SuperX found HisInOne webapp: " + his1_refapp); XMLUtils.getExceptionHandler().setWithGui(false); XMLUtils.getExceptionHandler().setExitWanted(false); ServletUtils.setPath(getServletConfig().getServletContext() .getRealPath("xml")); initXSLFilenames(); refererstart = config.getInitParameter("referer_start"); if (refererstart != null && !refererstart.trim().equals("")) logger.debug("Referer wird kontrolliert auf " + refererstart); String zukuenftigerStandErlaubt = config .getInitParameter("zukünftigerStandErlaubt"); if (zukuenftigerStandErlaubt != null && zukuenftigerStandErlaubt.equals("false")) isZukuenftigerStandErlaubt = false; // Link zur Neuanmeldung beim XML-Frontend, Freiburg will abschalten String xmlReturnLink = config.getInitParameter("xml_return_link"); if (xmlReturnLink != null && xmlReturnLink.equals("false")) isXMLReturnLinkWanted = false; String last_sql_extra_page = config .getInitParameter("last_sql_extra_page"); if (last_sql_extra_page != null && last_sql_extra_page.equals("false")) isLastSqlExtraPageWanted = false; String xsl_parser = config.getInitParameter("xsl_processor"); if (xsl_parser != null) TransletUtils.initFactory(xsl_parser, "org.apache.xalan.xsltc.trax.TransformerFactoryImpl"); else TransletUtils.initFactory( "net.sf.saxon.TransformerFactoryImpl", null); logger.debug("Using xsl processor: " + TransletUtils.getUsedProcessor()); SuperXManager.sharedSecret = config .getInitParameter("sharedSecret"); if (SuperXManager.sharedSecret == null) { SuperXManager.sharedSecret = ""; } String mxr = config.getInitParameter("maxRows"); if (mxr != null && !mxr.equals("")) SuperXManager.maxRows = (Integer.parseInt(mxr)); logger.warn("SuperXManager: maxRows: " + Integer.valueOf(SuperXManager.maxRows) + " (wenn mehr geliefert wird, werden die zusaetzlichen Datenzeilen ignoriert)"); String defaultXsl; String moduleDir=""; defaultXsl = config.getInitParameter("defaultMaskXsl"); if (defaultXsl != null && !defaultXsl.trim().equals("")) { SuperXManager.defaultMaskXsl = defaultXsl; logger.debug("SuperXManager: defaultMaskXsl: " + SuperXManager.defaultMaskXsl); if(defaultXsl.equals("maske_html_his1.xsl")) {isHis1=true; moduleDir=SuperXManager.getWEB_INFPfad()+ File.separator + "conf" + File.separator + "edustore" + File.separator + "db" + File.separator + "module" ; } else {isHis1=false; if(System.getProperty("MODULE_PFAD") != null && !System.getProperty("MODULE_PFAD").toString().equals("")) moduleDir=System.getProperty("MODULE_PFAD").toString(); else moduleDir=SuperXManager.getWEB_INFPfad()+ File.separator + ".." + File.separator + ".." + File.separator + ".." + File.separator + ".." + File.separator + ".." + File.separator + "db" + File.separator + "module" ; //default kann durch setModuleDir überschrieben werden (KettleExecutor) } logger.debug("SuperXManager: MODULE_PFAD: " +moduleDir); setModuleDir(moduleDir); } defaultXsl = config.getInitParameter("defaultTableHtmlXsl"); if (defaultXsl != null && !defaultXsl.trim().equals("")) { SuperXManager.defaultTableHtmlXsl = defaultXsl; logger.debug("SuperXManager: defaultTableHtmlXsl: " + SuperXManager.defaultTableHtmlXsl); } defaultXsl = config.getInitParameter("defaultTableXlsXsl"); if (defaultXsl != null && !defaultXsl.trim().equals("")) { SuperXManager.defaultTableXlsXsl = defaultXsl; logger.debug("SuperXManager: defaultTableXlsXsl: " + SuperXManager.defaultTableXlsXsl); } defaultXsl = config.getInitParameter("defaultTablePdfXsl"); if (defaultXsl != null && !defaultXsl.trim().equals("")) { SuperXManager.defaultTablePdfXsl = defaultXsl; logger.debug("SuperXManager: defaultTablePdfXsl: " + SuperXManager.defaultTablePdfXsl); } String f1 = config.getInitParameter("field1Cache"); if (f1 != null && !f1.equals("")) field1Cache = f1; String rc=config.getInitParameter("isResponseCompressionWanted"); if (rc!=null&&rc.equalsIgnoreCase("false")) isResponseCompressionWanted=false; String lh=config.getInitParameter("sendBackLocalizedHtml"); if (lh!=null&&!lh.equalsIgnoreCase("")) sendBackLocalizedHtml=lh; String sichtcache = config.getInitParameter("sichtenCaching"); if (sichtcache != null && sichtcache.equalsIgnoreCase("false")) isSichtenCachingWanted = false; // f1=config.getInitParameter("userField1Cache"); // if (f1!=null&&!f1.equals("")) // userField1Cache=f1; noSessionFieldDefaults=","+config.getInitParameter("noSessionFieldDefaults")+","; if (noSessionFieldDefaults==null) noSessionFieldDefaults=""; csvEncoding=config.getInitParameter("CSV-Encoding"); if (csvEncoding==null || csvEncoding.equalsIgnoreCase("")) csvEncoding=SqlStringUtils.getEncoding(); else csvEncoding=csvEncoding.trim(); try { initKettleEnv(); } catch (Exception e) { e.printStackTrace(); System.err.println("Kettle konnte nicht initialisiert werden.DETAILS:" + e.getMessage()); } try { SxPools.init(); initAll(); initStandardXsl(); cashUpdater.start(); } catch (Exception e) { e.printStackTrace(); throw new ServletException( "SuperX konnte nicht initialisiert werden.DETAILS:" + e.getMessage()); } logger.debug("SuperXInit finished after " + ((new Date()).getTime() - start.getTime()) + " millis"); } } public static void initKettleEnv() { // init kettle environment try { KettleEnvironment.init(); KettleLogStore.init(); logger.debug("Kettle environment sucessfully initialized."); } catch (KettleException e) { logger.error("Couldn't initialize KettleEnvironment!", e); } // DBHandlerDataSourceProviderInterface to access HIS1 DBHandler as DataSources //hatte für Mandanten nicht funktioniert //DataSourceProviderFactory.setDataSourceProviderInterface(new KettleDataSourceProvider("default",logger)); // init KettleLogStore } private final static class CacheUpdater extends Thread { private java.util.Date lastUpdate; private boolean isActive = true; public void run() { while (isActive) { java.util.Date now = new java.util.Date(); try { Thread.sleep(30 * 60 * 1000); } catch (InterruptedException e) { // e.printStackTrace(); } if (now.getHours() == 7 && (lastUpdate == null || lastUpdate.getDay() != now .getDay())) { try { logger.info(DateUtils.getTodayString() + " " + DateUtils.getNowString() + " Server-Cache-Aktualisierung"); SuperXManager.initAll(); lastUpdate = now; } catch (Exception e) { logger.error("Server-Cache-Aktualisierung fehlgeschlagen:", e); } } // else System.out.println(DateUtils.getNowString()+ // " keine Server-Cache akt."); } } public boolean isActive() { return isActive; } public void setActive(boolean isActive) { this.isActive = isActive; } } /** * Seitenkopf für html-Seiten, die direkt ohne xslt ausgegeben werden * @param titel Titel für die html- Seite * @return html-Schnipsel vom head bis Anfang body-Tag */ public static String htmlPageHead(String title) { //TODO: Seiten Kopf dynamisch aus web.xml oder besser sx_captions: String ret=""+title+"" + ""+ "" + "" + " " + " "+ "\n
\n"; if (isHis1) { ret += "\n" +"Abmelden von Standardberichte"; } return ret; } public static void setModuleDir(String md) { moduleDir=md; } public static String getModuleDir() { return moduleDir ; } private void initLdapPasswordCheckingIfConfigured() { File superxStandaloneLdapConfigFile = new File( SuperXManager.webinfPfad + File.separator + "superx_standalone_ldap.properties"); if (superxStandaloneLdapConfigFile.exists()) { System.out.println(" Passwortkontrolle via LDAP wird aktiviert"); isStandaloneLdapActive = true; try { LdapPasswordChecker.setup(superxStandaloneLdapConfigFile); } catch (Exception e) { System.out.println(" Konfiguration Passwordkontrolle via LDAP fehlgeschlagen " + e); e.printStackTrace(); } } } public static boolean isStandaloneLdapActive() { return isStandaloneLdapActive; } private void initHttpGetAccessGuard() { httpGetAccessGuard = new HttpGetAccessGuard(); String blacklist_filename = SuperXManager.getWEB_INFPfad() + File.separator + "http_get_masken_blacklist.txt"; String blacklist_custom_filename = SuperXManager.getWEB_INFPfad() + File.separator + "http_get_masken_blacklist_custom.txt"; String whitelist_filename = SuperXManager.getWEB_INFPfad() + File.separator + "http_get_masken_whitelist.txt"; httpGetAccessGuard.setBlacklist(parseWhiteBlacklistFile(blacklist_filename)); httpGetAccessGuard.setBlacklist_custom(parseWhiteBlacklistFile(blacklist_custom_filename)); httpGetAccessGuard.setWhitelist(parseWhiteBlacklistFile(whitelist_filename)); } private Set parseWhiteBlacklistFile(String list_filename) { File list_file = new File(list_filename); if (list_file.exists()) { try { String content = de.memtext.util.StringUtils.readFile(list_file); return HttpGetAccessListParser.parseList(content); } catch (IOException e) { logger.error("could not read file '" + list_file.getAbsolutePath()); } catch (NumberFormatException e) { logger.error("could not parse file '" + list_file.getAbsolutePath(), e); } } return null; } }