본문 바로가기
Spring

Spring Day 11 : 로그인 성공 시 메세지와 StatusCode

by 우 석 2024. 2. 2.

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