- PR -

ServletからのCGI環境変数の取得

1
投稿者投稿内容
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2003-01-27 11:03
いつもお世話になっています。

現在JavaServletとPerlで作られたCGIとで
連携して動くアプリケーションを作っているのですが、
Java側でCGI環境変数を取得する方法がわかりません。
具体的には、apacheでBasic認証を行った際に
CGI環境変数にセットされるユーザー情報を取得したいのですが、
Sevlet周りのAPIドキュメント等を読んでみてもその方法が見つかりません。
Java側からCGI環境変数、あるいはapacheのBasic認証で行われた
認証情報を取得する方法はあるのでしょうか?

OS:Solaris8
Java:JDK1.4.1_01
Web:apache1.3.12、Tomcat4.1.18(JDK1.4)
Perl:Perl5

おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2003-01-27 14:32
HTTPの認証に関する情報でしたら、
javax.servlet.http.HttpServletRequest#getRemoteUser()

javax.servlet.http.HttpServletRequest#getUserPrincipal()
より取得できますよ。

Apache→Tomcatで、CGI環境変数の情報がどこまでTomcat側へ転送されるかどうかは
Apache/Tomcatの連動をサポートするコネクタモジュール次第ですが、
HTTPヘッダ情報やSSL認証情報でしたら、基本的にサポートされています。
mikan
ベテラン
会議室デビュー日: 2002/08/19
投稿数: 58
投稿日時: 2003-01-27 15:09
引用:

Apache→Tomcatで、CGI環境変数の情報がどこまでTomcat側へ転送されるかどうかは
Apache/Tomcatの連動をサポートするコネクタモジュール次第ですが、


HttpServletRequestクラスの、
java.util.Enumeration getHeaderNames()
java.util.Enumeration getHeaders(java.lang.String name)
java.lang.String getHeader(java.lang.String name)
を使ってヘッダを列挙してあげれば、確認できないでしょうか。

試さずに言ってるので外してたらごめんなさい。
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2003-01-27 16:03
SuperCreekさん、みかんさん、返答ありがとうございます。

お二人のご意見を参考にしてちょっと試してみたのですが、
Apacheのベーシック認証終了後にgetRemoteUser()ではnullしか取れず、
getHeaderNames()で取得できる情報を見てみても
認証情報らしきものは見当たりませんでした。

ApacheとTomcatを使うのにmod_jkを使用しているのですが、
これだとBasic認証の情報はTomcatまで回らないんでしょうか?

以下はgetHeaderNames()を元に出力したヘッダー情報です。
(申し訳ありませんがhostとrefererだけ削らせていただきました)

accept = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms
-excel, application/vnd.ms-powerpoint, application/msword, */*
accept-encoding = gzip, deflate
accept-language = ja
authorization = Basic YXl1bTpheXVt
cache-control = no-cache
connection = Keep-Alive
content-length = 24
content-type = application/x-www-form-urlencoded
cookie = JSESSIONID=F69E3E5147535DF56B83CA01152F188A
user-agent = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2003-01-27 16:54
> Apacheのベーシック認証終了後にgetRemoteUser()ではnullしか取れず、
> getHeaderNames()で取得できる情報を見てみても
> 認証情報らしきものは見当たりませんでした。
>
> ApacheとTomcatを使うのにmod_jkを使用しているのですが、
> これだとBasic認証の情報はTomcatまで回らないんでしょうか?
>
「mod_jk」ではHTTPの認証情報を基本的にサポートする仕様となっていますので、
Apache/Tomcatの連動コネクタ実装のバグである可能性が高いです。
最新版の「mod_jk」コネクタ実装を使っていますか?
もしかしたら、「mod_jk2」に変更しないといけなくなるかもしれません。

多分、Apache Bugzillaに報告された下記のバグが、本件に関係しているかと思います。
[ Bugzilla 12196 ]
http://issues.apache.org/bugzilla/show_bug.cgi?id=12196
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2003-01-27 19:23
SuperCreekさん、度々の返信ありがとうございます。

教えていただいたバグデータベースを読み進んでいくと、最後の最後に

引用:

$CATALINA_HOME/conf/jk2.propertiesに以下の記述を足せば
mod_jkでもjk_2でもきちんと動く


との記述がありましたのでそれを試してみたところ、無事にgetRemoteUser()で
ApacheのBasic認証情報が取得できるようになりました。
ありがとうございました。

$CATALINA_HOME/conf/jk2.propertiesに追加した記述
request.tomcatAuthentication=false


[ メッセージ編集済み 編集者: ayum 編集日時 2003-01-27 19:23 ]
yabetti
会議室デビュー日: 2004/01/08
投稿数: 19
投稿日時: 2004-01-08 23:04
はじめまして。
表題の件ですが、私の環境

RedHat Linux 9.0
Tomcat 4.1.29
Apache 2.0.48
mod_jk2 2.0.3

で同様にjk2.propertiesに
request.tomcatAuthentication=false

を設定しgetRemoteUser()等で取得しようと思いましたが、
やはりNULLしかかえって来ません。
最新のバージョンでは何かバグ等があるのでしょうか?

どなたか教えてください。
よろしくお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)