Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Basic認証・Digestアクセス認証の実装

Javaによる簡易HTTPサーバーの作成 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2005/12/06 12:00

『Javaによる簡易HTTPサーバーの作成』第2回目の今回は、RFC2617で規定されているHTTPのBasic認証およびDigestアクセス認証を、前回作成したHTTPサーバーに実装します。

目次

はじめに

 『Javaによる簡易HTTPサーバーの作成』第2回目の今回は、RFC2617で規定されているHTTPのBasic認証およびDigestアクセス認証を、前回作成したHTTPサーバーに実装します。

 本記事では

  • HTTPの認証の仕組み
  • NullObjectパターンの利用
  • Javaでメッセージダイジェストを利用する方法
  • デファクトスタンダードと仕様の齟齬(そご)の実例

 といったトピックを取り上げます。

対象読者

 本記事は、Javaプログラミングの初級者から中級者を対象に、J2SEのメッセージダイジェストの利用方法や、NullObjectデザインパターンの利用などについて解説します。

 また、HTTPの認証機構や、RFCと現実の実装の差などの、コンピューティングの周辺知識についても簡単に説明します。

必要な環境

 本記事のソースをビルド/実行するには、J2SE 1.4以上を利用してください。ソースファイルアーカイブは、直接NetBeans 4.1のプロジェクトとして開けるように構成してありますが、NetBeans 4.1を利用しなくてもコマンドラインからJDKおよびAntを利用してビルドすることもできます。

 なお、ソースファイルアーカイブに格納してあるコンパイル済みクラスファイルは、J2SE 1.5.0でビルドしてあります。J2SE 1.4の環境で実行する場合は、再ビルドしてください。

 参考までに筆者が利用した本記事のテスト環境は以下のものです。

OSJ2SEAntJUnitIDEブラウザ
OS X 10.4.21.5.0_051.6.23.8.1NetBeans4.1JSafari
Windows XP1.5.0_051.6.23.8.1NetBeans4.1JFirefox 1.0.7/IE6SP2

NetBeans 4.1からの利用

 メニューから[ファイル]→[プロジェクトを開く]を順に選択し、ソースファイルアーカイブを展開したディレクトリの「httpserver」ディレクトリを選択して、[プロジェクトフォルダを開く]をクリックしてください。

 プロジェクトが読み込まれたら、プロジェクトのコンテキストメニュー(ショートカットメニュー)から[プロパティ]をクリックし、[プロジェクトプロパティ]の[プロジェクトの実行]タブを選択して、[作業用ディレクトリ]に展開したディレクトリの「httpserver\html」を設定してください。

 以降、プロジェクトのコンテキストメニューから実行、デバッグ、テスト実行が可能となります。

ファイル構成

 ダウンロードしたファイルはzipで圧縮してあります。展開すると「httpserver」というディレクトリを頂点としたディレクトリ階層ができます。すぐに実行できるようにコンパイル済みのクラスファイルも添付してあります(ただし、J2SE 5.0を利用しています)。また、ソースファイルは、すべてシフトJISでエンコードしています。

「httpserver」ディレクトリ

build.xml

 antのビルドスクリプトです。NetBeans 4.1が生成したファイルですが、コマンドラインからantを利用して操作することも可能です。

 主なターゲットに以下のものがあります。

  • clean:ビルドしたクラスファイルを削除。
  • compile:「src」ディレクトリ下のソースファイルをコンパイル。
  • test:「src」および「test」ディレクトリ下のソースファイルをコンパイルして、ユニットテストを実行。なお、testターゲットを実行する場合にはlibs.junit.classpathプロパティで「junit.jar」を指定する必要があります。
  • 実行例
    C:\test\httpserver>ant test -Dlibs.junit.classpath=
    %JUNIT_HOME%\junit.jar
    Buildfile: build.xml
    
    -pre-init:
    ...
    -do-test-run:
        [junit] done
        [junit] Testsuite: com.example.http.HttpServerTest
        [junit] Tests run: 4, Failures: 0, Errors: 0, Time
     elapsed: 0.482 sec
    
        [junit] ------------- Standard Output ---------------
        [junit] done
        [junit] ------------- ---------------- ---------------
    ...
    
  • run:「src」ディレクトリ下のソースファイルをコンパイルし実行。application.argsプロパティで引数を指定することができます。

「httpserver\html」ディレクトリ

 テスト用のHTMLを格納してあります。「build.xml」のrunを実行する場合、work.dirプロパティでこのディレクトリをポイントしてください。

「httpserver\nbproject」ディレクトリ

 NetBeans 4.1のプロジェクト設定ファイルが格納されています。

「httpserver\src\com\example\http」ディレクトリ

  • HttpServer.java
  • 本記事で取り上げる簡易HTTPサーバーのソースファイルです。
  • Authority.java
  • HttpServerクラスが利用する認証機構のソースファイルです。
  • Base64Util.java
  • Base64でエンコードされたバイナリデータをデコードするユーティリティです。

「httpserver\test\com\example\http」ディレクトリ

  • HttpServerTest.java
  • 簡易HTTPサーバーのテストプログラムのソースファイルです。

実行方法

 NetBeans 4.1のプロジェクトのコンテキストメニューから[プロジェクトを実行]をクリックするか、またはコマンドラインから以下のように実行します。

実行例
C:\test\httpserver>ant run -Dapplication.args=-d -Dwork.dir=html
Buildfile: build.xml
...
compile:

run:

 実行するとデフォルトではポート8800番でサービスを開始します。この時、Digestアクセス認証が有効となっています。そのため、Webブラウザで「http://localhost:8800/index.html」を開こうとすると認証ダイアログが表示されます(図)。

認証ダイアログ
認証ダイアログ

 この実装では、ユーザ名とパスワードは固定で

  • ユーザ名: web
  • パスワード: 2.0

 としています。この値をダイアログへ入力すると「index.html」の表示が確認できると思います(筆者が試していないブラウザについては表示できない可能性があります)。

 なお、実行時に-dを指定(ant利用時は-Dapplication.args=-dと指定)すると、デバッグモードで実行され、標準出力にクライアントからのリクエスト情報などを出力します。

 終了するには、Webブラウザで「http://localhost:8800/quit」を開くか、または「index.html」の[終了]をクリックしてください。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • arton(アートン)

    専門は業界特化型のミドルウェアやフレームワークとそれを利用するアプリケーションの開発。需要に応じてメインフレームクラスから携帯端末までダウンサイジングしたりアップサイジングしたりしながらオブジェクトを連携させていくという変化に富んだ開発者人生を歩んでいる。著書に『Ruby③ オブジェクト指向とはじめ...

バックナンバー

連載:Javaによる簡易HTTPサーバーの作成
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5