HttpServletResponse
클라이언트에 응답을 보내는 데 사용되는 객체. 서블릿 컨테이너에서 생성되며, 웹 브라우저에 대한 응답을 생성하고 전달.
하는 일:
상태 코드 설정: setStatusCode()
헤더 정보 설정: setHeader()
콘텐츠 출력: getWriter()
redirect 기능 제공: sendRedirect()
로그인을 성공하면, Body에 상태코드와 메시지를 전달하려는 목적으로 작성한 코드이다.
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {
log.info("로그인 성공 및 JWT 생성");
String username = ((UserDetailsImpl) authResult.getPrincipal()).getUsername();
UserRoleEnum role = ((UserDetailsImpl) authResult.getPrincipal()).getUser().getRole();
String token = jwtUtil.createToken(username, role);
jwtUtil.addJwtToCookie(token, response);
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
String result = objectMapper.writeValueAsString(new ResponseStatusDto(Status.LOGIN_SUCCESS));
response.getWriter().write(result);
}
response.setContentType("application/json");
응답의 콘텐츠 유형(Content-Type)을 설정하는 부분이며, "application/json"은 JSON 형식의 데이터를 의미한다.
클라이언트에게 전송되는 응답이 JSON 형식임을 알려주기 위해서 content-type을 application/json로 지정한다.
response.setCharacterEncoding("utf-8");
응답의 문자 인코딩(Character Encoding)을 설정하는 부분으로 "utf-8"은 UTF-8 인코딩을 나타낸다. Java은 기본적으로 영어로 설정되어 있기에 성공메시지를 한국어로 보여주기 위해 설정했다.
String result = objectMapper.writeValueAsString(new ResponseStatusDto(Status.LOGIN_SUCCESS));
응답으로 전송할 JSON 데이터를 생성하는 부분이다. ResponseStatusDto를 통하여 Status.LOGIN_SUCCESS 즉, 아래와 같은 데이터를 전달하기 위해 작성했다. 그리고 objectMapper.writeValueAsString() 메서드를 사용하여 자바 객체를 JSON 형식의 문자열로 변환하고, result 변수에 저장하였다.
LOGIN_SUCCESS(200,"로그인 성공"),
response.getWriter().write(result);
응답 객체의 출력 스트림을 가져와서 JSON 데이터를 클라이언트에게 전송하는 부분으로 response.getWriter() 메서드를 사용하여 JSON 데이터인 result를 클라이언트에게 전송한다. objectMapper를 사용했던 이유는 response.getWriter().write(); 메서드가 String 값을 받기 때문에 객체로부터 Json 형태의 문자열을 만들기 위해 사용했다
결과

'Spring' 카테고리의 다른 글
| Spring Day 13 : 회원의 상태 변경(isChecked()) (0) | 2024.02.06 |
|---|---|
| Spring Day 12 : @AuthenticationPrincipal (0) | 2024.02.05 |
| Spring Day 10 : 인증과 인가 (1) | 2024.02.01 |
| Spring Day 9 : JPA Auditing (0) | 2024.01.30 |
| Spring Day 8 : Dirty Checking (0) | 2024.01.29 |