REMOTE_USER не устанавливается Apache2? - PullRequest
1 голос
/ 13 декабря 2011

Я работаю над проектом, использующим Netbeans с Glassfish 3.1, и пытаюсь реализовать авторизацию LDAP.Для этого у меня также есть сервер Apache2 с поддержкой LDAP, использующий mod_jk.Суть в том, что когда пользователь заходит на любую страницу сайта в каталоге / sng /, сервер Apache должен запросить учетные данные и перенаправить пользователя на сервер Glassfish, на котором выполняется эта часть сайта.

Apache правильно ставит в очередь и принимает учетные данные LDAP, а затем перенаправляет пользователя в соответствующую область.Но похоже, что переменная REMOTE_USER либо не устанавливается Apache, либо не отправляется mod_jk.Ниже приведены соответствующие файлы конфигурации и фрагменты кода:

httpd.conf

<Location />
    AuthBasicProvider ldap
    AuthLDAPURL ldap://mainframe/ou=People,dc=dtch,dc=com?uid?sub
    AuthzLDAPAuthoritative off
    AuthType Basic
    AuthName "LDAP"
    require valid-user

    Options Indexes FollowSymLinks MultiViews +Includes
</Location>

conf.d / jk

JKWorersFile  /path/to/workers.properties
JkShmFile     /path/to/mod_jk.shm
JkLogFile     /path/to/mod_jk.log
JkLogLevel    info
JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories

worker.properties

worker.list=worker1

worker.worker1.port=8009
worker.worker1.host=127.0.0.1
worker.worker1.type=ajp13

сайтов с поддержкой / 000 по умолчанию

...

JkMount /*.jsp worker1
JkMount /sng/* worker1

web.xml

<filter>
    <filter-name>RemoteUser</filter-name>
    <filter-class>path.to.RemoteUser</filter-class>
</filter>
<filter-mapping>
    <filter-name>RemoteUser</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

RemoteUser.java

//...

public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain )
    throws IOException, ServletException
{
    if( request instanceof HttpServletRequest )
    {
        HttpServletRequest httpServletRequest = ( HttpServletRequest )request;
        String username = httpServletRequest.getHeader( "REMOTE_USER" );

        if( username == null )
        {
            // enter here every time
        }

        // ...
    }

    //...
}

Наконец я зарегистрировал слушателя на панели управления Glassfish:

enter image description here

Короче, я понятия не имею, почему null возвращается постоянно, и мои поиски в интернете не помогли.Заранее благодарим за любой ввод, который вы можете предоставить.

Примечание: httpServletRequest.getRemoteUser( ) дает тот же нулевой результат.

Ответы [ 2 ]

1 голос
/ 07 февраля 2014

У меня тоже была эта проблема.Я нашел ответ случайно на другой пост.Вам необходимо обновить server.xml в tomcat следующим образом:

<Connector protocol="AJP/1.3" port="..." ...
tomcatAuthentication="false" />

Необходимо указать tomcatAuthentication.Как только я сделал обновление, отскочил tomcat, getRemoteUser() работал для меня.

0 голосов
/ 16 декабря 2011

Мне так и не удалось получить заголовок RemoteUser, но я нашел обходной путь в виде заголовка authorization. Используя getHeader( "authorization" ) вернул мне строку в виде:

Basic XXXX:YYYY

Где X - имя пользователя, а Y - пароль пользователя, обращающегося к странице через Apache / mod_jk.

Часть строки, следующей за 'Basic' (X: Y), была закодирована в Base64, поэтому после ее декодирования с помощью MiGBase64 мне наконец-то было предоставлено имя пользователя, которое я мог использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...