Настройка Spring Security 6.1 в приложении Spring Boot для базовой аутентификации в REST APIJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Настройка Spring Security 6.1 в приложении Spring Boot для базовой аутентификации в REST API

Сообщение Anonymous »

Я пытаюсь настроить Spring Security в приложении Spring Boot для моего REST API с базовой аутентификацией следующим образом:

Код: Выделить всё

@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;
}
}
Это мой файл SecurityConfig, в котором я настроил базовую аутентификацию с использованием пользователя и пароля в памяти. Однако, когда я пытаюсь получить доступ к своим защищенным конечным точкам, Spring Security продолжает запрашивать учетные данные для аутентификации.
Может ли кто-нибудь помочь мне понять, что я делаю неправильно или чего мне не хватает в моей конфигурации? чтобы аутентификация работала правильно?
Будем благодарны за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/784 ... -authentic
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»