인증

글 작성자도 아닌데 글을 지우거나 삭제할 수 있다는건 말이 안되는 일이므로 인증은 서비스에서 필수다.

인증이란 아래처럼 생각해보면 간단한 과정이다.

요청이 들어올때 인증된 유저인지 검사하고, 인증을 통과한 사용자일 시 API 를 사용하게 해준다.

그렇다면 허가된 사용자인지 어떻게 인증을 할까? 가장 간단한 방법부터 생각해보자.

 

[인증 방법]

  1.  GET Parameter
    ->  전혀 안쓰는 방법은 아닌데 URL 에 너무 과한 정보를 담는 감이 있다.
  2.  POST(body) value
    ->  인증은 비즈니스 로직과 별도로 봐야하는데 body 에 인증값 추가 시 PostCreate 부터 고쳐야한다.

    ->  글 작성과 무관한 데이터가 body 에 들어가는건 바람직하지 않다.
  3.  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" 값이 들어오고 테스트가 성공함을 확인할 수 있다.

 

 

 

 

+ Recent posts