개발/이슈
IPv6 관련 에러 (0:0:0:0:0:0:0:1 ... )
bsorry
2023. 12. 7. 09:22
이슈
깃에서 아카이브를 다운받아 이클립스에 프로젝트를 최초 Import 하고 실행 시 스프링 부트 내장 톰캣에서 문제가 발생한다. 프로젝트 내에 중국 IP를 판단하기 위해 Client IP를 가져오는 함수에서 에러 로그 발생.
java.lang.NumberFormatException: For input string: "0:0:0:0:0:0:0:1" ....
원인
Client IP를 갸져오는 과정에서 사용되는 request.gerRemotreAddr() 함수가 Ipv4 형식이 아닌 IPv6 형식으로 IP를 가져오므로 포맷이 맞지 않아 발생하는 문제로 확인되었다.
경과 및 해결
스프링 부트 내장 톰캣(Java VM)에 따로 설정을 추가했다.
1. 내장 톰캣 설정 열기 (Run Config 로 입장 Or 왼쪽 아래 내장 톰캣 우클릭 Open Config)
2. Arguments 탭 2번째 항목 Vm arguments 에 -Djava.net.preferIPv4Stack=true 입력
3. Restart 하며 테스트 (필요에 따라 수 번 반복)
외부 톰캣 환경 해결법.
- 리눅스
톰캣 환경 변수 설정 파일 bin/setenv.sh 에
JAVA_OPTS=" -Djava.net.preferIPv4Stack=true ${JAVA_OPTS} "추가 - 윈도우
톰캣 환경 변수 설정 파일 bin/setenv.bat 에
set JAVA_OPTS=" -Djava.net.preferIPv4Stack=true %JAVA_OPTS% " 추가