Код: Выделить всё
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig{
@Autowired
private ClienteServiceImpl clienteServiceImpl;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception{
return httpSecurity
.csrf((csrf) -> csrf.disable())
.httpBasic(Customizer.withDefaults())
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(http -> {
// Endpoints publicos
http.requestMatchers(HttpMethod.GET, "/api/v2/hola").permitAll();
http.requestMatchers(HttpMethod.POST, "/api/v2/cliente").permitAll();
// Endpoints seguros
http.requestMatchers(HttpMethod.GET, "/api/v2/hola-secured").hasAnyAuthority("CREATE", "READ", "UPDATE", "DELETE");
http.requestMatchers(HttpMethod.GET, "/api/v2/hola-secured").hasAnyRole("ADMIN", "USER");
// Endpoints no especificados
http.anyRequest().denyAll();
})
.build();
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
@Bean
public AuthenticationProvider authenticationProvider(){
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setUserDetailsService(this.clienteServiceImpl);
provider.setPasswordEncoder(passwordEncoder());
return provider;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Код: Выделить всё
@Service
public class ClienteServiceImpl implements ClienteService, UserDetailsService{
@Autowired
private ClienteRepository clienteRepository;
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
ClienteEntity clienteEntity = clienteRepository.findClienteEntityByEmail(email)
.orElseThrow(() -> new UsernameNotFoundException("User not found with email: " + email));
List authorityList = new ArrayList();
clienteEntity.getRoles()
.forEach(role -> authorityList.add(new SimpleGrantedAuthority("ROLE_".concat(role.getNombre()))));
clienteEntity.getRoles().stream()
.flatMap(role -> role.getPermissionList().stream())
.forEach(permission -> authorityList.add( new SimpleGrantedAuthority(permission.getName())));
User user = new User(
clienteEntity.getEmail(),
clienteEntity.getPassword(),
clienteEntity.isEnabled(),
clienteEntity.isAccountNoExpired(),
clienteEntity.isAccountNoLocked(),
clienteEntity.isCredentialNoExpired(),
authorityList
);
return user;
}
}
Может ли кто-нибудь помочь мне понять, что я делаю неправильно или чего мне не хватает в моей конфигурации? чтобы аутентификация работала правильно?
Будем благодарны за любую помощь.
Подробнее здесь: https://stackoverflow.com/questions/784 ... -authentic