Right, but I think you are missing what I am saying. The hasRole() method takes two parameters: a Principal (which is going to be the custom user principal returned from the request.getUserPrincipal() method), and a String role name. Roles aren't being passed to the hasRole method, only the user principal and the role that it is looking for.

In the JAAS login module, when you authenticate you add your user principal and role principals separately to the subject. The user principal does not contain roles. Its the realm that combines those after pulling them from the subject after the fact. So in the JAAS login module, what you would have to do is instantiate a user principal that is a subclass of GenericPrinicipal for your user principal, then add your role principals to that user principal, and then add the user principal and all the role principals to the subject. And then, of course, the same thing would happen all over again in the realm code after exiting.

Yes that could be done. What an ugly hack though. Depending on what the dev list comes back with, I may give it a try. It explains, however, the behavior I had in Tomcat 5.0.28. In 5.0.28, I couldn't get my user principal out of the request -- instead, the request.getUserPrincipal() method returned a GenericPrincipal. However, role authorization worked. So It really looks probably that someone added code to the getUserPrincipal() method to return the custom user principal, and broke role authorization.

Alas....a regression test that escaped... :-)

B

On Oct 20, 2005, at 9:09 PM, Caldarale, Charles R wrote:

From: Brad O'Hearne [mailto:[EMAIL PROTECTED]
Subject: Re: Bug in RealmBase, JAASRealm, and/or Requestt
object preventing proper role authorization

If you wanted to try to game the authorization, you'd have to
take your role principal, shove it into the user principal,
then let the realm shove both of those again into another
GenericPrincpal that wrapped it.


No, that's wrappering.  What I suggested was declaring your custom
principal as a subclass of GenericPrincipal so the JAASRealm code could
use it directly.


I thought about that too, but I don't know enough about the
other source code to know if it is safe and would affect
things elsewhere in code.


The rules of subclassing make this perfectly safe. The rest of the code
may be using your object, but the other code can only refer to it via
the methods declared in the superclass GenericPrincipal; whatever
customization you've made is invisible to the rest of Tomcat. You would also have the freedom of overriding the GenericPrincipal methods to suit
your needs.

 - Chuck


THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY
MATERIAL and is thus for use only by the intended recipient. If you
received this in error, please contact the sender and delete the e- mail
and its attachments from all computers.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to