Hi Rob, You have two separate sets of usernames and passwords here. One that the JDBC driver uses to open the database connection, and another set that Tomcat reads from a database table and compares to what you type in when prompted
The realm stuff sets up when Tomcat starts, but it just sits there until you try to get a JSP page that a webapp has designated in it's web.xml to be restricted.. When that happens, Tomcat will get your browser to generate a login dialog box, or will run your login page if you use form based authentication. Tomcat will then take the username and password that it gets from that and generate an SQL statement to select the password column of the userTable ("pg_shadow" in your case) in the row where the username is equal to whatever you typed into the login box. It uses the connection opened to your user/password table when Tomcat started and set up the realm using the driver, database name, usernames and passwords that you supplied in the server.xml realm entry. Tomcat then takes the password string that is returned and compares it to what you typed in as a password. If you have MD5 enabled it converts the password string you typed in to it's MD5 form before comparing it to what it pulls from the database. In this case you have to convert the password string to its MD5 format before you store it in the Postgres database. It looks like you have stuff set up properly, it also looks like the username "tomcat" and password "tomcat" are getting you into the database OK. Since you are not able to log in to webapps that require no role, it looks like the username or password that you are typing in when you try to log in is not matching what tomcat it getting from Postgres from the table "pg_shadow" in the "usename" and "passwd" fields, respectively. If there were some kindof error, with debug=99 your logs would have a lot of error info, particularly if there were some SQL error. I don't know what kind of logging Postgres has but you should see a successful SQL statement handled by Postgres in the log at the time you try to authenticate, even if authentication fails. If so, what you are typing in for username/password just isn't matching what's in the database, or more precisely what the JDBC driver is returning from the database. This could be a character set or case sensitivity issue with the JDBC driver you are using. This does work, believe it or not. I've been using it for months with the Firebird open source SQL database and various versions of Tomcat 4.1.X. Rick ----- Original Message ----- > Does Tomcat process the JDBC Realm on start up, or only when a web app asks > for authentication? I seem to recall that I was unable to start Tomcat if > the realm was not configured correctly. Also, I see a postgres process (see > below) which indicates a connection to the database. The process > shows 'tomcat' because that is the *user name* I am using in the realm > configuration. > > The column names are correct (postgres uses 'usename' not 'username'). > > The "tomcat" user has the correct privilages on the necessary tables. > > I have written a simple Java program that is able to connect and display data > from pg_shadow and pg_groupview. This program uses the same JDBC driver, > connection URL, user name ("tomcat"), and password. > > I have created my own web app (thinking the admin or manager web apps might > be the problem), but it is also unable to authenticate users. > > Any other ideas? I am using the JPackage RPM - could that have anything to > do with it? How about the JPackage RPM for xerces-J2? I know they have had > problems with xerces before (unable to view example web apps). > > -- > Robert Abernethy IV > Dynamic Edge, Inc. > 734.975.0460 > > > Hi Rob, > > > > > Ok, I tried cleartext passwords, but I came up with the same result. I > > don't > > > understand why tomcat is able to start up at all, if the authentication is > > > failing. > > > > Users are authenticated not Tomcat, so starting Tomcat has nothing > > to do with authentication. Tomcat is just a Java program. > > > > When a user tries to access a web app Tomcat will authenticate that > > user if that web app's web.xml file tells it to. The manager app is > > set up to require authentication . > > > > The web.xml file for admin is in > > CATALINA_HOME/server/webapps/admin/WEB-INF/web.xml, you can see how > > it is set up there. If you want to authenticate users for your own > > web apps, set up their web.xml security roles in a similar fashion. > > > > > When I run 'ps' after starting up tomcat, I see this process: > > > > > > 40 S postgres 2825 2758 0 75 0 - 2431 schedu 18:12 pts/0 > > 00:00:00 > > > postgres: tomcat template1 24.208.224.236 idle in transaction > > > > > > Seeing this makes me believe that Tomcat is correctlty connecting to the > > > database at startup. Is this true? If so, why can't the admin or manager > > > apps authenticate? They are using the same Realm (it's nested inside the > > > <Engine> tag) and I'm supplying the same username and password. > > > > A couple of other things you can check: > > > > Should userNameCol="usename" be userNameCol="username" ? > > > > Can you access Postgres data from that file in your web apps using that > > driver and username/password? You should be able to write a simple program > > to read the role names from the database. > > > > Within Postgres have you granted select privleges to the database > > table in template1 to the user tomcat in the tables pg_shadow and > pg_groupview? > > > > Can you use a db browser tool to log in as tomcat and execute an SQL > > command like: SELECT groname FROM TABLE pg_groupview WHERE usename > > IS 'tomcat'? > > > > Rick > > > > > > > > -- > > > Robert Abernethy IV > > > Dynamic Edge, Inc. > > > 734.975.0460 > > > > > > > Hi Rob, > > > > > > > > Try it in clear text without the MD5 digest, to verify that your > > > > password, username, role, etc are correct. > > > > > > > > I had a lot of problems with digesting. > > > > > > > > Also some databases return column names in upper case even if they > > > > are in lower case so you may want to try all caps on your db column > > > > names. I think you would get a different eror message if this was > > > > the case, though. > > > > > > > > Rick > > > > > > > > ----- Original Message ----- > > > > > > > > > I'm trying to set up a JDBCRealm for use with the admin and manager > > > > webapps. > > > > > The problem is that I am unable to authenticate any users. > > > > > > > > > > - Tomcat 4.1.18 > > > > > - Postgresql 7.3.1 > > > > > - JDBC driver is in $CATALINA_HOME/common/lib > > > > > - Tomcat starts up fine, I just can't authenticate > > > > > - I can directly connect to my database with the username and password > > > > > - I have created the 'admin' and 'manager' groups in the database > > > > > - I have added the users to both groups > > > > > > > > > > Realm: > > > > > <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" > > > > > driverName="org.postgresql.Driver" > > > > > connectionURL="jdbc:postgresql://bilbo.dynedge.com/template1" > > > > > connectionName="tomcat" connectionPassword="tomcat" > > > > > userTable="pg_shadow" userNameCol="usename" > > userCredCol="passwd" > > > > > userRoleTable="pg_groupview" roleNameCol="groname" > > > > > digest="MD5" /> > > > > > > > > > > Log: > > > > > 2003-01-02 12:34:34 JDBCRealm[Standalone]: Username tomcat NOT > > > > successfully > > > > > authenticated > > > > > > > > > > Any ideas? > > > > > > > > > > -- > > > > > Robert Abernethy IV > > > > > Dynamic Edge, Inc. > > > > > 734.975.0460 -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>