Today I Learned
(24.05.28)[7주차] void 반환 타입일 때의 response 사용
개인과제를 진행하면서 적응을 하는데도 아직도 많이 적응 되지 않아서 시간이 걸리는게
역랑일 수도!
클라이언트에게 직접 JSON 타입으로 Response 을 찾아보는 것만으로도 엄청 시간이 걸려서
블로그에 기록..!
Spring 숙련 개인 과제 주의할 점 정리
Client에게 출력할 내용 reponse
더보기
// Failure
@Override
protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException {
response.setStatus(HttpStatus.UNAUTHORIZED.value());
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("로그인 실패");
}
이슈
- HTTP상태의 401 상태(UNAUTHORIZED)는 전달이 되지만, "로그인 실패" String 문구가 ??? 로 전달이 되는 문제
원인
- UsernamePasswordAuthenticationFilter이 구현된 클래스 내애서 @Override 한 메서드이기 때문에 void 타입이라 return을 사용할 수 없음
- 반환타입을 바꿀 수 없음
- Client 측에서 응답된 내용=한국어표시가 된 내용이 어떤 형태인지 모르는 상태
해결
- setStatus는 그 HTTP 상태가 어떤지를 세팅해주는 Response지 텍스트나 JSON으로 응답하는 Reponse가 아니기 때문에 같게 생각하면 안됨
- Response의 Writer에 의해 쓰여진 "로그인 실패"라는 한국어가 표현되어지기 위해서는 전달되는 것이 어떤 타입인지 명시를 해줘야함
- 영어일 경우에는 굳이 명시를 하지 않아도 이해를 할 수 있음
- getWriter은 입력 예외인 IOException을 발생하기 때문에 Throws로 메서드에 throws해줘야함
- 즉, response일 경우, 한국어 메시지를 위해서는 UTF-8 인코딩을 하기 위해서 콘텐츠 타입 중 charset을 명시해줘야함
그래도 덕분에 이를 살려서 다른 곳에서 적용을 할 수 있었기 때문에 수월하게 진행되는 부분이 있었긴 했다.
계속 부족한 점은 적어가면서 기록을 멈추지 않도록!
'Today I Learned' 카테고리의 다른 글
(24.05.30)[7주차] Access Token과 Refresh Token 구현 (0) | 2024.05.30 |
---|---|
(24.05.29)[7주차] JWT Access Token과 Refresh Token 정리 (0) | 2024.05.29 |
(24.05.27)[7주차] Validation 의 @Pattern (0) | 2024.05.27 |
(24.05.25)[6주차] WIL (0) | 2024.05.25 |
(24.05.24)[6주차] Spring 숙련 강의 04 마무리 (0) | 2024.05.24 |