# UserDetailsService [`UserDetailsService`](https://docs.spring.io/spring-security/site/docs/5.6.2/api/org/springframework/security/core/userdetails/UserDetailsService.html) is used by [`DaoAuthenticationProvider`](dao-authentication-provider.html#servlet-authentication-daoauthenticationprovider) for retrieving a username, password, and other attributes for authenticating with a username and password. Spring Security provides [in-memory](in-memory.html#servlet-authentication-inmemory) and [JDBC](jdbc.html#servlet-authentication-jdbc) implementations of `UserDetailsService`. You can define custom authentication by exposing a custom `UserDetailsService` as a bean. For example, the following will customize authentication assuming that `CustomUserDetailsService` implements `UserDetailsService`: | |This is only used if the `AuthenticationManagerBuilder` has not been populated and no `AuthenticationProviderBean` is defined.| |---|------------------------------------------------------------------------------------------------------------------------------| Example 1. Custom UserDetailsService Bean Java ``` @Bean CustomUserDetailsService customUserDetailsService() { return new CustomUserDetailsService(); } ``` XML ``` ``` Kotlin ``` @Bean fun customUserDetailsService() = CustomUserDetailsService() ``` [UserDetails](user-details.html)[PasswordEncoder](password-encoder.html)