스프링 시큐리티 로그인 시 출력값에 대한 작업중 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 |