JSF Komisches Verhalten nach Login per Realm

Willi2793

Aktives Mitglied
Hallo,

ich versuche gerade einen Login per JDBCRealm zu realisieren. Im Prinzip funktioniert es auch. Soll heissen: nach einer falschen UID/PWD Eingabe erscheint die Fehler-Seite. Allerdings ist die Reaktion nach einer gültigen Kombi für mich merkwürdig. Ich zeige erstmal die relevanten Code-Teile:

web.xml:
[XML] <welcome-file-list>
<welcome-file>/home.xhtml</welcome-file>
</welcome-file-list>
<security-constraint>
<display-name>userConstraint</display-name>
<web-resource-collection>
<web-resource-name>all</web-resource-name>
<description/>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>user</role-name>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>twiburealm</realm-name>
<form-login-config>
<form-login-page>/faces/login.xhtml</form-login-page>
<form-error-page>/faces/loginError.xhtml</form-error-page>
</form-login-config>
</login-config>
<security-role>
<description/>
<role-name>user</role-name>
</security-role>
<security-role>
<description/>
<role-name>admin</role-name>
</security-role>[/XML]

login.xhtml:
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <body>
        <ui:composition template="/template.xhtml">
            <ui:define name="title">
                <h:outputText value="TWiBu - Login"/>
            </ui:define>
            <ui:define name="header">
            <c:set target="#{flash}" property="keepMessages" value="true" />
            </ui:define>
            <ui:define name="content">
                <f:view>
                    <form method="post" action="j_security_check" name="loginForm">
                        <p/>Bitte melden Sie sich
                        <p/>mit Ihrer Userid und
                        <p/>Ihrem Passwort an:
                        <p/>
                        <h:outputLabel value="Userid:"/>
                        <h:inputText id="j_username"/>
                        <br/>
                        <h:outputLabel value="Passwort:"/>
                        <h:inputSecret id="j_password"/>
                        <p/>
                        <h:commandButton value="Login" id="loginid"/>
                        <p/>
                        <h:message for="loginid"/>
                    </form>
                </f:view>
            </ui:define>
        </ui:composition>
    </body>
</html>

template.xhtml:
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 
        <meta http-equiv="Pragma" content="no-cache" /> 
        <meta http-equiv="Expires" content="0" /> 
        <h:outputStylesheet library="style" name="twibu.css"/>
        <link rel="shortcut icon" type="image/x-icon" href="#{request.contextPath}/resources/images/icon.ico" />
        <link rel="icon" type="image/x-icon" href="#{request.contextPath}/resources/images/icon.ico" />
        <title><ui:insert name="title">TWiBu - Standard-Titel</ui:insert></title>
        <ui:insert name="header"/>
    </h:head>
    <h:body>
        <ui:insert name="content"/>
    </h:body>
</html>

Die interessante Zeile ist in template.xhtml. Und zwar setze ich da ja einen link für eine CSS-Datei:

Code:
<link rel="shortcut icon" type="image/x-icon" href="#{request.contextPath}/resources/images/icon.ico" />

Wenn diese Zeile da ist wird nach erfolgreichem Login diese CSS-Datei im Editor geöffnet. Ist die Zeile nicht da kommt die gewünschte Seite home.xhtml. Ich habe keine Idee woran das liegen könnte.

Grüße,
Willi

P.S.: Das Ganze unter GlassFish 3.1.2 unter windows
 
Zuletzt bearbeitet:

jwiesmann

Bekanntes Mitglied
ist relativ einfach zu erklären, der Browser versucht die Zeile zu laden, was er jedoch nicht darf, da du noch nicht eingeloggt bist.
Sobald du dich dann einloggst, wirst du wahrscheinlich die CSS Datei sehen. (Ist aber glaub ich nicht bei jedem Browser so).
Um dem entgegen zu wirken, kannst du mal folgendes versuchen:
[XML]
<security-constraint>
<web-resource-collection>
<web-resource-name>All Access</web-resource-name>
<url-pattern>/resources/style/*</url-pattern> <!-- bin ich mir nicht zu 100% sicher :D -->
<http-method>DELETE</http-method>
<http-method>PUT</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
[/XML]

Viel mehr infos findest du auch hier:
Understanding Web Security Using web.xml Via Use Cases | Javalobby

Edit:
Was als info noch fehlt :) der obere Teil der XML bedeutet dann, dass man auf "/resources/style/*" ohne login zugreifen darf...

Gruß
 

Willi2793

Aktives Mitglied
Danke, das war es zwar noch nicht ganz, aber ich habe jetzt eine Idee in welche Richtign ich suchen kann/muss. Warum Dein Vorschlag noch nicht ganz zum Ziel führte: Diese Definition definiert "unchecked access". Also für jeden authentifizierten User. Aber beim anzeigen der Login-Seite ist er ja noch nicht authentifiziert ;)

Ich suche mal weiter, hindere aber natürlich niemanden weiter Ansätze zu liefern. :D

Grüße,
Willi
 

Willi2793

Aktives Mitglied
Jetzt klappt's.

Das Problem war, das ich noch den URL-Pattern "/*" definiert hatte auf den nur User mit einer Rolle Zugriff hatten. Darunter fielen dann auch die URLs "/resources/*". Ich habe nun alle Seiten ausser login, loginError und template in ein user-Verzeichnis verschoben und dies in dem Pattern definiert. Dadurch sind auch die resoureces nicht mehr geschützt.

Vielen Dank für den Denkanstoss. Jetzt habe ich nur noch ein Problem mit dem "favicon". Aber das ist ein anderes Thema und wenn ich nicht weiter komme eröffne ich einen andere Thread.

Grüße,
Willi
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Redirect führt zu seltsamen CSS-Verhalten Web Tier 8
P JSF Merkwürdiges Verhalten einer Bean Web Tier 11
I HTML nach Image Web Tier 1
F Formular nach erfolgreichem Login ausblenden Web Tier 0
J Session ist nach Klick auf Zurück-Button wieder aktiv Web Tier 3
N RequestDispatcher: include-Aufruf einer jsp scheitert nach mehreren forward-Aufrufen Web Tier 1
J Suche nach einem Webframework Web Tier 5
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
S Rendern einer Komponente nach actionListener Web Tier 2
A Wartezeit nach Tomcat start wegen Servlets zu hoch Web Tier 2
F JSF - Submit nach Validation-Failed Web Tier 6
J Nach SVN-Update alle Beans resolved to null Web Tier 3
V JSF oncomplete-Attribut nach action-Attribut auswerten Web Tier 3
K JSP String[] Array nach Javascript Web Tier 4
M JSF Dialog nur nach erfolgreicher Action schließen Web Tier 4
R Errorpage nach ViewExpiredException Web Tier 7
T Seam-Komponenten oder Java Bean soll direkt nach Appserver-Start "leben" Web Tier 4
P JSF Ajax refresh nach Linkklick Web Tier 4
M JSF Kein Zugriff auf ManagedBeans, nach JSF Migration von 1.2 nach 2.0 Web Tier 4
T JSF URL "hängt nach" - warum? Ausblenden möglich? Web Tier 4
T JSF ViewScoped - Zustand verliert sich nach Seitenaktualisierung Web Tier 8
F Migration eines CMS von PHP nach JAVA Web Tier 3
K Bilder nach dem Upload nutzen Web Tier 10
J Memory Leak in Servlet nach längere Laufzeit Web Tier 6
C Formulardaten der Reihe nach auslesen Web Tier 5
E JSF Datatable erst nach Buttonklick anzeigen Web Tier 2
S Webapp und mysql. mysql verliert die verbindung nach langer zeit Web Tier 6
E CSS wird nach RequestDispatcher.redirect nicht mehr geladen Web Tier 7
U SessionAttribut nach j_security_check setzen Web Tier 3
F Redirect nach Aufruf einer JSP Web Tier 5
S [SelectItems value(herkunft bean)] in [UI:repeat] lädt daten nicht neu nach Web Tier 3
hdi File Upload erst nach Prüfung Web Tier 4
D JSF: Best Practice "Session invalidate nach Schließen des Browsers"? Web Tier 3
D JSF: locale verliert Wert nach Navigation Web Tier 6
ruutaiokwu Wert hinter JSP-Tag nach Java-String in Skriptlet Web Tier 4
D Die ewige Suche nach dem richtigen Web-Framework Web Tier 34
M Properties der JSP nach input-result leer (Struts 2) Web Tier 2
S Attribute in Objektliste nach gecheckten Checkboxen setzen Web Tier 4
T Liste nach Anfangsbuchstaben getrennt ausgeben? Web Tier 2
Q browserfenster schließen nach HTTP-Authentifizierung Web Tier 3
T Selectbox nach klick submit Web Tier 1
G Seitenumbruch nach x Elementen Web Tier 3
M Authentifizierung über PhaseListener je nach Seite Web Tier 11
L Argumentübergabe von JSP nach Applet Web Tier 4
F nach Update auf RichFaces 3.2.0 Fehlermeldungen Web Tier 5
I servlet: init wird auch nach ServletException aufgerufen Web Tier 3
S JSF: Ändern von CSS Styles in commandLink nach Klick Web Tier 4

Ähnliche Java Themen

Neue Themen


Oben