Thank you André for your contribution which was very helpful.

If you are using the first one (HTTP), then one way would be to force Apache
> to add a HTTP header to the request, containing the user-id; and on the
> Tomcat side, have something that picks up this HTTP header, and stuffs its
> content in the UserPrincipal object.
> I don't know if something like that exists ready-made, but a custom Valve
> or servlet filter should be able to do that.


This is effectively the solution i had chosen, i should have mentionned it.
Actually i was looking for the implementation on the tomcat side that's why
i was looking how the ajp connector was using the user-id data to set the
remote user. You gave me the solution by mentionning the UserPrincipal
object as i was on the wrong place looking for a setRemoteUser() method.

Here is the code of the valve which give me the expected result :

public class RemoteUserValve extends ValveBase {
>         public void invoke(Request request, Response response) throws
> IOException, ServletException {
>                 String remoteUser = request.getHeader("X-Forwarded-User");
>                 Principal userPrincipal = request.getPrincipal();
>                 if (userPrincipal != null) {
>                         System.out.println("Principal getName : " +
> userPrincipal.getName() + ".");
>                         System.out.println("Principal toString : " +
> userPrincipal.toString() + ".");
>                 } else {
>                         System.out.println("userPrincipal is null.");
>                         request.setUserPrincipal(new
> CoyotePrincipal(remoteUser));
>                 }
>                 getNext().invoke(request, response);
>         }
> }


Please, feel free to comment this code if something looks improvable.

Thx again for your help.

Sylvain

On Fri, Sep 16, 2011 at 11:33 AM, André Warnier <a...@ice-sa.com> wrote:

> Sylvain Goulmy wrote:
>
>> Hi everyone,
>>
>> I'm actually using Tomcat on my environment platform (Tomcat 5.5 / Tomcat
>> 6
>> and soon Tomcat 7). I have a frontend Apache http Server using the jk
>> connector to communicate with Tomcat instance.
>>
>> I'd like to change this connector and use the mod_proxy one for several
>> reasons. The main difficulty to handle is relative to the remote-user
>> information. Indeed the jk connector automatically transmits the
>> information
>> so that the application can retrieve it using a request.getRemoteUser()
>> method call.
>>
>> If i'm not using the ajp connector anymore, i need to handle something on
>> the tomcat side to set the remote user in the request object. I thought i
>> could use a valve to do this. And that's where the road ends, i have
>> watched
>> the ajp conenctor code in order to see how the remote user is set in the
>> request but i can't find it.
>>
>>
> You are not finding it, because you are looking in the wrong place.
> If mod_jk can pass the authenticated user to Tomcat, via the AJP channel,
> it is because the user (or request) has been authenticated on the Apache
> side, before the request is forwarded through mod_jk to Tomcat.
> The AJP connector on the Tomcat side then picks up this user-id from the
> request coming in on the AJP channel, and sets the UserPrincipal in Tomcat
> accordingly.
> That's why a subsequent getRemoteUser() can pick it up in Tomcat.
>
> If you want to switch to mod_proxy instead of mod_jk, the question is : can
> mod_proxy forward the Apache user-id to Tomcat ?
> The question is slightly more complicated, because there are two methods of
> connecting Apache to Tomcat using mod_proxy :
> a) mod_proxy_http (protocol = HTTP, over Tomcat HTTP Connector)
> b) mod_proxy_ajp (protocol = AJP, over Tomcat's AJP Connector (the same as
> the one used with mod_jk)
>
> If you are using the second one (AJP), then we know that the AJP protocol
> /can/ carry the Apache user-id to Tomcat (because that is what mod_jk does).
>  The question is whether mod_proxy_ajp has some setting to tell it to do
> that (or does it by default).
>
> If you are using the first one (HTTP), then one way would be to force
> Apache to add a HTTP header to the request, containing the user-id; and on
> the Tomcat side, have something that picks up this HTTP header, and stuffs
> its content in the UserPrincipal object.
> I don't know if something like that exists ready-made, but a custom Valve
> or servlet filter should be able to do that.
>
>
>
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: 
> users-unsubscribe@tomcat.**apache.org<users-unsubscr...@tomcat.apache.org>
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to