ガバガバOIDCモックサーバを作る
OIDCフローの調査などで本物でないOIDC IdP Mock Serverが欲しくなったので検索してみました。
世に数多あるように見えたのですが、結構真面目に認証処理してたりして、ちょっとオーバースペックだと感じたので自作することにしました。
Spring Boot の CORS 設定を全許可する
Spring Boot のリファレンス 4.7.1. The “Spring Web MVC Framework” > CORS Support を見ると、次のように設定すれば良いように見えます。
Spring Sessionをインメモリで利用する
昔は spring.session.store-type
の選択肢に hash_map
というものがあったようですが、現在は存在しません。(ちなみに none
は Spring Session を利用しない、という意味になるようで、挙動が変わってしまいます( JSESSIONID
と SESSIONID
とか))
ControllerでUnauthorizedExceptionを投げると401でなく403になる
Http403ForbiddenEntryPoint
がデフォルトで設定されているため、 ExceptionTranslationFilter
において AuthenticationException
のサブクラスは全て 403
になっている模様。
認証通った上でunauthorizedってことはforbiddenなんだよな?ということでしょうか。…この言い方だと全然ニュアンス伝わらないか。
Spring Boot 2.4.1->2.4.2アップグレードで発生した問題メモ
Spring Framework 5.3.3 で対応された
の影響で、 HttpServletRequest#getDispatcherType()
メソッドが呼ばれるようになっています。
これにより、 HttpServletRequest
をモック化して実行していたテストケースが(想定外のメソッド呼び出しで null
を返すため)失敗するようになっていました。
Ubuntu 20.04 LTS にアップグレードして問題が発生した
さて2021年にもなったし、そろそろUbuntuアップグレードしても解消できない地雷は無くなっているだろう、と思い18.04からアップグレードを敢行しました。
Spring Boot 2.3.5 で MapStruct を利用しているプロジェクトのビルドが失敗した
調査したところSpring Bootの問題と言うよりは、Lombokのバージョンが 1.18.12
から 1.18.16
に上がったことによる非互換性の問題でした。
Lombokのchangelogに説明があります:
Spring SecurityのOAuth 2.0 Login でログインしても UserInfo Endpoint にアクセスしてくれない
Spring Security OAuth 2.0 Login を利用してログインしたのですが、通常ログイン後 UserInfo Endpoint へアクセスしてくれるはずなのにこの処理がスキップされてしまうような事象に出会いました。
WindowsでGradleが扱うリソースのファイルエンコーディング設定
問題
Spring Bootの自動テストで data.sql
を作成しているのですが、 gradle check
でテストを実行すると、失敗してしまう。
原因を調べたのですが、どうも日本語のカラムを比較しているところで失敗しているようで、出力を見る感じ data.sql
のファイルエンコーディングが MS932
で扱われてしまっているようでした。
claimとscopeを追加して取得してみる
はじめに
Keycloak上で新しいclaimと、それを取得できる新しいscopeを定義し、Spring Securityを使って参照してみます。
KeycloakをIdPにしてSpring Security OAuth 2.0 Login/Client を試してみる で作成したコードをベースにしています。
Spring Security: OIDC の redirect_uri を変更する
はじめに
KeycloakをIdPにしてSpring Security OAuth 2.0 Login/Client を試してみる で作成したコードに対して、 カスタム redirect_uri
の設定を行ってみます。
今回のコードはこちら:
変更手順
KeyCloak 登録情報の変更
前回のページ を参考に、 "Valid Redirect URIs" の値を今回変更するURL http://localhost:8080/my_redirect_uri に更新します。
DevToolsを組み込んでいると再起動してもsessionが引き継がれる
Spring Boot開発中、再起動するとsessionは消失すると思いこんでいたのですが、どうも引き継がれているように見えて混乱しました。
その後、調査してみると server.servlet.session.persistent
プロパティで再起動時セッションを破棄するか保持するかを設定できることがわかりました。ただし、デフォルト値は false
で、もちろんデフォルトからは変更していません(存在を知らなかったので)。
Ruby on Rails 6 を Centos6 や Centos7 で動かす
でそれぞれ、 CentOS6 + Rails6, CentOS7 + Rails6 の Vagrant Box を作成しました。ググってみたけれど、あまり無いものなんですね。