- - PR -
ServletからのCGI環境変数の取得
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2003-01-27 14:32
HTTPの認証に関する情報でしたら、
javax.servlet.http.HttpServletRequest#getRemoteUser() や javax.servlet.http.HttpServletRequest#getUserPrincipal() より取得できますよ。 Apache→Tomcatで、CGI環境変数の情報がどこまでTomcat側へ転送されるかどうかは Apache/Tomcatの連動をサポートするコネクタモジュール次第ですが、 HTTPヘッダ情報やSSL認証情報でしたら、基本的にサポートされています。 | ||||
|
投稿日時: 2003-01-27 15:09
HttpServletRequestクラスの、 java.util.Enumeration getHeaderNames() java.util.Enumeration getHeaders(java.lang.String name) java.lang.String getHeader(java.lang.String name) を使ってヘッダを列挙してあげれば、確認できないでしょうか。 試さずに言ってるので外してたらごめんなさい。 | ||||
|
投稿日時: 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) | ||||
|
投稿日時: 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 | ||||
|
投稿日時: 2003-01-27 19:23
SuperCreekさん、度々の返信ありがとうございます。
教えていただいたバグデータベースを読み進んでいくと、最後の最後に
との記述がありましたのでそれを試してみたところ、無事にgetRemoteUser()で ApacheのBasic認証情報が取得できるようになりました。 ありがとうございました。 $CATALINA_HOME/conf/jk2.propertiesに追加した記述 request.tomcatAuthentication=false [ メッセージ編集済み 編集者: ayum 編集日時 2003-01-27 19:23 ] | ||||
|
投稿日時: 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