Backend/Spring+Boot

Spring Security AuthenticationException message

findmypiece 2021. 4. 22. 09:13
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 여기 설정을 참고하자)

 

해당 메시지를 커스터마이징 할 수도 있는데 이는 아래를 잘 설명되어 있다.

shinsunyoung.tistory.com/79

 

Spring Security Error Message 커스텀하기

안녕하세요! 이번 포스팅에서는 Spring Security에서 로그인에 실패했을 때 나오는 에러 메세지를 커스텀 해보도록 하겠습니다! 🤗 이번 포스팅에서 사용할 스프링 시큐리티가 적용된 프로젝트는

shinsunyoung.tistory.com

 

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