tomcat 7 Formular-basierter Authentifizierung
gegeben ein Servlet HelloServlet:
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public HelloServlet() {
//TODO Auto-generated constructor stub
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//TODO Auto-generated method stub
System.out.print("hello my Friend: " + request.getRemoteUser());
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("This is the Test Servlet");
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = (String) headerNames.nextElement();
out.print("<br/>Header Name: <em>" + headerName);
String headerValue = request.getHeader(headerName);
out.print("</em>, Header Value: <em>" + headerValue);
out.println("</em>");
}
}
....
}
mit einem deklarierten tomcat security policy in web.xml:
<security-constraint>
<web-resource-collection>
<web-resource-name>my application</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>tomcat</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login-failed.jsp</form-error-page>
</form-login-config>
</login-config>
- und tomcat-Rollen-Definitionen conf/tomcat-users.xml
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
the realm "server.xml":
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
Habe ich versucht, Zugriff auf den Servlet "HelloServlet" mit der url localhost/jsfWorkgroup/HelloServlet.
sich, wie zu erwarten, bin ich (wieder)direkt auf die einloggen-Seite:
<form method="POST" action="j_security_check">
<table>
<tr>
<td colspan="2">Login to the Tomcat-Demo application:</td>
</tr>
<tr>
<td>Name:</td>
<td><input type="text" name="j_username" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="j_password"/ ></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Go" /></td>
</tr>
</table>
</form>
Egal, welche id-Token verwendet habe ich:
- Benutzername:tomcat passwort:tomcat
- Benutzername:sowohl passwort:tomcat
Ich immer noch kommen, um die Störung /der login ist fehlgeschlagen.jsp.
hier ist mein nehmen auf dieser: tomcat wirkt auf umleiten mich auf die login-Seite, aber nicht gelesen conf/tomcat-users.xml zur Gültigkeit meiner Anmeldung(auch nach mehreren Neustarts).
was haltet Ihr davon ?
Konfiguration: Tomcat 7.0.23, Eclipse-Indigo
Ich aktualisiert meine Antwort dementsprechend
Überprüfen Sie die Kommentare in
conf/tomcat-users.xml
: alles wird kommentiert-out um zu verhindern, dass jede Art von Zugriff, die in einer Standard-Konfiguration.
InformationsquelleAutor arthur | 2012-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
folgende Aussage von @pd40 ich habe versucht, die Beispiele/jsp/Sicherheit/protected/Beispiele, aber nicht in der Eclipse-IDE, wo Tomcat ist in der Regel eingebettet, zusammen mit den anderen Servern (Glassfish, JBoss, ect..) , sondern ich startete den tomcat server als standalone-Version (in den /bin-Verzeichnis) .. und da funktioniert es.
aber wenn es attemped to run-security-basierte Web-Anwendung in Tomcat innerhalb von Eclipse, es wieder erfolglos, auch mit der Konfiguration oben beschrieben.
Ich weiß nicht, ob ich richtig bin aber Web-Application-Security wird nur unterstützt, wenn tomcat läuft außerhalb von eclipse..
InformationsquelleAutor arthur
Den tomcat-Beispiel web.xml enthält der folgende Abschnitt unten
<login-config>
:die Sie benötigen.
Tomcat beinhaltet eine Beispiel Krieg, die enthält eine auth mit tomcat-users.xml ähnlich zu dem, was Sie versuchen. Wenn tomcat home/webapps/examples bereitgestellt wird, versuchen Sie, auf http://localhost/examples/jsp/security/protected/. Stellen Sie sicher, dass die XML-Kommentare, um die Rolle/Benutzer-Abschnitt der tomcat-users.xml entfernt wurden. Sie sind standardmäßig auskommentiert.
Können Sie betrachten, stoßen sich die Protokollierung, um die diagnose der auth-Problem.
Dein login ist.jsp posting j_username & j_password in das Formularfeld?
ja ... die Login-Seite auch in der Frage oben Hinzugefügt..
Ich habe versucht, die Beispiele/jsp/Sicherheit/protected/ lokal. Es hat nicht funktioniert, bis ich un-kommentiert die Rolle/Benutzer-Abschnitt. Nur Kontrolle. Wahrscheinlich haben Sie dies bereits getan..
+1 für die examples/jsp/Sicherheit/protected/. in der Tat es funktioniert wie erwartet, aber nur, wenn ich die Bereitstellung der webapp Krieg außerhalb von eclipse in der stand-alone-tomcat... also begann ich zu denken und ...
InformationsquelleAutor pd40
Dies ist zu spät für mich zu beantworten, aber vielleicht jemand kommen, hier können das nützlich finden.
Eigentlich, wenn Sie vor dem problem, nicht zu bekommen, die tomcat-Konfiguration zu arbeiten, über eclipse und läuft außerhalb, dann löschen Sie einfach den server aus eclipse Registerkarte "Server", und fügen Sie wieder. Dies sollte das problem lösen.
Können Sie einfach aktualisieren Sie Ihre tomcat-conf in der "Server" - Projekt von Eclipse automatisch erstellt. Update tomcat-users.xml für die Instanz, und starten Sie Tomcat neu. Es sollte gut funktionieren.
InformationsquelleAutor Prasad Kharkar
Haben Sie eingeschränkten Zugriff auf Ihre Inhalte, indem Sie
Definition von gesicherten Seiten in web.xml:
dass wildcard bezieht sich auf alle Seiten im content-Pfad.
So erhalten Sie eine Infinitiv-loop der Umleitungen auf die login-Seite.
Sie sind zu trennen, Standard-Inhalte von Anwendungen, die gesichert werden muss aus login und "loginerror" Seite, nur setzen Sie Sie in verschiedenen Verzeichnissen. Für Beispiel-content /Arbeit/ und loggen Sie sich, "loginerror" in /loginPages/. Natürlich müssen Sie ändern web.xml Einstellungen jeweils.
InformationsquelleAutor WojtekSZ
Entdeckte ich, dass, wenn Sie ändern die Konfiguration von Benutzern in die tomcat-users.xml eingebettet in eclipse starten Sie eclipse nicht nur die server für den neuen Benutzer erkannt zu werden. Ich denke, dass eclipse speichert die tomact-user.xml Datei.
InformationsquelleAutor Alex Theedom