1

Glassfish 3.1 で Netbeans を使用するプロジェクトに取り組んでおり、LDAP 承認を実装しようとしています。そのために、mod_jk を使用して LDAP 対応の Apache2 サーバーも用意しています。要点は、ユーザーが /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.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 コントロール パネルにリスナーを登録しました。

ここに画像の説明を入力

つまり、 null が常に返される理由がわかりません。インターネットでの検索は役に立ちませんでした。ご提供いただいたご意見に感謝いたします。

注:httpServletRequest.getRemoteUser( )同じ null 結果を提供します。

4

2 に答える 2

1

私もこの問題を抱えていました。別の投稿で偶然答えを見つけました。server.xml次のように tomcatを更新する必要があります。

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

を指定するtomcatAuthentication必要があります。更新を行うと、Tomcatがバウンスされ、getRemoteUser()うまくいきました。

于 2014-02-06T20:00:20.627 に答える
0

RemoteUserヘッダーを取得できませんでしたが、ヘッダーの形式で回避策を見つけましたauthorization。次の形式の文字列をgetHeader( "authorization" )私に返しました。

Basic XXXX:YYYY

ここで、Xはユーザー名、YはApache/mod_jkを介してページにアクセスするユーザーのパスワードです。

The portion of the string following 'Basic ' (X:Y) was Base64 encoded, so after decoding it with MiGBase64 I was finally provided with an username that I could use.

于 2011-12-15T21:29:47.490 に答える