JSF - falsche HTTP-Adresse im Browser

HomerSimpson

Mitglied
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

Mitglied
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

Top Contributor
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

Mitglied
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

Top Contributor
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

Aktives Mitglied
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

Mitglied
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

Neues Mitglied
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

Mitglied
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.
 

Ähnliche Java Themen

Neue Themen


Oben