Archive for 2013年12月10日

たかがレルムされどレルム GlassFish で始める詳細 JDBC レルム

この記事は「 GlassFish Advent Calendar 2013」 の10日目として新たに書き下ろしたものです。昨日は蓮沼さんによる「GlassFish付属のJava DBについて」でした。

幸運にも、昨日 12/09 に蓮沼さんが GlassFish に付属している Java DB について詳しくご紹介してくださったので、今日はその流れ?!というわけではありませんが、GlassFish に付属の Java DB(他のDBにも利用できます) を使用して、Java EE 標準の認証・認可方法をご紹介します。

Realm (レルム) は古くから Java 標準の認証・認可を行なうための機能として多くの環境で利用されてきましたが、やや環境構築や設定が大変という事もあって、レルムを使用せず独自の認証システムを構築される事もいらっしゃるようです。しかし、Java EE コンテナが提供する認証・認可機能を正しく理解し設定やプログラミングを行なえば、より安全で柔軟なプログラムを簡単に実現できるようになります。

また、この認証・認可の機能は Java EE に含まれるフレーム・ワーク全体に対して適用が可能なため、今回の資料では動作確認に JavaServer Faces を利用してを行ないますが、JSFに限らず、JAX-RS でも EJB でも、その他のフレームワークでも全ての Java EE フレームワークに適用できますのでとても重要です。

非常に古くからある機能のため、既にご存知の方やご適用頂いている方も多いかと思いますが、「たかがレルムされどレルム」で Java EE の中でも重要な概念の一つと考えています。最近、Java EE を始めた方や、これから Java EE を始める方に、本ブログ・エントリが有用な情報になれば誠に幸いです。Web アプリケーションに対してどこからどのように認証・認可などの設定を進めればよいか分からない方はどうぞご覧ください。

本ブログエントリは、環境構築手順をできるだけ詳細にご紹介し、これさえ見れば JDBC レルムの環境構築がある程度できるという資料になるようにエントリを書いてみました。当初はブログのエントリ中に JDBC レルムに関する説明を書こうと考えましたが、非常に長い内容になりましたので、途中でブログで記載するのはあきらめ PDF で資料を作りなおしました。PDF であればダウンロードしプリント・アウトした後にゆっくりご確認頂けるので、よりよいかと想定しています。是非、本資料を有効活用をして頂ければ幸いです。

限られた時間の中で急ピッチで作成しましたので、手順を端折って実装した所もあります(例えばユーザ登録、削除の確認画面など)。しかし、全体的な設定手順や実装方法の概要は掴めるかと思いますので、ご参考ください。

本資料でご紹介したコードは下記にアップしております。コードだけを参照されたい場合は、下記へアクセスしてください。
https://github.com/yoshioterada/JDBC-Realm-Sample

※ 下記に公開する PDF 資料中のプロジェクト名、パッケージ名は適切ではありません。プロジェクト名、パッケージ名等は適宜ご修正ください。元々、次のブログ・エントリで記載する内容とマージして一つの資料としてまとめたかったのですが、時間の関係上とボリュームの関係で、本 PDF には JDBC レルムの部分までしか記載できませんでした。
そこで、JDBC Realm のハンズオン・ラボの資料としてはプロジェクト名、パッケージ名などが適切ではない名前が記載されています。上記 GitHub ではプロジェクト名、パッケージ名をリファクタリングした後のコードをアップしておりますので、併せてご参照ください。

最後に、認証や認可用の設定やコードを行なうと、jUnit 等のテスト連携が困難になると予想される方もいらっしゃるかもしれません。
EJB を実装されている場合には jUnit 等の単体テストで、組み込み可能 EJB コンテナを利用できます。
この組み込み可能な EJB コンテナで認証・認可まで含めたテストケースを実施したい場合、GlassFish では下記のクラスを利用する事で、EJB プログラムに対するログイン認証・認可の権限チェックを行なうことができるようになります。

GlassFish v3.x の場合:
$GLASSFISH_HOME\glassfish\modules
com.sun.appserv.security.ProgrammaticLogin

GlassFish v4.0 の場合 (パッケージ名が代わりました。)
$GLASSFISH_HOME\glassfish\modules\security-ee.jar
com.sun.enterprise.security.ee.auth.login.ProgrammaticLogin

例えば、jUnit のコード中で下記のようなコードを書く事ができます。

char[] passwd = “password”.toCharArray();
ProgrammaticLogin progLogin = new ProgrammaticLogin();
progLogin.login(“admin”, passwd , “jdbc-realm”, true);

最後に、今回は DBを使用しましたが、LDAPでも、SSO を実現するような製品群でもレルムは利用可能です。また少ない設定変更でレルムの切り替えももできますので、是非レルムをご理解いただきご利用ください。

2013年12月10日 at 2:20 AM 17件のコメント


Java Champion & Evangelist

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2013年12月
« 11月   1月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

カテゴリー

Twitter

  • RT @backpaper0: てらださんには「テラダヨシオガンバル」って書かれたTシャツ着てほしい 4 hours ago
  • RT @sandayuu: 明日 DevOpsDays Tokyoなのですが、MR. Be Lazyの@DrewRobbins がマイクロソフトブースき来てくれることになりました!こら、質問するチャンスですよ! #DevOpsJP 9 hours ago
  • RT @navitime_tech: JJUG CCC 2017 Spring に日本マイクロソフト寺田様(@yoshioterada)と共同で登壇します。LUISを採用した理由、これからのAIやbot活用の可能性について話す予定です。https://t.co/wjRUbaNw… 3 days ago
  • RT @JJUG: JJUG CCC 2017 Spring(5/20)まで1ヶ月!コンテンツが出そろってきました。タイムテーブルをチェックして、行きたいコンテンツを確認してください。皆様のご参加をお待ちしております! buff.ly/2pGUNlu #jjug3 days ago
  • RT @vrize_inc: マイクロソフトのテクニカルエバンジェリストの方にhackfestを開催していただき、技術的な課題を一緒に解決しました。本社ブログに取り上げていただいてます!! blogs.technet.microsoft.com/livedevopsinja… 3 days ago

clustermap

ブログ統計情報

  • 944,169 hits

Feeds