2015年8月26日水曜日

(6)Spring Boot で Web アプリケーションを開発:セキュリティ

今回は、Spring Boot Web アプリケーションでセキュリティ機能をサポートします。

プロジェクトの作成

前回「(5)Thymeleaf と連携する」と同様に、「(1)プロジェクトの作成」と同じ方法で新規プロジェクト bootSec を作成します。
ほとんどの部分は前回と同様です。異なる部分は以下の通りです:

POMの修正

セキュリティを有効にするために、POMに以下の部分を追加します。

SecConfig.java の追加

セキュリティ設定クラスを作成します:

  • 6行:antMatchers("/", "/home").permitAll()
    これにより、"/" や "/home" リクエストにはログインは要求されません。それ以外のページへのアクセスはログインが必要になります。
  • 7行:antMatchers("/admin/**").hasRole("ADMIN")
    これにより、"/admin/**" リクエストに対して "ROLE_ADMIN"ロールのユーザーのみが承認されます。
  • 9行:loginPage("/login").defaultSuccessUrl("/userHello").permitAll()
    ログイン成功時は userHello ページを表示します。
  • 17行:withUser("tosi").password("tosi").roles("USER") ユーザー名/パスワードが tosi/tosi のユーザーを "ROLE_USER" ロールとして設定します。
  • 17行:withUser("yumi").password("yumi").roles("ADMIN")
    ユーザー名/パスワードが yumi/yumi のユーザーを "ROLE_ADMIN" ロールとして設定します。

ビューの作成

このアプリケーションで使用するビューを作成します:
上記のビューで共通にインクルードされるナビゲーションのフラグメントは以下の通りです:

アプリケーションの動作確認

1.アプリケーションを起動する

アプリケーションを起動して、ブラウザで "localhost:9001/bootSec" にアクセスします。
最初に home ビューが表示されます:


このビューは SecConfig#configure()で antMatchers("/", "/home").permitAll() と設定されているのでログインは要求されません。

2.ユーザーページを表示する

上の home ページで「ユーザーページ」を見るをクリックします。ユーザーページを見るにはログインが必要です:


ユーザー名/パスワードに tosi/tosi を入力して"リターン"キーを押すと、ユーザーページが表示されます:


3.管理者ページを表示する

上のユーザーページでナビゲーションバーの "String Boot + セキュリティ" の部分をクリックすると home ビューが表示されます。今度は「管理者ページ」を見るをクリックします。 管理者ページは SecConfig#configure()で antMatchers("/admin/**").hasRole("ADMIN") と設定されているので、USER ロールでは表示できません。その結果、次に示すエラー画面が表示されます:


ナビゲーションバーの "ログアウト"ボタンを押してログアウトすると、ログイン画面が表示されます。

今度は、ユーザー名/パスワードに yumi/yumi を入力して"リターン"キーを押すと、ユーザーページが表示されます:


ナビゲーションバーには、ログインユーザー情報として"yumi (管理者)"が表示されます。
home に戻って、「管理者ページ」を見るをクリックすると、今度は管理者ページが表示されます:


ソースコードは GitHub bootSec からダウンロードできます。

0 件のコメント: