(自分用メモ)勉強会レポート JSUG勉強会 2019その8 Spring for Beginner
https://jsug.doorkeeper.jp/events/95750
Springの初心者向け勉強会。私も初心者から脱せていない(とりあえず動くから使ってる感じ)
Spring Framework / Spring Bootに入門する人はまずこの資料を読もう! #jsug - Qiita
コンテナから紐解く本当のSpring入門
発表の途中からはいったのであまり内容を聞けていない
DIにはだいたい3種類、おすすめはコンストラクタインジェクション(唯一Hoge
(@Component
を付与しているクラス)を変更不能にできる)
個人的にフィールドインジェクションをよく見るが、おすすめはコンストラクタインジェクションらしい。このへんの違いがあまりわかってないので押さえておきたい。
図解で学ぶSpring MVC
初歩的な内容。新人や後輩に読んでおいてほしい
フロントコントローラパターンとはいわゆるController層によって各サービス層にディスパッチするパターン。コントローラーを見ればリクエスト一覧が分かるので一元管理できるのがメリット
DispatcherServlet
が適切なインタフェースへの橋渡しを行うHandlerMapping
が使用するHandlerを特定する、どのコントローラーを呼ぶべきかをDispatcherServlet
に返すHandlerAdopter
,Handler
がコントローラで定義している処理を実行するViewResolver
が、クライアントに返すべきViewを特定する(HTMLやJSPを想定しての話かな?)View
の動的な部分には渡されたModel
の中身によって変更する(Thymeleafで書く部分の話を指しているんだと思う)
Spring BootでSpring MVCを使うためには(最低限の実装)
- Spring MVCの依存性を追加する
- 雛形をSpring initializerを使って用意すると楽
- Controllerの実装(Viewを返すだけならこれだけでOK。細かい処理はサービス層に委譲する)
Model
はコントローラーメソッドの引数で受け取るようにして、処理の結果をModel
に詰める- 表示する画面をView名として返す
- Viewを実装する(代表的なテンプレートエンジンとしてThymeleafを用いることが多い)
今回は画面を返すような想定だったが、Web APIを作る場合はRestController
を駆使することになる
その他の機能、例えば
- バリデーション
- 例外ハンドラ
RestTemplate
MockMvc
- セッション管理
- 非同期処理
- i18n
Form認証で学ぶSpring Security入門
Security Filter Chainの登録順序が分かるクラス…TODO
各フィルターでSecurityに必要な機能を組み上げていく
認証…対象が誰であるかを確認する、認可…コードやデータへのアクセスを許可すること
WebSecurityConfig
- 認可の設定
- フォーム認証を有効にし、成功・失敗時の遷移先を指定
- 認証時に利用する
UserDetails
の指定、パスワードエンコード方式の指定
実際の認証処理はDaoAuthenticationProvider
で行う、ここでUserDetailsManager
からユーザー情報を取得する(DBなどに設定することが多い、これをCognitoとかOAuthサービスに置き換えるみたいなことをスマートにやりたい)
全体的に基本的な機能はデフォルトで用意されていて、システム要件に合わせて各フィルターの処理を上書きして実装しましょうというイメージで捉えているけど合っているだろうか
アクセスの許可は投票制によって決まる。投票結果の評価方法をどれだけ厳しくするか、というのは開発者で決めることができる
認証処理はSpring Security Wayに乗った実装を心がける、オリジナリティに走るとダサいしメンテできない、ソースコードを読んで理解するのが良い
Role Hierarchy
Roleの階層化をすることで細かい権限設定がスマートに書けるようになる
Global Method
@PreAuthorize
…コントローラーメソッドの前に認証できる
便利そうなのは分かったけど説明が早かったのでスライドを後で見たい
絶対むずいんだけどなかなか理解できないのがSecurityだよなあ、という印象は変わらず :sweat:
開発者のためのSpring Boot Actuator入門
実行中のSpring Bootアプリケーションの情報を取得する(メトリクス、環境情報、ヘルスチェックなど)。取得するためのエンドポイントを用意してくれる。監視(Micrometerとの統合もできる)やデバッグに使えるなー今の現場で使ってみましょうかね
今回は開発に関しての内容に絞る。
Actuatorが持つエンドポイントはそれぞれ公開するか非公開にするか選ぶことができる(本番環境などではSecurityで保護しよう。開発で全公開、その他では全OFFという大胆な方法もあり)。また、Actuatorのみサーバーのポートを別に設定することができる(!)
あるあるな悩み、以下はActuatorで楽になれます、すごい :clap:
- 実際に読み込まれたプロパティが分からない
- env
- どのファイルの何行目が設定箇所かまで分かる
- Controllerのどのメソッドがどのエンドポイントに対応しているのか分からない
- mappings
- どのコントローラーのどのメソッドか、どのHTTPメソッドに対応しているのか
- ログレベルを変えるのにいちいち再起動するのが面倒だ、最終的なログレベルが分からない
- logger
- GETで確認し、POSTで各ロガーのレベルを変更することができる
curlを打つのが面倒な場合、Spring Boot Adminというツールを使うと楽かもしれないとのこと。Actuatorを利用してメトリクスのダッシュボードを作ってくれる。ありがたい
Spring Pet Clinic…Springが作っているサンプルアプリ。知らなかった
感想
初心者向けということで一応1年以上触っている身として何が得られるのか楽しみだったが、やはり知らないことや知識として押さえていない部分、とりあえず動かせるけどわかっていない部分がとても多いことを痛感した。もっと内部的な動きを理解したうえでSpringと仲良くなりたい。