Это мой Проверьте это:
Код: Выделить всё
@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 {}
Код: Выделить всё
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
Мобильная версия