Spring Security 5.xでログイン失敗時にmessages.propertiesで上書きしているにもかかわらず常に"Bad credentials"が表示されてしまう
messages.propertiesで、メッセージを上書きしているにも関わらず、デフォルトのBad credentialsというメッセージが表示されてしまう不具合に遭遇しました。
どうも、AbstractUserDetailsAuthenticationProviderにinjectionされているMessageSourceが不正なようです。
AbstractUserDetailsAuthenticationProviderの継承クラスを自作して、それをProviderManagerにセットして…なんて自分で色々組み立てているときに再現するようです。
対策として、こんな感じでAbstractUserDetailsAuthenticationProviderの継承クラスに自分でMessageSourceをセットしてあげると直りました。
MyConcreteAuthenticationProvider athenticationProvider() { MyConcreteAuthenticationProvider provider = new MyConcreteAuthenticationProvider(); provider.setUserDetailsService(this.userDetailsService()); provider.setPasswordEncoder(passwordEncoder); provider.setMessageSource(messageSource); // <= ここがポイント return provider; }
ひしだまさんのサイトの対応策とこちらで、似たり寄ったりかもしれませんが、こういう解決策もあるよ、ということでせっかく見つけたのでメモを残しておきます。