getClntOsInfo 함수 문의
- 작성자 :
- 박*현
- 작성일 :
- 2016-11-07 10:16:32
- 조회수 :
- 967
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
egovframework.com.utl.sim.service.EgovClntInfo 에서
getClntOsInfo중
String os_info = user_agent.toUpperCase().split(";")[2].split("\\)")[0];
에서 값을 못가져오는 경우가 발생해서 '알 수 없는 오류 입니다.'
라는 에러가 발생합니다.
모든 OS와 브라우저 경우에만 발생하는 것이 아니고, 제가 경험한 바에 따르면
Windows7 에서 크롬에서 발생하는데, 아래는 그것에 따른 user_agent 값입니다.
user_agent : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
String os_info = user_agent.toUpperCase().split(";")[2].split("\\)")[0]; 이 부분을 어떻게 바꿔야 할까요?
getClntOsInfo중
String os_info = user_agent.toUpperCase().split(";")[2].split("\\)")[0];
에서 값을 못가져오는 경우가 발생해서 '알 수 없는 오류 입니다.'
라는 에러가 발생합니다.
모든 OS와 브라우저 경우에만 발생하는 것이 아니고, 제가 경험한 바에 따르면
Windows7 에서 크롬에서 발생하는데, 아래는 그것에 따른 user_agent 값입니다.
user_agent : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
String os_info = user_agent.toUpperCase().split(";")[2].split("\\)")[0]; 이 부분을 어떻게 바꿔야 할까요?
A
박상현님 안녕하세요.
표준프레임워크센터입니다.
확인한 결과 아래와 같이 브라우저 별 agent 정보가 확인되었습니다
[IE] user_agent
: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
[엣지] user_agent
: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
[스윙] user_agent
: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3) Swing/3.4.1.0
[크롬] user_agent
: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36
user_agent.toUpperCase().split(";")[2].split("\\)")[0];
처리에 따라 [;]으로 구분한 3번째 정보를 확인하는 것인데
크롬의 경우 [;]정보가 1개로 구성되어 있어 ArrayIndexOutOfBoundsException 이 발생하였습니다.
java.lang.ArrayIndexOutOfBoundsException: 2
결론.
user-agent 정보는 지속적으로 추가되고 변경될 수 있는 정보이기 때문에 현행화에 어려움이 있습니다.
따라서 관련 서비스는 사업단의 목적에 맞게 개선하여 사용하시기 바랍니다.
가이드.
1. 오류만 패치하여 사용 : 크롬에서 발생하는 예외 처리를 위해 length를 기준으로 별도 처리
user_agent.toUpperCase().split(";").length>=3 ? user_agent.toUpperCase().split(";")[2].split("\\)")[0] : user_agent.toUpperCase().split(";")[1].split("\\)")[0];
2. 별도의 처리로직을 구현하여 개선 : 아래 링크 참고
http://the3.tistory.com/17
3. 관련 api 적용 : 아래 링크 참고
http://jsonobject.tistory.com/223
해당기능은 내부적으로 개선안을 검토하도록 하겠습니다.
감사합니다.
표준프레임워크센터입니다.
확인한 결과 아래와 같이 브라우저 별 agent 정보가 확인되었습니다
[IE] user_agent
: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
[엣지] user_agent
: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
[스윙] user_agent
: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3) Swing/3.4.1.0
[크롬] user_agent
: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36
user_agent.toUpperCase().split(";")[2].split("\\)")[0];
처리에 따라 [;]으로 구분한 3번째 정보를 확인하는 것인데
크롬의 경우 [;]정보가 1개로 구성되어 있어 ArrayIndexOutOfBoundsException 이 발생하였습니다.
java.lang.ArrayIndexOutOfBoundsException: 2
결론.
user-agent 정보는 지속적으로 추가되고 변경될 수 있는 정보이기 때문에 현행화에 어려움이 있습니다.
따라서 관련 서비스는 사업단의 목적에 맞게 개선하여 사용하시기 바랍니다.
가이드.
1. 오류만 패치하여 사용 : 크롬에서 발생하는 예외 처리를 위해 length를 기준으로 별도 처리
user_agent.toUpperCase().split(";").length>=3 ? user_agent.toUpperCase().split(";")[2].split("\\)")[0] : user_agent.toUpperCase().split(";")[1].split("\\)")[0];
2. 별도의 처리로직을 구현하여 개선 : 아래 링크 참고
http://the3.tistory.com/17
3. 관련 api 적용 : 아래 링크 참고
http://jsonobject.tistory.com/223
해당기능은 내부적으로 개선안을 검토하도록 하겠습니다.
감사합니다.