Lapisan Layanan
Anda harus membuat service
yang terpisah menerapkan org.springframework.security.core.userdetails.UserDetailsService
dan masukkan ke dalam AuthenticationManagerBuilder
.
@Component
public class SecUserDetailsService implements UserDetailsService{
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
/*Here add user data layer fetching from the MongoDB.
I have used userRepository*/
User user = userRepository.findByUsername(username);
if(user == null){
throw new UsernameNotFoundException(username);
}else{
UserDetails details = new SecUserDetails(user);
return details;
}
}
}
Model
UserDetails
Harus juga dilaksanakan. Ini adalah POJO yang akan menjaga detail terotentikasi pengguna pada Spring. Anda dapat menyertakan objek data Entitas Anda yang dibungkus di dalamnya, seperti yang telah saya lakukan.
public class SecUserDetails implements UserDetails {
private User user;
public SecUserDetails(User user) {
this.user = user;
}
......
......
......
}
Konfigurasi Keamanan
Autowire layanan yang kita buat sebelumnya dan atur di dalam AuthenticationManagerBuilder
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
SecUserDetailsService userDetailsService ;
@Autowired
public void configAuthBuilder(AuthenticationManagerBuilder builder) throws Exception {
builder.userDetailsService(userDetailsService);
}
}