# Servlet vor Browser URL-Direktzugriff schützen



## ifconfig (5. Jun 2011)

Hallo,

ich will meine Servlets vor einem direkten Aufruf per Browser-URL schützen, sodass diese Servlets nur von meinem Controller-Servlet aufgerufen werden können. Somit will ich erreichen dass nur eingeloggte User diese Servlets nutzen können. 
Im Controller-Servlet will ich bspw. das Upload-Servlet dann so aufrufen:

```
RequestDispatcher dispatcher = request.getRequestDispatcher("upload");
dispatcher.forward(request, response);
```

Aber leider ist dieses Uploadservlet auch direkt im Browser aufrufbar per localhist:8080/app/upload
und genau dies will ich verhindern. Ich habe per Google nur rausgefunden dass man da in der web.xml irgendwas einstellen muss, aber ich bin da nicht weitergekommen.
Könnt ihr mir da bitte helfen?

Grüße
ifconfig


----------



## tagedieb (5. Jun 2011)

Security in Web Applicationen ist ein sehr breites Thema mit unterschiedlichen Lösungen.

Das erste was mir auffällt ist wenn das UploadServlet nicht direkt aus dem Browser aufgerufen werden soll wieso überhaupt ein Mapping für dieses Servlet definieren?  Du kannst das Servlet auch via Namen aufrufen: Java sample code - Forward to a servlet by name - Source code examples

Im web.xml kann man natuerlich Resourcen (URLs) schützen. Allerdings nur wenn der Server Zugriff auf das Userregistry (LDAP, DB oder Files) hat. Dann kann man auch via JEE Security Userberechtigungen pruefen (
	
	
	
	





```
request.isUserInRole(..)
```
)

Das einfachste ist aus meiner Sicht die Verwendung des *Spring Security *Filters, da dies wesentlich einfacher ist als die JEE Security. Dies entspricht auch eher deiner Lösung mit deinem Controllerservlet. Dafür sollte man eh lieber einen Filter einsetzen.


----------



## ifconfig (5. Jun 2011)

Hi Tagedieb,

danke, dein erster Vorschlag gefällt mir spontan am besten weil am einfachsten  Dann lass ich das Mapping in der web.xml einfach weg und definiere nur das Servlet selber wenn ich das richtig verstehe.
Werd ich ausprobieren so. 
Die anderen beiden Lösungen klingen etwas umfangreicher, da werd ich mich aber auch mal damit beschäftigen.

Meine aktuelle Authorisierungs-Behelfslösung: direkt in den abzusichernden Servlets frage ich zuerst ab, ob sie Session des Users auch ein Attribut login mit dem Value=true gesetzt hat. Nur dann wird das Servlet ausgeführt, ansonsten wird der User auf die Loginseite redirected. Funktioniert auch, kommt mir aber ein bisschen redundant vor.
Was haltet ihr von meiner Umsetzung?

Grüße
ifconfig


----------



## tagedieb (5. Jun 2011)

Spring Security funktioniert aehnlich, aber benutzt einen Filter anstatt eines Servlets. Der Vorteil den Filter kann man jedem Servlet vorlagern. Da kann man auch z.B. das Upload Servlet direkt ansprechen und es ist doch durch den Filter geschuetzt


----------

