consider defining a bean of type ‘org.springframework.security.core.userdetails.UserDetailsService’ in your configuration Issue#1: consider defining a bean of type ‘org.springframework.security.core.userdetails.UserDetailsService’ in your configuration OR required a bean of type ‘org.springframework.security.core.userdetails.UserDetailsService’ that could not be found Table of Contents Toggle Why this error encountered?How to resolve this error?Step-by-Step Solution:Step#1: Create a Custom UserDetailsService Implementation:Step#2: Define UserDetailsService in Security Configuration:Step#3: Ensure Dependency in pom.xml:Explanation: Why this error encountered? The error message “consider defining a bean of type ‘org.springframework.security.core.userdetails.UserDetailsService’ in your configuration” typically indicates that Spring Security cannot find a UserDetailsService bean in the application context. The UserDetailsService is essential for loading user details (username, password, authorities) for authentication purposes during authentication. Reason for this error might be: Missing UserDetailsService Implementation: You might not have provided an implementation of UserDetailsService in your configuration. Bean Configuration Issues: Even if you have implemented UserDetailsService, it might not be correctly defined as a Spring bean. How to resolve this error? To resolve this, you need to implement the UserDetailsService interface and ensure it is registered as a Spring bean. Here’s how to resolve this error: Implement UserDetailsService: Create a class that implements the UserDetailsService interface. This class will be responsible for retrieving user information from your data source (e.g., database or LDAP) based on the username provided during login. Configure UserDetailsService as a Bean: Annotate your implementation class with @Service and ensure it’s included in your Spring application context. You can achieve this by adding it to your component scan configuration or explicitly defining it as a bean. Spring Boot also offers a default UserDetailsService implementation if you’re using in-memory authentication, but it’s recommended to create a custom implementation for production use cases that retrieve user details from a persistent storage mechanism. Step-by-Step Solution: Step#1: Create a Custom UserDetailsService Implementation: import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; @Service public class CustomUserDetailsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // Logic to fetch user details from database // Return a UserDetails object } } Step#2: Define UserDetailsService in Security Configuration: Ensure your security configuration uses the custom UserDetailsService. import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomUserDetailsService customUserDetailsService; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(customUserDetailsService); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } Step#3: Ensure Dependency in pom.xml: Make sure you have the Spring Security dependency in your pom.xml. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> Explanation: CustomUserDetailsService: This class implements UserDetailsService and is annotated with @Service to make it a Spring bean. SecurityConfig: This configuration class extends WebSecurityConfigurerAdapter and uses the custom UserDetailsService to authenticate users. PasswordEncoder: A PasswordEncoder bean is defined to handle password encoding, which is often necessary for user authentication. Issue#2: required a bean of type ‘org.springframework.security.core.userdetails.UserDetailsService’ that could not be found Add a bean for UserDetailsService @Autowired private UserDetailsService userDetailsService; @Bean public UserDetailsService userDetailsService() { return super.userDetailsService(); } You should be able to resolve the error and successfully implement role-based security in your Spring Boot application by following these steps.