VMが脆弱性のあるバージョンかチェックするには?JavaTips 〜Javaプログラミング編

» 2007年03月27日 10時00分 公開
[平野正喜@IT]

 SystemクラスgetPropertyメソッドは、指定されたキーによって示されるシステムプロパティを取得してくれます。具体的に得られる情報と、その一例は以下のとおりです。

getPropertyメソッドで得られるシステムプロパティ一覧
キー 対応する値の説明 値の例
java.version JREのバージョン 1.4.2_13
java.vendor JREのベンダ Sun Microsystems Inc.
java.vendor.url JavaベンダのURL null
java.home Javaのインストール先ディレクトリ C:\j2sdk1.4.2_13\jre
java.vm.specification.version JVMの仕様バージョン 1
java.vm.specification.vendor JVMの仕様ベンダ Sun Microsystems Inc.
java.vm.specification.name JVMの仕様名 Java Virtual Machine Specification
java.vm.version JVMの実装バージョン 1.4.2_13-b06
java.vm.vendor JVMの実装ベンダ Sun Microsystems Inc.
java.vm.name JVMの実装名 Java HotSpot(TM) Client VM
java.specification.version JREの仕様バージョン 1.4
java.specification.vendor JREの仕様のベンダ Sun Microsystems Inc.
java.specification.name JREの仕様名 Java Platform API Specification
java.class.version Javaクラスの形式のバージョン番号 48
java.class.path Javaクラスパス C:\MyJava
java.library.path ライブラリのロード時に検索するパスのリスト C:\j2sdk1.4.2_13\bin;.;
(省略)
java.io.tmpdir デフォルト一時ファイルのパス C:\DOCUME~1\RunDog\LOCALS~1\Temp\
java.compiler 使用するJITコンパイラの名前 null
java.ext.dirs 拡張ディレクトリのパス C:\j2sdk1.4.2_13\jre\lib\ext
os.name OS名 Windows XP
os.arch OSのアーキテクチャ x86
os.version OSのバージョン 5.1
file.separator ファイル区切り文字 \(UNIXでは"/")
path.separator パス区切り文字 ;(UNIXでは":")
line.separator 行区切り文字 \r(UNIXでは"\n")
user.name ユーザーのアカウント名 RunDog
user.home ユーザーのホームディレクトリ C:\Documents and Settings\RunDog
user.dir ユーザーの現在の作業ディレクトリ C:\MyJava

 使用中のJavaに関する情報に加えて、OSに関する情報やユーザー名なども取得できます。

実行環境をチェックするアプリケーション

 では、一例として、getPropertyメソッドを使って、主処理の前に実行環境を確認するアプリケーションを考えてみます。今回の確認事項は以下の2点とします。

  • このプログラムはWindowsでしかテストしていないので、得られたos.name(オペレーティングシステム名)がWindows以外であれば、確認ダイアログで「Windows以外での動作確認はしていませんがOKですか?」と表示し、「いいえ」が選ばれたら終了する
  • 2007年1月にサンが発表した脆弱性情報を用いて、得られたjava.version(JREのバージョン)をチェックし、脆弱性のあるバージョンであれば、警告ダイアログで「ご使用中のバージョンのJavaには脆弱性が指摘されています」と表示する

 以上を盛り込んだプログラムは下記のようになります。

図1 OSとJREのバージョンをチェックするプログラム 図1 OSとJREのバージョンをチェックするプログラム

Mac OSでシステムプロパティを取得する場合の注意点

 なお、Mac OSにおいては、Javaが提供しているシステムプロパティとは別に、Apple社が独自に提供しているシステムプロパティ「mrj.version」があります。

 しかし、Apple社自身がWebページで説明していますとおり、このシステムプロパティの使用は推奨されていません(Technical Note TN2110 参照)。代わりに「os.name」および「java.runtime.version」を使用することをお勧めします。

Profile

RunDog.org

平野正喜


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。