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 結果を提供します。