728x90
Spring Security 를 이용해서 로그인을 구현할 경우 로그인 실패 처리는 일반적으로 아래와 같이 구현한다.
@Log4j2
public class LoginFailHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setContentType("application/json;charset=utf-8");
JSONObject json = new JSONObject();
PrintWriter out;
try {
json.put("errMsg", exception.getMessage());
out = response.getWriter();
out.print(json);
} catch (Exception e) {
log.error(e.getMessage());
}
}
}
여기에서 중요한 것은 AuthenticationFailureHandler 를 implements 했다는 것과 onAuthenticationFailure 를 오버라이딩 했다는 것인데 AuthenticationException 에 들어있는 message 가 "자격 증명에 실패하였습니다." 라는 한글 메시지인 것을 확인할 수 있다.
내가 구현한 코드에는 이러한 한글 메시지가 없는데 어떻게 한글 메시지가 출력되는건가? 이는 Spring Security 자체에 국제화 메시지 처리가 되어 있기 때문이다.
intellij 라면 아래와 같이 messages_ko_KR.properties 을 검색하면 Spring Security 패키지에서 해당 파일이 검색될 것이다.
(참고로 맥북 기준 파일명 검색 단축키는 command+Shift+O 이다)
해당 파일을 열어보면 아래와 같이 메시지가 다 깨져서 보일텐데
본인의 프로젝트에 임의의 test.properties 파일을 만들어서 붙여넣으면 아래와 같이 정상적인 한글메시지를 확인할 수 있다.
(만약 그래도 한글이 깨진다면 findmypiece.tistory.com/122 여기 설정을 참고하자)
해당 메시지를 커스터마이징 할 수도 있는데 이는 아래를 잘 설명되어 있다.
728x90
'Backend > Spring+Boot' 카테고리의 다른 글
threadContextInheritable (0) | 2021.04.23 |
---|---|
RequestContextHolder (0) | 2021.04.23 |
SpringBoot MVC 자동구성 제어하기 (0) | 2021.04.21 |
SpringBoot 정적자원 (0) | 2021.04.20 |
Spring 어노테이션 정리 (0) | 2021.04.20 |