5. Februar 2012  
  Suche:
 
  Basics
  Code-Galerie
  Forum
  FAQ
  Tipps & Tricks
  Literatur
  Knowledge Base
  Workshops
  JSP-Hosting
  JSP-Engines
  Jobbörse
  Links
  JSP-Sites
  Newsletter
  JSP-Test
  Impressum
  Username:
  
  Passwort:
  
  

  Jetzt registrieren
  Warum registrieren?

  Valid HTML 4.01!
  Valid CSS!
Forum

tomcat mit formbased login
 jeffyjazz, 29.12.2009 00:06:34

Hallo zusammen!

Mein Problem hört sich ziemlich leicht an, aber ich finde keine Lösung mehr, obwohl ich schon ziemlich lange darüber brüte. Ich gebe auch gerne zu, dass ich noch sehr wenig über tomcat und den formbased login weiß, aber nun zur Sache.

ich habe die server.xml meines tomcat 6 so konfiguriert, dass er sich per JDBCRealm an einer MySQL Datenbank authentifizieren soll. In der web.xml habe ich ein security constraint auf mein komplettes Applikationsverzeichnis gesetzt. Ich rufe aus einer start.html die außerhalb des protected-Verzeichnis liegt den Homecontroller auf, welcher die home.jsp im protected-Verzeichnis aufruft.

Soweit ich das verstanden habe sollte dann, weil ein Zugriff auf protected erfolgt automatisch die in der web.xml angegebene Loginseite (login.jsp) aufgerufen werden. Hier erscheint bei mir der Fehler: Requested resource not available. Die Meldung erscheint auch bei allen anderen Views.

Ach ja, was ich auch nicht verstehe ist, dass wenn ich einen Controller über die Webpage aufrufe ich Zugriff auf alle Resourcen bekomme...das sollte doch eigentlich auch nicht möglich sein.

Wo könnte ich da den Fehler haben? Bin für jeden Tip dankbar!


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.


Re: tomcat mit formbased login
 gandalf, 29.12.2009 08:07:53

Man täte ja gerne helfen wollen, aber mit dieser ungenauen Info ist das wohl schwer möglich.
Poste mal:
  den web.xml abschnitt mit dem scurity-contraint
  deine dir-struktur
  was ist ein Homecontroller und wie ruft er die home.jsp auf?

gandalf


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.

Re: tomcat mit formbased login
 jeffyjazz, 29.12.2009 17:23:44

Oh, entschuldige bitte. Hier nun die genauen Infos.

web.xml:

<security-constraint>
   <web-resource-collection>
   <web-resource-name>HWVS</web-resource-name>
   <url-pattern>/protected/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>PUT</http-method>
            <http-method>DELETE</http-method>
   </web-resource-collection>
   <auth-constraint>
   <role-name>admin</role-name>
   </auth-constraint>
        <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
</security-constraint>
<login-config>
       <auth-method>FORM</auth-method>
       <realm-name>org.apache.catalina.realm.JDBCRealm</realm-name>
       <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/error.jsp</form-error-page>
       </form-login-config>
</login-config>
<security-role>
        <role-name>admin</role-name>
</security-role>

meine dir-struktur:

WebContent
    - protected (dir)
    - WEB-INF (dir=
        - lib (dir mit allen *.jar)
        - hwv-servlet.xml
        - web.xml
    - start.html (mit link auf login.jsp)
    - start1.html (mit link auf /protected/index.jsp)
    - login.jsp
    - error.jsp

Die beiden start.html hab ich jetzt mal zum Testen angelegt, da ich gelesen habe, dass man die login.jsp nicht direkt aufrufen darf, weil sonst der Redirect nach j_security_check nicht funktioniert.
Wenn ich allerdings start1.html verwende und die index.jsp aufrufe, dann erscheint die login.jsp nicht und die sollte ja immer automatisch angesteuert werden, wenn man auf /protected/* zugreifen will.

Controller: Wir müssen MVC verwenden und mit ModelAndView (httpRequest a, httpResponse b) arbeiten. Über diese Controller (einer davon nennt sich bei mir Home) sollen dann die jsp aufgerufen werden. Die Controller werden mit simpleUrlMapping in der hwv-servlet.xml zugeordnet. Hier noch der Ausschnitt:

   <!-- Zuordung (mapping) von URL (command) zu Controller -->
   <bean id="simpleUrlMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
      <property name="mappings">
         <props>
            <prop key="/home.s">HomeCo</prop>
         </props>
      </property>
   </bean>

Übrigens arbeite ich mit dem Tomcat 6 in Eclipse mit Spring und Hibernate, ich weiß nicht ob das was macht.

Hier noch die JDBCRealm Config in der server.xml:

  <Realm    className="org.apache.catalina.realm.JDBCRealm"   
      driverName="org.gjt.mm.mysql.Driver"
      connectionURL="jdbc:mysql://localhost:3306/hwvs"   
      connectionName="tomlog"   connectionPassword="12345678"
      digest="MD5"
      userTable="tbl_user" userNameCol="userid" userCredCol="passwd"
      userRoleTable="tbl_user" roleNameCol="role"/>

   


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.

Re: tomcat mit formbased login
 jeffyjazz, 29.12.2009 20:40:59

habe gerade noch was entdeckt.

anscheinend funktioniert die authentifizierung. wenn ich die login.jsp direkt aufrufen und gebe die anmeldedaten falsch ein, dann komm ich wie gewünscht auf die error.jsp. wenn ich die daten aber richtig eingebe, dann bekomme ich den folgenden fehler:

Invalid direct reference to form login page

wie ich gelesen habe bekommt man den fehler immer, wenn man sich direkt an der login.jsp anmelden will, wegen dem redirect von j_security_check.
also anscheinend stimmt was mit meiner web.xml nicht. ich seh nur nicht was...

dennoch schonmal danke für nen tipp!


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.

Re: tomcat mit formbased login
 hansi, 01.01.2010 19:28:43

hi jeffyjazz schau mal hier.

http://www.tek-tips.com/viewthread.cfm?qid=573337



Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.

Re: tomcat mit formbased login
 jeffyjazz, 01.01.2010 20:56:11

Danke! Den Beitrag habe ich schon gelesen, das war ja, wenn man direkt über die login-page geht.

Aber ich bekomme die login-page nicht, wenn ich z. b. die index.jsp im protected Bereich aufrufe. Ich krieg dann sofort ohne Anmeldung die index.jsp und das sollte ja nicht sein!

Gibt's noch irgendwas in der web.xml was man setzen muss, ich meine im security-constraint?

Ich habe auch das security example auf dem selben Tomcat versucht, allerdings auch ohne Erfolg. Ich habe den Tomcat auch schon mal deinstalliert und von vorne angefangen, aber das Ergebnis war dasselbe.

Danke nochmal!


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.

Re: tomcat mit formbased login
 hansi, 02.01.2010 18:20:40

hi jeffyjazz,
> Aber ich bekomme die login-page nicht, wenn ich z. b. die index.jsp im protected Bereich aufrufe. Ich krieg dann sofort ohne Anmeldung die index.jsp und das sollte ja nicht sein!

Auch wenn die session zertört ist?
Das passt mit dem nicht zusammen.
> anscheinend funktioniert die authentifizierung. wenn ich die login.jsp direkt aufrufen und gebe die anmeldedaten falsch ein, dann komm ich wie gewünscht auf die error.jsp. wenn ich die daten aber richtig eingebe, dann bekomme ich den folgenden fehler...

> ... ich weiß nicht ob das was macht.
> <Realm ... driverName="org.gjt.mm.mysql.Driver" connectionURL="jdbc:mysql://localhost:3306/hwvs"  ... 
Es geht direkt über die Java Database Connectivity (Schnittstelle) und den MySQLTreiber in die MySQL DB, da funkt nichts dazwischen.

zb
Wenn eine index.htm im root der Webseite liegt in der nur das Meta <meta http-equiv="refresh" content="0; URL=http://www.Ihre-Domain.de/protected/index.jsp"> enthalten ist.(Einstieg)
Tomcat lässt den meta refresh auf Grund der fehlgeschlagenen Authentifizierung  nicht durch, merkt dabei die aufgerufene Seite, "leitet"  weiter auf die error Page.
(Das Anmeldeformular war bis jetzt noch nicht zu sehen, dafür ist jetzt bekannt wohin bei einer positiven Authentifizierung geleitet werden soll)

In der error page ist schöne Formular zur Anmeldung enthalten.
Ist das formular Formular ausgefüllt und die Daten sind ok leitet tomcat auf die Seite, die durch die Metha Tag refresh aufgerufen worden ist.

Die Meta tag Lösung hilft erst mal das verstehen, der
Aufruf im geschützen Bereich kann ja auch über andere Mechanismen ausgelöst werden.

Ich denke die Einestellungen in der xml sind soweit in Ordnung.
Hilfreich zu wissen ist das tomcats REALM nur prüft ob die
Authentifizierung Ordnung ist oder fehlgeschlagen ist
bei einem fehlschlage "merkt" er sich welche Seite im geschützen Bereich aufgerufen worden ist.

Kurz:
Wenn Authentifizierung ok, Weiterleitung auf die Seite im geschützent Bereich
(die zuvor aufgerufen worden ist) ansonsten Weiterleitung error Page.
Mehr macht das RALM nicht.

Wurde zuvor keine Seite im geschützen Bereich aufgerufen und die Authentifizierung schlägt NICHT fehl, wird eine leere Seite angezeigt, weil nicht bekannt ist auf welche seite das REALM weiterleiten soll, das Ergebniss ist eine leere Seite ev. eine Fehlermeldung.

Wenn die Session, aus welchen Gründen auch immer,
zertört ist, ist die Anmeldung auch futsch
und man findet sich mit dem nächsten klick auf einen Link
der auf den gschützen Bereich zeigt,
auf der error page mit dem Anmeldeformular wieder.


hansi


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.

Re: tomcat mit formbased login
 jeffyjazz, 03.01.2010 02:12:09

gut, glaube das ich das soweit verstanden habe.

bei mir befindet sich in der ungeschützen start.html ein link zur home.jsp.
die home.jsp liegt im ordner protected.
wenn ich den link jetzt anklicke bekomme ich ohne vorherige anmeldung die home.jsp angezeigt, obwohl ich nicht angemeldet bin. es erscheint also bei mir kein login obwohl ich auf den protected bereich zugreife.

der zugriff wird auch nicht unterbunden. dachte, da würde dann ohne gültige anmeldung sowas wie eine meldung "you have no permission" kommen.

Also mein
Problem Nr. 1: anmeldefenster erscheint nicht beim zugriff auf /protected obwohl security-constraint gesetzt ist.
Problem Nr. 2: trotz nicht vorhandener/fehlgeschlagener anmeldung kann ich auf den ordner /protected zugreifen und alles im browser aufrufen was darunter liegt.

wenn jetzt noch die web.xml in ordnung ist, hab ich keine ahnung mehr wo ich da den fehler suchen soll...

bin nach wie vor für jeden tipp offen.


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.

Re: tomcat mit formbased login
 hansi, 04.01.2010 17:01:32

...es erscheint also bei mir kein login obwohl ich auf den protected bereich zugreife.
Ist sichergestellt das durch vorherige versuche keine session besteht bei der die Anmeldung erfolgreich war.
(Holzhammer: cookies löschen und alle Browser schliesen und neu starten.)
oder ein logout Seite mit session.invalidate();

...ohne vorherige Anmeldung die home.jsp angezeigt
in den protected Bereich muss! der der Zugriff verweigert wenn die Authentifizierung fehlgeschlagen/nicht stattgefunden hat.
(Wobei ich denke das du bereits angemeldet warst, dann passiert nichts.)

...sowas wie eine meldung "you have no permission" kommen
Nein, so eine Meldung gibt es nicht, es sollte die <form-login-page> angezeigt werden.


ansonste, ka und von vorne anfangen. Step by step.
und http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html zu rate ziehen.

Der Treiber muss im ordner $CATALINA_HOME/lib/ directory. liegen und mit "JAR" enden.
(Bei funktioniert es auch wenn das jar kleingeschrieben ist.)

Globale recource in der server.xml eintragen.
<GlobalNamingResources>
    <!-- Editable user database that can also be used by
        UserDatabaseRealm to authenticate users       
    -->
    <Resource auth="Container"/>
  </GlobalNamingResources>
Datenbank aufbauen und mit einer jsp testen ob die Verbindung funktioniert.

Das Beispiel im %TOMCAT%/webapps/jsp-examples/security
+web.xml
Testen und das JDBCRealm aufzubauen.
( Die server.xml <Realm> tag nicht vergessen )
Erst wenn das tut das digest="MD5" einschieben.

Ach was mir noch aufgefallen ist das deine error u. login ausserhalb von Protected Area liegt.
Im tomcat Beispiel liegt es innerhalb.

tomcat web.xml zB
    <security-constraint>
      <display-name>Example Security Constraint</display-name>
      <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
    <!-- Define the context-relative URL(s) to be protected -->
        <url-pattern>/jsp/security/protected/*</url-pattern>
    <!-- If you list http methods, only those methods are protected -->
    <http-method>DELETE</http-method>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    <http-method>PUT</http-method>
      </web-resource-collection>
      <auth-constraint>
        <!-- Anyone with one of the listed roles may access this area -->
        <role-name>tomcat</role-name>
    <role-name>role1</role-name>
      </auth-constraint>
    </security-constraint>
   
    apache-tomcat\webapps\examples\jsp\security\protected\login.jsp
    apache-tomcat\webapps\examples\jsp\security\protected\index.jsp
    apache-tomcat\webapps\examples\jsp\security\protected\error.jsp
   
hansi


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.

Re: tomcat mit formbased login
 jeffyjazz, 04.01.2010 21:16:13

ok, also ich hab jetzt die login-page und error-page in das protected verzeichnis gelegt, aber immer noch keinen erfolg.

ich fange jetzt einfach nochmal von vorne an und installier in einer virtuellen maschine ganz neu, den tomcat hab ich ja schon zweimal neu aufgesetzt!

danke für eure hilfe!

ciao
da jj


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.

Re: tomcat mit formbased login
 gandalf, 04.01.2010 21:32:08

Ich würde es mal ohne jdbc-realm und ohne ssl probieren und dann schrittweise umstellen.
Kommen Fehler in den Logdateien?

login-page und error-page dürfen NICHT in das protected verzeichnis.
das war schon so richtig, wie es ursprünglich war.

gandalf


Zum Antworten auf einen Beitrag müssen Sie registriert und angemeldet sein.


Legende: Anonymer User     registrierter User     sehr aktiver User

<< zurück 


Hinweis: Auf dieser Seite liegen Links zu anderen Seiten im Internet. Für alle diese Links gilt: Wir betonen ausdrücklich, daß wir keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten haben. Deshalb distanzieren wir uns hiermit ausdrücklich von allen Inhalten aller gelinkten Seiten auf dieser Homepage und machen uns ihre Inhalte nicht zueigen. Diese Erklärung gilt für alle auf unserer Homepage angebrachten Links

Redaktion/Betreiber von JSP-Develop übernehmen keinerlei Gewährleistung und Verantwortung für die Richtig- und/oder Vollständigkeit von den auf den Webseiten JSP-Develop veröffentlichten Source Codes. Die Verantwortung der Verwendung/Anwendung sowie etwaige Modifikation der hier veröffentlichten Sourcen obliegt einzig dem Benutzer der Webseite, welche die veröffentlichten Sourcen in einer Applikation/Anwendung einsetzt. Durch das Kopieren und/oder Benutzen der Sourcen in einer Applikation/Anwendung bzw. etwaigen Abschriften wird dieser Rechtshinweis anerkannt.

Java, JSP, JavaServer Pages, J2EE, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and in other countries. IBM, WebSphere are trademarks or registered trademarks of International Business Machines Corporation. Other trademarks and registered trademarks are the property of their respective owners.