Tomcat User anlegen

stoennies

Grünschnabel
Hallo!
Ich bin Neuling auf dem Gebiet J2EE, Tomcat and so on....
Nun habe ich das Problem, dass ich ein Mapping zwischen den "normalen" Tomcatusern und einer zweiten Userdatenbank hinbekommen muss...
Meine Frage lautet also: Wie kann ich an die Userdaten von Tomcat herankommen und kann ich über irgendeine API auf die Userdatenbank von Tomcat zugreifen? Oder muss ich die Userdatei (ist ja XML) einlesen und "manuell" verändern?
 
Hi stoennies,

ich würd gern versuchen dir zu helfen nur habe ich noch nicht ganz verstanden, was du da genau machen möchtest. Kannst du dein Problem vielleicht etwas genauer beschreiben?
Bisher verstehe ich das so, dass du unterschiedlichen Userdatenbank-einträgen unterschiedliche Rechte auf dem Webserver geben willst und dazu die Tomcat-User auslesen möchtest.... hast du dazu vielleicht ein Beispiel?

Gruß
Scuffy
 
Hallo!

Ich glaube der op meint die tomcat-users.xml aus dem Conf Verzeichnis.
Schau doch einfach mal was die Manager/Admin WebApp da macht, mit der kannst du ja auch einen neuen User hinzufügen.

Gruß Tom
 
klarr, aber was soll wie miteinander verknüpft werden? Irgendwie soll ja anscheinend eine Art "mapping" geschehen - von der xml und einer weiteren User-DB... hab ich jedenfalls so interpretiert :confused:
 
Hallo Scuffy,

also ich werde gerne genauer! Es geht darum:

* Ich will mittels Servlet eine eigene Userverwaltung erstellen, die in keiner Art und Weise mit der Tomcatauthentifizierung zusammen arbeiten soll.

* ABER: Ich muss für jeden User, den ich bei mir im System anlege, einen Tomcat-User anlegen, da dieser für ein anderes System benötigt wird, welches ich nicht verändern kann und diese einen User in der Tomcat-user.xml erwartet.


Meine Überlegung war also, direkt auf die tomcat-user.xml Datei zuzugreifen. Allerdings finde ich das nciht so schön, da es ja sein kann, das auf anderen Installation zum Beispiel eine Datenbank dahintersteht. Nun ist meine Frage also, wie und mittels welcher API kann ich die User aus der Userdatenbank von Tomcat auslesen und verändern?
 
Zuletzt bearbeitet:
Hallo!

Hab mir gerade mal die Sourcen zur Tomcat Admin Webapp angeschaut. Dort verwenden sie JMX um über ein MBean einen neuen Benutzer in die Tomcat-users.xml einzufügen.
Stelle heute oder morgen mal ein Beispiel bereit.

Gruß Tom
 
Hallo!

Wie versprochen:
Du musst das commons-modeler.jar aus dem %TOMCAT_HOME%/server/lib Verzeichnis in dein WEB-INF/lib kopieren.

Code:
package de.tutorials.web;

import java.io.IOException;

import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.modeler.Registry;

/*
 * Created on 04.03.2005@20:28:45
 *
 * TODO Some Licence info...
 */

/**
 * Servlet Class
 * 
 * @web.servlet-mapping url-pattern="/TomcatUserServlet"
 * @web.servlet description="TomcatUserServlet" display-name="TomcatUserServlet"
 *              name="TomcatUserServlet"
 *  
 */
public class TomcatUserServlet extends HttpServlet {

    /**
     *  
     */
    public TomcatUserServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        processRequest(req, resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        processRequest(req, resp);
    }

    public void processRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        MBeanServer mbs = Registry.getRegistry().getMBeanServer();

        try {
            ObjectName oname = new ObjectName(
                    "Users:type=UserDatabase,database=UserDatabase");

            mbs.invoke(oname, "createUser", new Object[] { "foo", "bar",
                    "foobar" }, new String[] { "java.lang.String",
                    "java.lang.String", "java.lang.String" });

            mbs.invoke(oname, "save", new Object[0], new String[0]);

            System.out.println("finish");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

HTH,

Gruß Tom
 
OK, das Beispiel funktioniert auch bei mir :)

Nun möchte ich aber gerne noch einen User auslesen, da ich nur so einem User Rollen hinzufügen kann etc. Jetzt gibt es rein theoretisch die Möglichkeit, direkt auf der Klasse
Code:
org.apache.catalina.mbeans.MemoryUserDatabaseMBean
zu arbeiten, oder mittels
Code:
invoke(oname, "findUser"...)
an den MBean-Namen des User zu kommen.
Aber wie kann ich nun weiter machen? Sprich, was bringt es mir, wen ich den MBeanNamen habe?
 
Zuletzt bearbeitet:
Hallo!

Hab das commons-modeler.jar aus dem Tomcat_HOME/Server/lib Verzeichnis genommen... hab die Meldung auch bekommen, aber mit Java 5 JMX gings leider nicht...
google doch mal nach MX4J und schau auf apache.org nach dem commons Modeler Projekt.

(Tomcat 5.0.28)

Gruß Tom
 

Neue Beiträge

Zurück