Java Web Services via REST bereitstellen
ulrich
2014-11-16 ac059cdc92b9b9cbfc47850dded547dd2f206325
commit | author | age
1da1ca 1 /*
U 2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
6 package de.uhilger.transit.web;
7
8 import java.io.IOException;
9 import java.io.PrintWriter;
10 import java.security.Principal;
11 import javax.servlet.ServletConfig;
12 import javax.servlet.ServletException;
13 import javax.servlet.http.HttpServlet;
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletResponse;
16
17 /**
18  *
19  * @author ulrich
20  */
21 public abstract class AbstractServlet extends HttpServlet {
22
23   public static final String MIME_JSON = "application/json";
24   public static final String MIME_XML = "text/xml";
25
26   public static final String KLASSEN_TRENNER = ";";
27   
28   private static final String[] specialChars = {new String("\u00c4"), new String("\u00d6"), 
29       new String("\u00dc"), new String("\u00e4"), new String("\u00f6"), new String("\u00fc"), new String("\u00df")};
30   
31   /** Name, der als Benutzername verwendet wird, wenn kein Benutzer angemeldet ist */
32   public static final String ANONYMER_NUTZER = "anonymous";
33   
34   protected String[] klassen;
35   
36   @Override
37   public void init(ServletConfig servletConfig) throws ServletException{
38     this.klassen = servletConfig.getInitParameter("klassen").split(KLASSEN_TRENNER);
39     super.init(servletConfig);
40   }
41   
42   /**
43    * Den Namen des angemeldeten Benutzers ermitteln.
44    * 
45    * @param req  die Anfrage, deren Benutzer ermittelt werden soll
46    * @return Name des Benutzers oder <code>anonymous</code>, wenn 
47    * kein Benutzer angemeldet ist
48    */
49   protected String getUserName(HttpServletRequest req) {
50     String userName = null;
51       Principal p = req.getUserPrincipal();
52         if(p != null) {
53             userName = p.getName();
54         }
55         if(userName == null) {
56             userName = ANONYMER_NUTZER;
57         }
58         return userName;
59     }  
60  
61   public String escapeHtml(String text) {
62     text = text.replace(specialChars[0], "&Auml;");
63     text = text.replace(specialChars[1], "&Ouml;");
64     text = text.replace(specialChars[2], "&Uuml;");
65     text = text.replace(specialChars[3], "&auml;");
66     text = text.replace(specialChars[4], "&ouml;");
67     text = text.replace(specialChars[5], "&uuml;");
68     text = text.replace(specialChars[6], "&szlig;");
69     return text;
70   }
71   
72   /**
73    * Hier wird geprueft, ob der Name einer Klasse der Liste der erlaubten 
74    * Klassen bzw. Packages entspricht. Im Deployment Descriptor wird ein 
75    * Ausdruck wie z.B. 
76    * 
77    * de.uhilger.test.web;de.uhilger.test.api;de.uhilger.test.db.KlassenName
78    * 
79    * erwartet. Diese Methode spaltet diesen Ausdruck an den ';' auf und prueft 
80    * fuer jeden Ausdruck, ob der KlassenName mit diesem Ausdruck beginnt. 
81    * Beginnt der Klassenname mit einem der Ausdruecke, wird der Zugriff erlaubt
82    * 
83    * @param klassenName  Name der Klasse, fuer die der Zugriff geprueft 
84    * werden soll
85    * @return true, wenn die Klasse laut dem Eintrag im Deployment Desccriptor 
86    * aufgerufen werden darf, false wenn nicht
87    */
88   protected boolean istErlaubt(String klassenName) {
89       boolean erlaubt = false;
90       for(int i = 0; i < klassen.length && !erlaubt; i++) {
91           erlaubt = klassenName.startsWith(klassen[i]);
92       }
93       return erlaubt;
94   }
95     
96 }