前提・実現したいこと
前提:インスタンスを生成できません。
今回解決を望みませんが、SpringStarterProjectでLombokを入れた状態での起動には失敗しています。
Springbootで webアプリを作っています。
src/main/java/SecurityConfig.javaで
@Autowired
private final UserDetailsService userDetailsService;
しても、userDetailsServiceというインスタンスが、UserDetailServiceクラスに認識されていないのか、エラーになってしまいます。
Springbootに表示される指摘内容
The blank final field useDetailsService may not have been initialized.
Initialize final field 'useDetailsService' at declaration.これをクリックすると;の前に=nullが付与され、
private final UserDetailsService userDetailsService = null;に変換されます。(この時@Autowiredは消されます。)
実現したいこと:=nullを使わずに、インスタンスを生成したい。
質問内容
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;でインポートしたものを、private final UserDetailsService userDetailsService;
としてインスタンス生成する方法を教えていただけると幸いです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.RuntimeException: Could not postProcess org.springframework.security.authentication.dao.DaoAuthenticationProvider@562398ac of type class org.springframework.security.authentication.dao.DaoAuthenticationProvider Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.RuntimeException: Could not postProcess org.springframework.security.authentication.dao.DaoAuthenticationProvider@562398ac of type class org.springframework.security.authentication.dao.DaoAuthenticationProvider Caused by: java.lang.RuntimeException: Could not postProcess org.springframework.security.authentication.dao.DaoAuthenticationProvider@562398ac of type class org.springframework.security.authentication.dao.DaoAuthenticationProvider Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider@562398ac': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: A UserDetailsService must be set Caused by: java.lang.IllegalArgumentException: A UserDetailsService must be set
該当のソースコード
Java
1import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 2 3@RequiredArgsConstructor 4@Configuration 5@EnableWebSecurity 6public class SecurityConfig extends WebSecurityConfigurerAdapter { 7 @Autowired 8 //private final UserDetailsService userDetailsService; 9 //本来は上のインスタンスを使いたいのですが、エラーになってしまうため、以下のコードで対処しています。 10 private final UserDetailsService userDetailsService = null; 11 12 //作成したuserDetailsServiceを使用し、DBからユーザを参照できるようにする 13 @Override 14 protected void configure(AuthenticationManagerBuilder auth) 15 throws Exception { 16 auth.userDetailsService(userDetailsService) 17 .passwordEncoder(passwordEncoder()); 18 } 19 20} 21
試したこと
上のコードにも書いたが、userDetailService;で終わるとエラーになってしまうので、
private final UserDetailsService userDetailsService = null;
に変更しました。
実行すると、以下のエラーが出力されました。
java.lang.IllegalArgumentException: A UserDetailsService must be set