인증
글 작성자도 아닌데 글을 지우거나 삭제할 수 있다는건 말이 안되는 일이므로 인증은 서비스에서 필수다.
인증이란 아래처럼 생각해보면 간단한 과정이다.
요청이 들어올때 인증된 유저인지 검사하고, 인증을 통과한 사용자일 시 API 를 사용하게 해준다.
그렇다면 허가된 사용자인지 어떻게 인증을 할까? 가장 간단한 방법부터 생각해보자.
[인증 방법]
- GET Parameter
-> 전혀 안쓰는 방법은 아닌데 URL 에 너무 과한 정보를 담는 감이 있다. - POST(body) value
-> 인증은 비즈니스 로직과 별도로 봐야하는데 body 에 인증값 추가 시 PostCreate 부터 고쳐야한다.
-> 글 작성과 무관한 데이터가 body 에 들어가는건 바람직하지 않다. - Header
-> 헤더에 담아서 인증을 해보자
PostController
HTTP 요청 헤더 중 authorization 에 "midcon" 이라는 값이 넘어 올 시 글 작성 로직이 동작하는 인증 로직을 추가한다.
@PostMapping("/posts")
public PostResponse post(@RequestBody @Valid PostCreate request, @RequestHeader String authorization) {
if (authorization.equals("midcon")) {
request.validate();
return postService.write(request);
}
return null;
}
ㄴ @RequestHeader
요청 헤더에 해당 애노테이션이 달린 값을 요청한다.
PostControllerTest
HTTP 요청 헤더의 authorization 에 "midcon" 을 넣은 후 글 작성 요청을 하는 테스트를 작성한다.
@DisplayName("글 작성 시 저장한 Post 를 출력한다.")
@Test
void post1() throws Exception {
// given
PostCreate request = PostCreate.builder()
.title("글 제목입니다")
.content("글 내용입니다 하하")
.build();
String json = objectMapper.writeValueAsString(request);
mockMvc.perform(
post("/posts")
.header("authorization", "midcon")
.contentType(APPLICATION_JSON)
.content(json)
)
.andExpect(status().isOk())
.andExpect(jsonPath("$.title").value("글 제목입니다"))
.andExpect(jsonPath("$.content").value("글 내용입니다 하하"))
.andDo(print());
}
요청 헤더의 authorization 에 "midcon" 값이 들어오고 테스트가 성공함을 확인할 수 있다.
'API 만들어 보기 > 게시판 API' 카테고리의 다른 글
[API 인증] ArgumentResolver 사용해보기 (0) | 2023.09.30 |
---|---|
[API 인증] Interceptor 사용해보기 (0) | 2023.09.29 |
[Spring REST Docs] 기본설정 (0) | 2023.09.26 |
[예외처리] 예외처리 2 (0) | 2023.09.26 |
[예외처리] 예외처리 1 (0) | 2023.09.26 |