为mod_proxy_ajp重写经过身份验证的Apache2.2用户

时间:2011-03-14 11:24:10

标签: apache mod-rewrite mod-proxy ajp

我有一个Tomcat通过mod_proxy_ajp连接到Apache2.2实例。 Apache通过mod_auth_kerb进行身份验证,Tomcat使用request.getRemoteUser()来获取经过身份验证的用户。

这基本上有效,但我想重写用户。但是,我设置的标头都没有影响request.getRemoteUser()返回的内容,我只将其视为附加标题,我该怎么做?

   # Rewrite Magic: change REMOTE_USER to something Alfresco expects
    RewriteEngine On

    RewriteMap domain_map txt:/etc/apache2/rewrite-map.txt

    # Grab the REMOTE_USER apache environment variable for HTTP forwarding (requires sub-request!)
    RewriteCond %{LA-U:REMOTE_USER} (.*)@(.*)

    # change the format and replace the domain, e.g.: 
    # user@some.domain  ==>  other.domain_user
    RewriteRule . - [E=RU:${domain_map:%2|%2}_%1]

    # copy processed user to HTTP headers
    RequestHeader set REMOTE_USER %{RU}e
    RequestHeader set HTTP_REMOTE_USER %{RU}e
    RequestHeader set AJP_REMOTE_USER %{RU}e
    RequestHeader set AJP_HTTP_REMOTE_USER %{RU}e

谢谢!

2 个答案:

答案 0 :(得分:0)

我怀疑未设置标头,因为您希望设置它们,并且它们会将Tomcat设置为空。

我遇到了一些令人费解的处理订单问题,导致RequestHeader忽略RewriteRule设置的环境变量。如果有帮助,请查看https://stackoverflow.com/a/9303018/239408

答案 1 :(得分:0)

似乎getLmoteUser()值不能被Apache头指令覆盖,因为AJP协议处理程序从某个内部Apache结构获取用户名。我通过http头发送用户名并修改Java代码来使用它而不是使用getRemoteUser()来解决这个问题。