/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package de.uhilger.wbx.web; import java.io.IOException; import java.security.Principal; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.catalina.servlets.DefaultServlet; /** * Das WbxServlet prueft fuer alle HTTP GET Anfragen den Conetxt Path. Wenn * er /home enthaelt, muss der angemeldete Benutzer mit dem Benutzernamen * im Pfad uebereinstimmen. Stimmt er nicht ueberein oder ist kein Nutzer * angemeldet, wird ein Fehler ausgegeben. * * Alle anderen Pfade als /home werden ohne Anmeldung ausgegeben. * * Die Ausgabe des Inhalts wird auf die abstrakte Methode seiteAusgeben * umgeleitet. Serlvets, die von WbxServlet abgeleitet werden, koennen * die Methode seiteAusgeben so implementieren, dass sie z.B. den * Inhalt der Ausgabe nach Wunsch veraendern. * * @author ulrich */ public abstract class WbxServlet extends DefaultServlet { protected static final Logger logger = Logger.getLogger(WbxServlet.class.getName()); protected static final String HOME_CTX = "/home"; /** * Handles the HTTP GET method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String contextPath = request.getContextPath(); if(HOME_CTX.equals(contextPath)) { String userName = getUserName(request); if (userName != null) { String urlUser = getUrlUser(request, userName); if(userName.equals(urlUser)) { seiteAusgeben(request, response); } else { logger.fine("Wrong user."); } } else { logger.fine("Missing login."); } } else { seiteAusgeben(request, response); } } protected String getUrlUser(HttpServletRequest request, String userName) { String result = ""; String requestUrlStr = request.getRequestURL().toString(); String contextPath = request.getContextPath(); if(contextPath != null && requestUrlStr != null && userName != null) { int start = requestUrlStr.indexOf(contextPath); start += contextPath.length(); start++; int end = start + userName.length(); try { result = requestUrlStr.substring(start, end); } catch(Exception ex) { logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex); } } return result; } protected String getUserName(HttpServletRequest hr) { String userName = null; Object p = hr.getUserPrincipal(); if (p instanceof Principal) { userName = ((Principal) p).getName(); } return userName; } protected abstract void seiteAusgeben(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; }