SE成長痛日記

アラサーSEが技術力を高めるために日々感じる痛みを綴るBlogです。

ひとり疑似プロジェクトでスキルを高める(実装編 ログイン機能 -1-))

さてさて、思い立ってから約1ヶ月半。 本来の目的の実装周りにようやく到着してきました。。。。

ではまず、手始めにログイン周りの実装を行いたいと思います。

ここで検討すべきなのは、Java EEにおける認証機能。 とりあえず調べるとレルムというものを用いて行なうようです。

参考にしたの

WEBページ

たかがレルムされどレルム GlassFish で始める詳細 JDBC レルム | 寺田 佳央 - Yoshio Terada

Javaの道:Tomcat(13.JDBCレルムによるFORM認証)

GlassFishのJDBCレルムを利用する - Programming Studio

OTN Japan - はじめてのOracle9iデータベース:サンプルスキーマを作ってみよう

Java EE 7徹底入門: 標準Javaフレームワークによる高信頼性Webシステムの構築

概要

Java EE では、レルムというものに格納されたユーザID/パスワード グループ情報を参照して認証を行なうそうです。

さらに、WEBで公開された各種リソースに対して、 グループごとにアクセス権を設定してセキュリティを担保します。 これを認可といいます。

また、レルムは抽象的なものであり、ファイルに情報を格納することもあれば DBやLDAPを用いることも出来るようです。

今回はDBに情報を待たせたいと思います。

Java EE 環境準備

今回は、GlassFish + NetBeans8.1 + Mavenで開発環境を整えます。

まずは、NetBeansを立ち上げて、 「新規プロジェクト」→「Maven」→「Webアプリケーション」と選択。 サーバはflassFish4.1、Java EEは7を選択。

なんか色々ダウンロードしてきて、こんな感じにプロジェクトが作られました。 (実はあまりMavenしらない人)

f:id:hirohisoEx:20160827215819p:plain

色々な記事で、以下の部分を次のように書き換えてたけどいるのかなぁ。 今回webだけしか使わないからいらないかも、とりあえずこのまま。

javaee-web-api」→ 「javaee-api

画面のハリボテ準備

まずは、ログイン画面とログイン画面後のTOP画面を用意しておきましょう。

「新規」→「その他」→「JavaServer Faces/JSFページ」を選択して、 login.xhtmlを作成します。

f:id:hirohisoEx:20160827215927p:plain

で、このページのレイアウトを編集。

つぎに、このページに対する管理Beanも作成しておきます。 「新規」→「その他」→「JavaServer Faces/JSF管理対象Beans」を選択して、 loginBeans.javaを作成します。

f:id:hirohisoEx:20160827215938p:plain

画像とは違い、実際はスコープをviewスコープにしました。

でココらへんで一回起動・・・あれ?起動しない。。。。\(^o^)/

知らべてみると、そもそもGlassFishがプロジェクトを認識してくれていない・・・ どうやらパスに全角文字が入っているとダメみたいだ、なのでパス変更

でも動かない\(^o^)/オワタ

NetBeansからだと、実行時のエラーが全くわからないため、 ビルドされたwarを直接glassfishの管理コンソールから、 デプロイしてみた。するとこんなエラーが。。。

f:id:hirohisoEx:20160827215859p:plain

あ、loginBeans.javaをSerializableに してなくてエラーになっていたようです。。。

で、気を取り直して実行したら、表示されました。

f:id:hirohisoEx:20160827215951p:plain

めでたしめで・・(もうちっとだけ続きます)

DB設定

では今度はユーザ情報を格納するためのDBを用意します。 今回作成するテーブル構成はこんな感じ。

Java EEの認証仕様に合わせて、グループテーブルを追加しています。

参考サイトではJava DBでしたが、 今回はOracle Database Express Editionを使用したいと思います。

まずは、表領域と接続ユーザを作成します。

表領域

create TABLESPACE study_support
datafile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\study_support' size 10m;

接続ユーザ

CREATE USER study_con IDENTIFIED BY admin
DEFAULT TABLESPACE "STUDY_SUPPORT"
TEMPORARY TABLESPACE "TEMP";

この後、connect,Resourcesロール + create Table権限(※)を与えました。

※:Resourcesロールを付与すればテーブル作成出来ると思ってたのに謎

最後にこんなテーブルを用意します。

f:id:hirohisoEx:20160827220006p:plain

GlassFishの設定

あとは、レルムの設定です。 まずはglassfishの管理コンソールに入ります。 http://localhost:4848/common/index.jsf

server-config security realmとたどり Newから新規作成 ページに移ります。

で以下のような設定を行ないます。

f:id:hirohisoEx:20160827220019p:plain

ここまでで、環境的な設定は終わり。 次回は、実際に実装してみて動作するか確認していきます。