Basic Auth in Postman
Начал разбираться с spring security и возникла такая проблема. Что в браузере get и delete запросы можно выполнить авторизовавшись, а метод save нельзя (так как нужно тело). Для save использую postman, но даже заполнив basic auth данными, все равно получаю страницу авторизации.
Может не правильно настроил security config файл ?
Вот контроллер:
@RestController
@RequestMapping("/product")
@Slf4j
public class ProductController {
private final ProductRepository productRepository;
@Autowired
public ProductController(ProductRepository productRepository) {
this.productRepository = productRepository;
}
@GetMapping("/products")
public List<Product> getAllProducts() {
log.info("Receiving all products");
return productRepository.findAll();
}
@GetMapping("/getProduct/{id}")
public Product getProductById(@PathVariable Long id) {
log.info("Receiving product by id");
return productRepository.getReferenceById(id);
}
@PostMapping("/save")
public Product saveProduct(@RequestBody Product product) {
log.info("Save products");
return productRepository.save(product);
}
@DeleteMapping("/remove/{id}")
public void deleteProduct(@PathVariable Long id) {
Product product = productRepository.getReferenceById(id);
log.info("delete product by id");
if (product != null) {
productRepository.delete(product);
}
}
}
Вот security config:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails user = User.builder()
.username("user")
.password("user1Pass")
.roles(UserRole.USER.name())
.build();
UserDetails admin = User.builder()
.username("admin")
.password("admin1Pass")
.roles(UserRole.USER.name())
.build();
return new InMemoryUserDetailsManager(user, admin);
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((authz) -> authz
.requestMatchers("/product/save").hasRole(UserRole.ADMIN.name())
.requestMatchers("/product/remove/**").hasRole(UserRole.ADMIN.name())
.requestMatchers("/product/products").permitAll()
.requestMatchers("/product/getProduct/{id}").permitAll()
.requestMatchers("/product").permitAll()
.anyRequest().authenticated()
).formLogin(withDefaults());
return http.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Вот авторизация и basic auth в postman:
Источник: Stack Overflow на русском