WebBox Klassenbibliothek
ulrich
2017-12-28 94a2d9eb867cb7b74c41e8eff9157c518e18408f
commit | author | age
5bfcdd 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.wbx.web;
7
8 import java.io.IOException;
9 import java.security.Principal;
10 import java.util.logging.Level;
11 import java.util.logging.Logger;
94a2d9 12 import javax.servlet.ServletException;
5bfcdd 13 import javax.servlet.http.HttpServletRequest;
94a2d9 14 import javax.servlet.http.HttpServletResponse;
5bfcdd 15 import org.apache.catalina.servlets.DefaultServlet;
U 16
17 /**
94a2d9 18  * Das WbxServlet prueft fuer alle HTTP GET Anfragen den Conetxt Path. Wenn 
U 19  * er /home enthaelt, muss der angemeldete Benutzer mit dem Benutzernamen 
20  * im Pfad uebereinstimmen. Stimmt er nicht ueberein oder ist kein Nutzer 
21  * angemeldet, wird ein Fehler ausgegeben.
22  * 
23  * Alle anderen Pfade als /home werden ohne Anmeldung ausgegeben.
24  * 
25  * Die Ausgabe des Inhalts wird auf die abstrakte Methode seiteAusgeben 
26  * umgeleitet. Serlvets, die von WbxServlet abgeleitet werden, koennen 
27  * die Methode seiteAusgeben so implementieren, dass sie z.B. den 
28  * Inhalt der Ausgabe nach Wunsch veraendern.
29  * 
5bfcdd 30  * @author ulrich
U 31  */
94a2d9 32 public abstract class WbxServlet extends DefaultServlet {
5bfcdd 33   
U 34   protected static final Logger logger = Logger.getLogger(WbxServlet.class.getName());
35   protected static final String HOME_CTX = "/home";
36   
94a2d9 37   /**
U 38    * Handles the HTTP <code>GET</code> method.
39    *
40    * @param request servlet request
41    * @param response servlet response
42    * @throws ServletException if a servlet-specific error occurs
43    * @throws IOException if an I/O error occurs
44    */
45   @Override
46   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  {
47     String contextPath = request.getContextPath();
48     if(HOME_CTX.equals(contextPath)) {
49       String userName = getUserName(request);
50       if (userName != null) {
51         String urlUser = getUrlUser(request, userName);
52         if(userName.equals(urlUser)) {
53           seiteAusgeben(request, response);
54         } else {
55           logger.fine("Wrong user.");
56         }
57       } else {
58         logger.fine("Missing login.");
59       }
60     } else {
61       seiteAusgeben(request, response);
62     }
63   }
5bfcdd 64   
94a2d9 65   protected String getUrlUser(HttpServletRequest request, String userName) {
5bfcdd 66     String result = "";
U 67     String requestUrlStr = request.getRequestURL().toString();
68     String contextPath = request.getContextPath();
69     if(contextPath != null && requestUrlStr != null && userName != null) {
70       int start = requestUrlStr.indexOf(contextPath);
71       start += contextPath.length();
72       start++;
73       int end = start + userName.length();
74       try {
75         result = requestUrlStr.substring(start, end);
76       } catch(Exception ex) {
77         logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
78       }
79     }
80     return result;
81   }
82   
83   protected String getUserName(HttpServletRequest hr) {
84     String userName = null;
85     Object p = hr.getUserPrincipal();
86     if (p instanceof Principal) {
87       userName = ((Principal) p).getName();
88     }
89     return userName;
90   }
94a2d9 91   
U 92   protected abstract void seiteAusgeben(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
5bfcdd 93
U 94 }