Lớp dịch vụ
Bạn phải tạo một service
riêng biệt triển khai org.springframework.security.core.userdetails.UserDetailsService
và đưa nó vào bên trong 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;
}
}
}
Mô hình
UserDetails
Cũng nên được thực hiện. Đây là POJO sẽ giữ cho người dùng được xác thực thông tin chi tiết trước Spring. Bạn có thể bao gồm đối tượng dữ liệu Thực thể của mình được bao bọc bên trong nó, như tôi đã làm.
public class SecUserDetails implements UserDetails {
private User user;
public SecUserDetails(User user) {
this.user = user;
}
......
......
......
}
Cấu hình bảo mật
Xác thực dịch vụ mà chúng tôi đã tạo trước đó và đặt nó bên trong AuthenticationManagerBuilder
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
SecUserDetailsService userDetailsService ;
@Autowired
public void configAuthBuilder(AuthenticationManagerBuilder builder) throws Exception {
builder.userDetailsService(userDetailsService);
}
}