스프링 시큐리티 로그인 시 출력값에 대한 작업중 objectMapper.writeValueAsString()로 변환했을때 한글로 입력한 name이 ???로 출력되는것을 확인하였다.

 

writeValueAsString 도입이후 발생한 인코딩문제로 확인하였으며 이에 대한 해결 방안을 찾아본 결과 

 

다음과 같은 코드를 추가해주면 해결된다.

//HttpServletResponse response
response.setCharacterEncoding("UTF-8"); // objectMapper.writeValueAsString 한글깨지는 것에 대한 대응코드

 

 

 

메서드 전체코드

public class MemberAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
                                        HttpServletResponse response, //<- 적용할 파라미터
                                        Authentication authentication) throws IOException, ServletException {
        Member member = (Member) authentication.getPrincipal();

        response.setCharacterEncoding("UTF-8"); // objectMapper.writeValueAsString 한글깨지는 것에 대한 대응코드

        /*MemberDetails에서 유저정보를 가져와서 리스폰스에 뿌려주는 부분*/
        Map<String, Object> loginResponse = new HashMap<>();
        loginResponse.put("memberId", member.getMemberId());
        loginResponse.put("email", member.getEmail());
        loginResponse.put("roles", member.getRoles());
        loginResponse.put("level", member.getLevel().getLevel());
        loginResponse.put("name", member.getName());


        ObjectMapper objectMapper = new ObjectMapper();
        String responseBody = objectMapper.writeValueAsString(loginResponse);
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);

        response.getWriter().write(responseBody);

        log.info("# Authenticated successfully");
        log.info("name:{}, email: {}, role: {}", member.getName(), member.getEmail(), member.getRoles() );
    }
}

'Study > Java' 카테고리의 다른 글

Java - String split(String regex) 메서드  (0) 2023.04.17
Java - 문자열 3자리마다 콤마찍기 (금액 표기하기)  (0) 2023.03.24
애너테이션 / 스트림  (0) 2022.11.15
컬렉션  (0) 2022.11.10
제네릭 / 예외처리  (0) 2022.11.10

+ Recent posts