Ошибка POST-запроса с базовой аутентификацией при весенней загрузкеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка POST-запроса с базовой аутентификацией при весенней загрузке

Сообщение Anonymous »

Я новичок в Spring Boot и изучаю, как сделать rest API, здесь я пытаюсь добавить базовую аутентификацию к API, и запросы на получение работают нормально, но запрос на отправку нет.
Это мой Проверьте это:

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

@Test
@DirtiesContext
void shouldCreateANewCashCard() {
var cashcard = new CashCard(null, 99.99, "sina");
ResponseEntity response = restTemplate
.withBasicAuth("sina", "abc123")
.postForEntity("/cashcards", cashcard, Void.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.CREATED);

URI locationOfNewCashCard = response.getHeaders().getLocation();
ResponseEntity response1 = restTemplate.getForEntity(locationOfNewCashCard, String.class);
assertThat(response1.getStatusCode()).isEqualTo(HttpStatus.OK);
}
Ошибка:

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

Expected :200 OK Actual   :401 UNAUTHORIZED
Остальная часть моего приложения:

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

public record CashCard(@Id Long id, Double amount, String owner) {}

@Configuration
public class SecurityConfig {

@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(request -> request
.requestMatchers("/cashcards/**")
.hasRole("CARD-OWNER"))
.httpBasic(Customizer.withDefaults())
.csrf(AbstractHttpConfigurer::disable);
return http.build();
}

@Bean
UserDetailsService testOnlyUsers(PasswordEncoder passwordEncoder) {
User.UserBuilder users = User.builder();
UserDetails sina = users
.username("sina")
.password(passwordEncoder.encode("abc123"))
.roles("CARD-OWNER")
.build();
UserDetails noCardMan = users
.username("noCardMan")
.password(passwordEncoder.encode("efg456"))
.roles("NON-OWNER")
.build();
return new InMemoryUserDetailsManager(sina, noCardMan);
}

@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}

@RestController
@RequestMapping("/cashcards")
public class CashCardController {
private final CashCardRepo cashCardRepo;

public CashCardController(CashCardRepo cashCardRepo) {
this.cashCardRepo = cashCardRepo;
}

@GetMapping("/{requestedId}")
private ResponseEntity findById(@PathVariable Long requestedId) {
Optional cashCardOptional = cashCardRepo.findById(requestedId);
return cashCardOptional.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
}

@PostMapping
private ResponseEntity createCashCard(@RequestBody CashCard newCashCard, UriComponentsBuilder ucb) {
var savedCashCard = cashCardRepo.save(newCashCard);
var locOfNewCashCard = ucb
.path("/cashcards/{id}")
.buildAndExpand(savedCashCard.id())
.toUri();
return ResponseEntity.created(locOfNewCashCard).build();
}

@GetMapping
private ResponseEntity findAll(Pageable pageable) {
Page page = cashCardRepo.findAll(
PageRequest.of(
pageable.getPageNumber(),
pageable.getPageSize(),
pageable.getSortOr(Sort.by(Sort.Direction.DESC, "amount"))
)
);
return ResponseEntity.ok(page.getContent());
}
}

public interface CashCardRepo extends CrudRepository, PagingAndSortingRepository  {}
Sql:

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

CREATE TABLE cash_card
(
ID     BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
AMOUNT NUMBER NOT NULL DEFAULT 0,
OWNER  VARCHAR(256) NOT NULL
);
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (99, 123.45, 'sina');
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (100, 69.84, 'sina');
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (101, 200.0, 'sina');
Чего мне не хватает?
может быть, кто-то уже спрашивал об этом раньше, но я не могу найти ничего, что могло бы решить эту проблему.
Я буду благодарен, если кто-нибудь сможет мне помочь.

Подробнее здесь: https://stackoverflow.com/questions/793 ... pring-boot
Ответить

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

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

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

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

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