https://bz.apache.org/bugzilla/show_bug.cgi?id=62496

            Bug ID: 62496
           Summary: Add possibility write remote user/auth type to
                    response header
           Product: Tomcat 8
           Version: 8.5.x-trunk
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: 1983-01...@gmx.net
  Target Milestone: ----

I have a fairly simple usecase for an enhancement request from which a lot of
users can benefit.

Use case:

* Apache HTTPd (2.4.33) <====> Tomcat (8.5.30) via mod_proxy
* Apache logs with CustomLog ... common
* VirtualHost does not only proxy Tomcat, also hosts other unrelated apps
(.e.g, Subversion), so changing the log format is not an option
* Tomcat performs authentication
* Apache logs the requests, but remote_user column is empty. This is ugly and I
do not really want duplicate logging, i.e., on both sides or if both need to be
consistent.

Thanks to rjung@ and jim@ I worked out a solution which does a nice job.

httpd-tomcat.conf:
> <Location "/app">
>     ProxyPreserveHost On
>     ProxyPass ..
>     ProxyPassReverse ..
>     RequestHeader set X-Forwarded-Proto "https"
>     Header note X-Remote-User REMOTE_USER
>     LuaHookLog /usr/local/etc/apache24/register_remote_user.lua 
> register_remote_user
> </Location>

register_remote_user.lua:
> require 'apache2'
> 
> function register_remote_user(r)
>     local remote_user = r.notes["REMOTE_USER"]
>     if remote_user ~= nil then
>         r.user = remote_user
>         -- not implemented in mod_lua
>         -- r.ap_auth_type = "SPNEGO"
>     end
>     return apache2.OK
> end

On the Tomcat side I have added:
> public class ResponseRemoteUserValve extends ValveBase {
> 
>       @Override
>       public void invoke(Request request, Response response) throws 
> IOException, ServletException {
>               String remoteUser = request.getRemoteUser();
> 
>               if (remoteUser != null) {
>                       response.setHeader("X-Remote-User", remoteUser);
>               }
> 
>               getNext().invoke(request, response);
>       }
> 
> }

Ideally for request#getAuthType() to X-Remote-AuthType too. I think this is
suitable for either AuthenticatorBase or RemoteIPValve.

Comments and ideas welcome!

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to