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 |
} |