일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- auto.create.topics.enable
- System.err
- 자바스터디
- 자바할래
- 항해99
- 함수형 인터페이스
- github api
- 제네릭 와일드 카드
- 람다식
- 접근지시자
- 상속
- throwable
- Switch Expressions
- docker
- yield
- annotation processor
- 스파르타코딩클럽
- Study Halle
- 바운디드 타입
- 브릿지 메소드
- raw 타입
- junit 5
- System.in
- 프리미티브 타입
- 제네릭 타입
- 합병 정렬
- 익명 클래스
- 정렬
- System.out
- 로컬 클래스
Archives
- Today
- Total
코딩하는 털보
21.09.29 TIL 본문
Spring Security CSRF 방어 설정으로 인해 Postman이 변경 요청을 할 때 403 status만 받아왔다.
Postman에 CSRF 토큰을 집어넣는 방법이 있을 수도 있지만
나는 그냥 Profile 별로 다른 보안 설정을 사용하려고 한다.
@Configuration
@Profile("dev")
public class DevWebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll().and()
.csrf().disable()
.formLogin().and()
.httpBasic();
}
}
이렇게 하면 active profile=dev 에서는 postman이 잘 동작한다.
근데 생각해보니 이렇게 다르게 설정하면 테스트에서 프로파일 별로 서로 다른 결과를 가져올 수 있기 때문에
좋은 방법은 아닌 것 같다..
assertJ의 assertThatThrownBy() 메서드로 예외 발생 테스트를 작성했다.
@Test
@DisplayName("존재하지 않는 게시글 ID로 삭제")
void deleteArticleByInvalidId() {
willThrow(EmptyResultDataAccessException.class)
.given(articleRepository).deleteById(99L);
assertThatThrownBy(() -> articleService.deleteArticleById(99L))
.isInstanceOf(ArticleNotFoundException.class);
verify(articleRepository).deleteById(99L);
}
@DataJpaTest
리포지토리 테스트를 추가했다.
@Import 어노테이션을 사용하면 테스트 할 때 스캔할 @Configuration를 추가할 수 있다.
@DataJpaTest
@Import(JpaAuditingConfiguration.class)
class ArticleRepositoryTest {
@Autowired
private ArticleRepository articleRepository;
List<Article> mockArticleList = new ArrayList<>();
@BeforeEach
private void beforeEach() throws InterruptedException {
//given
mockArticleList.add(Article.from(
new ArticleRequestDto("test title 1", "tester", "test content 1")));
mockArticleList.add(Article.from(
new ArticleRequestDto("test title 2", "tester", "test content 2")));
mockArticleList.add(Article.from(
new ArticleRequestDto("test title 3", "tester", "test content 3")));
mockArticleList.add(Article.from(
new ArticleRequestDto("test title 4", "tester", "<script>alert('XSS');</script>")));
for (Article article : mockArticleList) {
articleRepository.save(article);
sleep(10);
}
}
@Test
@DisplayName("최근 생성 순으로 게시글 목록 조회")
public void findAllByOrderByCreatedAtDesc() {
//when
List<Article> articleList = articleRepository.findAllByOrderByCreatedAtDesc();
//then
for (int i = 0; i < articleList.size()-1; i++) {
assertThat(articleList.get(i).getCreatedAt().isAfter(articleList.get(i+1).getCreatedAt()))
.isTrue();
}
}
}
값이 null인 게시글을 만들려고 할 때 DB에 저장이나 수정을 요청하기 전에 컨트롤러에서 필터링하기 위해
RequestDto에 lombok.NonNull 어노테이션으로
@Getter
@AllArgsConstructor
public class ArticleRequestDto {
@NonNull
private final String title;
@NonNull
private final String writer;
@NonNull
private final String content;
}
Comments