(see below for message context)

Ok, I've decided on using Http Basic authentication for my web service, and successfully configured tomcat to authenticate against the tomcat-users.xml file to the point where I can access a valid principal. But now I've got another problem.. :-)

I tried accessing the userDatabase which represents the memoryrealm, and got the below exception. I don't understand this as according to the API doc MemoryUserDatabase is an implementation of UserDatabase, and this is confirmed by looking at the source code for MemoryUserDatabase, which *does* implement that interface!

I'm stumped, does anyone know why this might be happening? Or am I doing something the wrong way...


//code to get tomcat UserDatabase, copied from ManagerServlet.roles(PrintWriter) from tomcat manager application.
Context ic = new InitialContext();
UserDatabase userdb = (UserDatabase )ic.lookup("java:comp/env/users"); // <- this line causes ClassCastException

SEVERE: Fault occurred!
java.lang.ClassCastException: org.apache.catalina.users.MemoryUserDatabase cannot be cast to org.apache.catalina.UserDatabase at myapp.service.webservice.ImageServiceImpl.EnumerateLOV(ImageServiceImpl.java:88)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   // stack trace elided...
at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
   // stack trace elided...
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
   at java.lang.Thread.run(Thread.java:619)

//my context.xml
<Context path="/myapp">
   <!-- get access to the tomcat-users.xml database -->
<ResourceLink name="users" global="UserDatabase" type="org.apache.catalina.UserDatabase"/>
</Context>


Matthew Kerle wrote:
Hi all

I'm developing a web service with xFire 1.2.3 / tomcat 5.5.23 / Java 1.6.0_01, and we need to authenticate access by client applications coming in over SOAP. We're looking at using the tomcat-users.xml file to store user/pwd/role data until the customers Single Sign-On service is ready (which will be when pigs fly, if it keeps going as it has).

The application will be deployed internally so we don't need any SSL or digest authentication, we're looking at simple HTTP BASIC or SOAP headers for the client to pass through their auth details. The complication is that we want to allow default access as well as authenticated access, and authenticate against the tomcat-users file.

eg - un-authenticated clients can still access the web service url, but get a public role, and authenticated clients get a privileged role.

I'm thinking we might be able to do part of that with the following tomcat-users.xml config by having an empty user declaration:

<tomcat-users>c
 <role rolename="privileged"/>
 <user name=""  password="" roles="PUBLIC"  />
 <user name="priv_user1"  password="tomcat" roles="privileged"  />
</tomcat-users>

The question is how to authenticate against the tomcat-user database?
I've read the tomcat docs on memory realm: http://tomcat.apache.org/tomcat-5.5-doc/realm-howto.html#MemoryRealm, and I want to expose the org.apache.catalina.UserDatabase class to the web service context via a <ResourceLink...>. I'd like to be able to authenticate users without having to add a <security-constraint> to my web.xml, so that unauthenticated clients can still connect.

Am I on the right track? Or is there a much easier way than what I'm trying to do...

thanks!


--
Matthew Kerle
IT Consultant
Canberra, Australia

Mobile: +61404 096 863
Email : [EMAIL PROTECTED]
Web : http://threebrightlights.blogspot.com/


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to