iku8blog

Webエンジニアのタダのメモ。

Springboot 2.4.5での認証失敗で「There is no PasswordEncoder mapped for the id "null"」

springboot 2.4.5にてspring securityを使用し、認証機能を作成していたが、パスワードの比較の際に

「There is no PasswordEncoder mapped for the id "null"」

このようなエラーが出てしまったのでメモ。

どうやらsprinbootの2.3,2.4で入るspring securityのバージョンでは、ハッシュ化されたパスワードの先頭にどういう形式でエンコードするのかの情報(id)を指定する必要がるらしい。

spring.pleiades.io

f:id:iku8:20210505142820p:plain

自分が今回作成したプロジェクトでは、古いバージョンのspringbootのプロジェクトからsqlデータを流用しており、そのハッシュパスワードが

$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG

こんな感じになっていた。

なので、先頭に{bcrypt}をつけてやった

{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG

明示的にパスワードエンコードを使うかを指定しないといけなかった。