プログラミング Java

【SpringSecurity】#1~ ログイン画面の実装(認証)

投稿日:2021年2月7日 更新日:

概要

SpringSecurityを導入してユーザ認証機能を実現します。
まずはログイン認証機能が使えるようになることを目標にしていますので、
本記事で解説する構成は最小限にとどめています。
 

準備

SpringSecurityで認証機能を実装できるように、まずは環境を準備します。

構成管理

本記事では構成管理はMavenを使用しています。
Mavenではpom.xmlにSpringSecurityを追加することで利用可能になります。

ユーザテーブル

ユーザ情報を格納するテーブルを作成します。
ユーザID、名前、パスワード、ロールがあればよいです。
以下は慣例として、作成日時等の共通カラムも含めたDDLです。

 

パスワードは、「password」をBCryptPasswordEncoder()でエンコードした値を保持しています。
 

実装

SpringSecurityの設定

配置場所:/src/main/java/com/example/demo/SecurityConfig.java

アノテーション

  • @Configuration
  • 設定用クラスであることを示すアノテーション

  • @EnableWebSecurity
  • Spring Securityのウェブ用の機能を利用するためのアノテーション

http.authorizeRequests()

  • antMatchers(“/hoge/**”)
  • 一致するディレクトリの指定です。(上記例は、hogeディレクトリ配下全てを示す)

  • permitAll()
  • アクセスを許可します。

  • asAuthority(“ROLE_ADMIN”)
  • 指定した(ROLE_ADMIN)の権限を有するユーザのみアクセスを許可します。

  • anyRequest().authenticated()
  • 条件に一致しないすべてのURLへのアクセスは、ユーザ認証のみを要求します。

formLogin()

  • usernameParameter(“username”)、passwordParameter(“password”)
  • ログイン画面のname属性(“username”等)を、
    ログインユーザ名とログインパスワードとして取得する。

  • defaultSuccessUrl(“/”, true)
  • 第1引数はログイン成功時のデフォルトのアクセスURLです。
    第2引数はデフォルトアクセスURLへの遷移を強制するかの指定です。
     true :”/”に遷移
     false:認証前に遷移しようとした遷移先
     (“/hoge/page/1″に遷移しようとしてログイン認証を要求された場合、ログイン後は”/hoge/page/1″に遷移する)

  • failureUrl(“/login-error”)
  • ログイン認証に失敗した場合に遷移するURL。

System.out.println("password : " + passwordEncoder().encode("password"));
⇒インポートデータの「password」をエンコードするために仮実装したもの。
 

ログイン認証機能

Model
ユーザ情報テーブル(Customer)に対応するModelオブジェクトを用意します。

Repository
ユーザ情報テーブル(Customer)にアクセスするレポジトリーを用意します。

Mapper
Mapper用のXMLを用意します。
Repositoryと同じ階層となるように配置する必要があるので、以下のようにします。
また、名称も同じにする必要がありますので揃えておきます。
Repository:src/main/java/com/example/demo/domain/repository/CustomerRepository.java
XML   :src/main/resources/com/example/demo/domain/repository/CustomerRepository.xml

UserDetails
UserDetailsを継承したCustomerDetailsを実装します。
これはユーザ情報を保持するクラスであり、権限やアカウントの状態を扱います。

  • getAuthorities()
  • 権限をCollectionで返します。
    ユーザ情報テーブル(Customer)では、roleカラム内に,(カンマ)で区切って複数の権限を保持するようにしていますので、AuthorityUtils.createAuthorityListメソッドの引数に、カンマでsplitした結果の配列を返すこととしています。
    ※superユーザのroleカラムを参照

  • getPassword(), getUsername()
  • ユーザIDとパスワードを返すGetterです。

  • isAccountNonExpired(), isAccountNonLocked(), isCredentialsNonExpired(), isEnabled()
  • アカウントが有効であるかを検証する各種の設定です。
    特に実装はおこないませんが、ログインできるように全てtrueに設定します。

Service
UserDetailsServiceクラスを継承したCustomerServceクラスを実装します。
検索するユーザが存在すれば、UserDetailsを返します。
もしなければ、UsernameNotFoundExceptionがthrowされます。

 

ログイン画面


SpringSecurityで自動生成されるログインページです。
独自のログイン画面を実装することも可能なので、興味のある方は更に踏み込んでみて下さい。
(参考)
#3~ 独自のログイン画面
 

ログアウト

/logoutにリンクを用意するだけでログアウトは実現できます。
ログアウト画面を独自に実装したい場合は独自に実装する必要はあります。
 

まとめ

  • SpringSecurityの導入はMavenの構成管理(pom.xml)だと簡単に行える。
  • ユーザ用のテーブルを用意すること。
    また、権限カラム(role)で権限を設定可能になる。
  • SpringSecuriyの設定用クラスには、@Configurationと@EnableWebSecurityアノテーションを付ける。
  • デフォルトのログイン画面が用意されているので、カスタマイズしたい場合のみ作成する。
  • ログアウトはデフォルトの機能が用意されているので、カスタマイズしたい場合は実装を行う。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

【SpringBootチュートリアル】#8~ 検索機能の実装

概要 ・検索フォームから条件を指定して検索すると、条件に一致する結果が一覧画面に表示される。 ・検索条件は複合的に指定できることとする。 ・検索結果は適切にフォーマットされることとする。  (日付はy …

【Java】TreeSetの使い方(順序付けSet)

TreeSetの使い方 基本的な使い方はHashSetと同じなので、以下を参照下さい。 【Java】HashSetの使い方いろいろ TreeSetは何も指定せずにインスタンスを生成すると、Collec …

【SpringBootチュートリアル】#11~ 削除ダイアログの作成

概要 検索結果から削除機能を呼び出した際に、削除を確認するためのダイアログです。 実装はjQueryで行いますので、mavenへの追加作業等の準備を別途行います。 イメージ jQueryの準備 jQu …

【SpringBootチュートリアル】#10~ 更新機能の実装

概要 既に登録済みの書籍情報を画面上で編集し、更新する処理を実装します。 更新した内容が反映されていることを確認するところまでを行います。   フロントエンド 更新情報のリクエスト edit.html …

【Java】オブジェクト指向の練習題材(会員オブジェクト)

前回記事、オブジェクト指向とは何なのかを簡単に説明してみるの練習題材です。   仕様 以下の会員クラスを作成し、Mainクラスで表示する。 会員クラスには、「会員」という単位で持つことできる …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。