# Tomcat 5.5.16 an Security-Constraint vorbeigeschlichen



## SaschaLR (11. Apr 2006)

Hallo!

Ich habe mich heute mal ein wenig mit den in Tomcat 5.5.16 eingebauten Sicherheitsmechanismen beschäftigt.

Ich habe eine Form-Basierte Authorisierung gewählt und das wie folgt ausgebaut:

Webroot:
/Webroot/index.jsp
/Webroot/secure/denied.html
/Webroot/secure/login.jsp
/Webroot/secure/secure.jsp

Folgendes soll passieren und funktioniert auch:

Wenn man im Browser direkt die Datei http://localhost:8080/Context/secure/secure.jsp aufruft wird erstmal die Datei secure/login.jsp aufgerufen und nachdem man sich erfolgreich gegen den Inhalt der MySQL-DB authentifiziert hat bekommt man die Seite secure/secure.jsp zu sehen. Ansonsten kommt man zu secure/denied.html

Die web.xml beinhaltet das folgende:


```
...
<security-constraint>
	<display-name>Security Constraint</display-name>
	<web-resource-collection>
		<web-resource-name>Protected Area</web-resource-name>
		<url-pattern>/secure/*</url-pattern>
	</web-resource-collection>
	<auth-constraint>
		<role-name>admin</role-name>
	</auth-constraint>
</security-constraint>
<login-config>
	<auth-method>FORM</auth-method>
	<realm-name>Form-based Authentication</realm-name>
	<form-login-config>
		<form-login-page>/secure/login.jsf</form-login-page>
		<form-error-page>/secure/denied.html</form-error-page>
	</form-login-config>
</login-config>
...
```

So weit, so schön! Nur gibt es jetzt ein Problem mit der Datei index.jsp die wie folgt ausschaut:

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<jsp:forward page="/secure/secure.jsp"></jsp:forward>
```

Das ganze hat zum Ziel, dass man auch beim Aufrufe von http://localhost:8080/Context/ gleich zum Login gebeten wird. Nur landet man sofort bei secure/secure.jsp - ohne einen vorherigen Login. Ich weiß, der Brwoser behält den Login im Speicher, daran liegt es aber definitiv nicht, denn auch nahc dem Browser neustart und ohne vorher anzumelden passiert genau das gleiche.

Es kommt mir so vor, als ob jsp:forward sich an den von mir getroffenen Sicherheitseinstellungen vorbeimogelt.

Wie kann ich das verhindern? Hab ich einen grundfalschen Ansatz genommen oder nur was beim Konfigurieren vergessen?

Dank und Gruß,
Sascha


----------



## mlange8801 (12. Apr 2006)

Sonst nimm doch response.sendRedirect().
jsp:forward ist ein serverseitiger forward.


----------



## SaschaLR (12. Apr 2006)

Danke! Der Tip hat geholfen!

Ich verstehe zwar immernoch nicht, warum ein serverseitiger Forward an den Sicherheitsrichtlinien vorbeigehen kann, aber dazu hab ich mich wahrscheinlich einfach noch zu wenig mit dem Thema bescäftigt 

Egal, jetzt gehts ja  Danke nochmals!


----------



## Guest (12. Apr 2006)

> Ich verstehe zwar immernoch nicht, warum ein serverseitiger Forward an den Sicherheitsrichtlinien vorbeigehen kann,



Na ja, als Programmierer kann man natürlich immer alle Sicherheitsbeschränkungen aushebeln

Du hast ja deine Sicherheitsbeschränkung auf das  url-pattern /secure/* gelegt.
Wenn Du Dir in secure.jsp den request.getURL() ausgeben läßt, dürfte das bei einem Aufruf über http://localhost:8080/Context/ nicht matchen.


----------

