sql summery view에는 실행된 query와 통계를 테이블형셕으로 보여주는데, query는 축약형으로 표현되어 있고, 이 링크를 클릭하면 팝업창에 full query 를 보여주도록 되어 있다.
하지만, 다음과 같은 bug가 있다.
실행된 query에 개행문자가 포함되어 있으면, 팝업을 시키지 못한다.
이유는 "showSql.jsp?name=실행된 쿼리" 와 같은 형태의 javascript실행시킬 때,
실행된 쿼리에 포함된 개행문자가 script 문법 에러를 유발하기 때문이다.
이 문제는 다음과 같이 해결 할 수 있다.
layerSqlStatistics.jsp에
String escapedSql =sql.replaceAll("\'","\\\\'").replaceAll("\"",""")라는 문장을
String escapedSql =sql.replaceAll("\'","\\\\'").replaceAll("\"",""").replaceAll("\","\\\\") 와 같이 수정한다.
개행문자를 escaping시켜주는 코드가 빠져있어서 에러가 발생한 것이다.
layerSqlStatistics.jsp 말고도 sql summery가 포함되어 있는 여러 jsp가 있는데 모두 수정해주면된다.
또한, sql 에 % 와 같은 문자가 포함되어 있으면, % 가 get url에 사용되는 특수 문자이기 때문에 showSql.jsp 에서 query를 읽어 들이다가 에러를 유발 시킨다.
따라서 아래와 같이 조치해야 한다.
window.open('showSql.jsp?name=<%=escapedSql%>') 와 같은 표현을
window.open('showSql.jsp?name='+encodeURI('<%=escapedSql%>')) 와 같이 바꾸면 문제를 해결 할 수 있다.
댓글 없음:
댓글 쓰기