Java Web Services via REST bereitstellen
ulrich
2014-11-16 84429d5d6f9a864bcc83d41b78646561ddec5ebf
Erlaubt-Pruefung  bei TransitServletRS erweitert
1 files modified
34 ■■■■■ changed files
src/de/uhilger/transit/web/TransitServletRS.java 34 ●●●●● patch | view | raw | blame | history
src/de/uhilger/transit/web/TransitServletRS.java
@@ -61,10 +61,12 @@
  private static final String[] specialChars = {new String("\u00c4"), new String("\u00d6"), 
      new String("\u00dc"), new String("\u00e4"), new String("\u00f6"), new String("\u00fc"), new String("\u00df")};
      
  private String klassen;
  public static final String KLASSEN_TRENNER = ";";
  //private String klassen;
  private String[] klassen;
  
  public void init(ServletConfig servletConfig) throws ServletException{
    this.klassen = servletConfig.getInitParameter("klassen");
    this.klassen = servletConfig.getInitParameter("klassen").split(KLASSEN_TRENNER);
    super.init(servletConfig);
  }
  
@@ -165,7 +167,9 @@
      String[] elemente = pathInfo.split("/");
      String klassenName = elemente[1];
      StringBuffer buf = new StringBuffer();
      if(this.klassen.contains(klassenName)) {
      if(istErlaubt(klassenName)) {
      //if(this.klassen.contains(klassenName)) {
      //if(this.klassen.matches(klassenName)) {
        String methodenName = elemente[2];
        String formatName = elemente[3];
        List parameterListe = new ArrayList();
@@ -235,6 +239,30 @@
      }
    }
  }    
  /**
   * Hier wird geprueft, ob der Name einer Klasse der Liste der erlaubten
   * Klassen bzw. Packages entspricht. Im Deployment Descriptor wird ein
   * Ausdruck wie z.B.
   *
   * de.uhilger.test.web;de.uhilger.test.api;de.uhilger.test.db.KlassenName
   *
   * erwartet. Diese Methode spaltet diesen Ausdruck an den ';' auf und prueft
   * fuer jeden Ausdruck, ob der KlassenName mit diesem Ausdruck beginnt.
   * Beginnt der Klassenname mit einem der Ausdruecke, wird der Zugriff erlaubt
   *
   * @param klassenName  Name der Klasse, fuer die der Zugriff geprueft
   * werden soll
   * @return true, wenn die Klasse laut dem Eintrag im Deployment Desccriptor
   * aufgerufen werden darf, false wenn nicht
   */
  private boolean istErlaubt(String klassenName) {
      boolean erlaubt = false;
      for(int i = 0; i < klassen.length && !erlaubt; i++) {
          erlaubt = klassenName.startsWith(klassen[i]);
      }
      return erlaubt;
  }
    
  public String escapeHtml(String text) {
    text = text.replace(specialChars[0], "&Auml;");