# 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

```
<b:bean class="example.CustomUserDetailsService"/>
```

Kotlin

```
@Bean
fun customUserDetailsService() = CustomUserDetailsService()
```

[UserDetails](user-details.html)[PasswordEncoder](password-encoder.html)

