# JSF - falsche HTTP-Adresse im Browser



## HomerSimpson (6. Jan 2011)

Hallo und ein gesundes neues,

ich habe mir ein JSF geschrieben, was soweit nach meinen Wünschen auch funktioniert. Ich verwende Tomcat 7 als Server. Nun möchte ich die Rechte der User bei der Bentzung des JSF einschränken. Dazu habe ich auch etwas gefunden. Tomcat ist soweit eingerichtet(tomcat-user.xml). Passwortabfrage klappt, nur nicht an der richtigen Stelle.
[XML]
<role rolename="manager"/>
<user password="tomcat" username="tomcat" roles="manager"/>
[/XML]

Mein JSF ist auch in der Lage darauf zuzugreifen(web.xml).
[XML]
<security-constraint>
  <web-resource-collection>
    <web-resource-name>gesperrt.xhtml</web-resource-name>
    <url-pattern>/faces/gesperrt.xhtml</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>manager</role-name>
  </auth-constraint>
  <user-data-constraint>
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
 </security-constraint>
<!-- login -->
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
 <security-role>
  <role-name>manager</role-name>
 </security-role>
[/XML]

Aber, wenn ich meine Anwendung im Browser erstmalig aufrufe, wird dort in der Adresszeile die richtige Adresse angezeigt. Wenn ich nun auf einen von mir per 'EL'- mit der Bean verbundenen Link aufrufen, erhalte ich die gewünschte Seite, aber mit der Adresse der vorherigen Seite, und nicht mit der der aktuellen Seite.
Das ist insofern doof, weil ich in der 'web.xml' meines JSF den Zugriff auf einige Seiten verweigern möchte. Das klappt ja auch. Nur mit dem Problem, die Adressleiste hinkt hinterher, und der User kann die(eigentlich) gesprerrte Seite aufrufen! Dazu auch doof, wenn der User wieder zurück will, wird ihm die Seite verweigert, welche ja nicht gesperrt sein sollte.

Das kann/darf nicht sein. :noe:

Wenn ich die gesperrte Seite im Browser direkt aufrufe, kommt wie erwartet eine Passwortabfrage. 

Ich dachte mir, ich schreibe einfach mal dieses meta - TAG in die Seiten, aber das wollte aber auch nicht klappen. Macht erst keinen refresh.
[XML]<meta http-equiv="refresh" content="0; URL=faces/gesperrt.xhtml"/>[/XML]


Kennt Ihr dieses Problem? Vielleicht kann mir jemand helfen dies abstellen? ???:L

Gruß der Homer


----------



## HomerSimpson (13. Jan 2011)

Das mit dem refresh hat geklappt, ist aber eine doofe Idee. 
Ein refresh auf die eigene Seite, na was soll ich sagen, es ist quasi ein endlosrefresh. :lol:
Habe den refresh gleich wieder rausgeschmissen, und forsche weiter. 

Mir geht´s *NUN* mehr um die Lösung meine JSF´s per "tomcat-users.xml" zu schützen, als um die falsche HTTP-Adresse, obwohl mich das immernoch ineressiert, warum nicht die eigendlich aktuelle Seite angezeigt wird.

Gruß der Homer


----------



## mvitz (13. Jan 2011)

Habe zuletzt für ein Uniprojekt auch mit JSF (die Implementierung die mit Glassfish v3 ausgelieftert wird) angefangen und bin dann auch recht schnell auf das Problem mit den URLs gestoßen.

Eine kurze google Suche hat mir dann einen Link präsentiert, in dem beschrieben wurde, dass dies halt die Arbeitsweise von JSF (bzw. von dieser spezifischen Implementierung) ist und das man das nicht ändern könnte.

Da das Projekt jedoch eher einer Website als einer Webanwendung entspricht, hab ich dann JSF verworfen und ein klassiches Request basierendes Framework genutzt.


----------



## HomerSimpson (13. Jan 2011)

Danke schon mal für den Erfahrungsaustausch. Damit bekommt man schon einmal einen anderen Blickwinkel, an das Problem heran zu gehen. 
Ich muss mal weiter sehen wie ich das Problem angehe, aber danke schon einmal.

Gruß der Homer


----------



## mvitz (13. Jan 2011)

Ich denke mal, es gibt für JSF Security einen anderen Ansatzpunkt, als über die Tomcat Constraints zu gehen.

Google doch mal nach "JSF Security" oder "Securing JSF Applications".


----------



## kidsos (13. Jan 2011)

Da käme wohl für dich entweder Spring Security oder Apache Shiro in Frage.

Habe ich selber noch nicht ausprobiert, steht aber für mein aktuelles Projekt auf der Agenda.


----------



## HomerSimpson (14. Jan 2011)

Klasse, 
ich werde mich dann mal mit Spring3 beschäftigen. Steht bei mir quasi auch auf der Agenda, nun wird´s wohl Zeit das auch anzugehen. 
Ich werde mich mal mit den Bereichen JSF-Security und Spring Secutity beschäftigen, danke.

Gruß der Homer.


----------



## JSFNoob (26. Jan 2011)

Ich hatte mal ein ähnliches Problem und habe mir dafür einen Phase-Listener geschrieben. In beforePhase habe ich mir den FacesContext besorgt und davon ausgehend die UIViewRoot. Darüber kommst du an die ViewId. Zusätzlich habe ich noch hinterlegt, welche Rolle auf welche Seite zugreifen darf, dazu kannst du dann die ViewId benutzen. Ist jetzt ganz grob, da ich gerade keine Zeit habe. 

Bei Bedarf kann ich es auch noch näher erläutern.


----------



## HomerSimpson (1. Feb 2011)

Ja, danke schon mal. Ich werde das mit dem Phase-Listener mal probieren. Ich werde das bei gelegenheit testen. Wenn es klappt, dann poste ich euch. 
Danke.
Gruß der Homer.


----------

