Yuigo・ん・・・湿っぽい

モルック、システムエンジニア、その他趣味。大学生のころから使っているので、昔の記事は恥ずかしいし今の思想とは異なっていることが多いです。

(自分用メモ)勉強会レポート JSUG勉強会 2019その8 Spring for Beginner

https://jsug.doorkeeper.jp/events/95750

Springの初心者向け勉強会。私も初心者から脱せていない(とりあえず動くから使ってる感じ)

Spring Framework / Spring Bootに入門する人はまずこの資料を読もう! #jsug - Qiita

コンテナから紐解く本当のSpring入門

コンテナから紐解く本当のSpring入門

発表の途中からはいったのであまり内容を聞けていない

DIにはだいたい3種類、おすすめはコンストラクタインジェクション(唯一Hoge@Componentを付与しているクラス)を変更不能にできる)

個人的にフィールドインジェクションをよく見るが、おすすめはコンストラクタインジェクションらしい。このへんの違いがあまりわかってないので押さえておきたい。

図解で学ぶSpring MVC

初歩的な内容。新人や後輩に読んでおいてほしい

図解で学ぶ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入門

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 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と仲良くなりたい。