MyName
\\
2. Encrypt Text 버튼을 클릭 시 Input Text 입력란에 입력되어 있던 상기 코드가 아래와 같이 변경되는 이유는\\
<p>MyName<p>
\\
2.1 - 이때 Encryption - Input Text 입력란은 아래와 같이 코딩되어 있었고,\\
"/>
\\
2.2 - jsp에서 JSTL로 아래와 같이 처리하면,\\
\\
2.3 - 상기 코드에서 **''escapeXml="true"''**로 default 설정되기 때문에 캐릭터 **''<''**, **''>''**, **''&''**, **'' ' ''**, **''"''**들을\\
각각 캐릭터 엔티티 **''<''**, **''>''**, **''&''**, **'''''**, **''"''**로 변경하여 jsp에 표시되기 때문입니다.\\
\\
2.4 - Ref Site\\
[[https://honinbo-world.tistory.com/61|jstl 사용할 때 tag가 jsp 화면에 그대로 출력될 경우, escapeXml]]\\
[[https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/out.html|JSTL core Tag out]]\\
\\
2.5 - 아래와 같이 **''escapeXml="false"''**를 입력하면,\\
"/>
\\
2.6 - Encrypt Text 버튼을 클릭하여도 jsp의 Input Text 입력란은 아래와 같이 그대로 유지됩니다.\\
MyName
\\
2.7 - 하지만 내부에서 Encrypted Result에 전달되는 값은 아래와 같으며, \\
<p>MyName<p>
\\
2.8 - 상기의 값을 escapeHtml 처리를 하여 최종적으로 Encrypted Result 입력란에 표시되는 값은 아래와 같습니다.\\
<p>MyName<p>
\\
2.9 - 정리 : 입력값, JSTL 처리값, escapeHtml 처리값은 아래와 같습니다.\\
2.9.1 - 입력값, jsp에 표시되는 값\\
MyName
2.9.2 - JSTL 처리값(내부에서만 존재)\\
<p>MyName<p> // 태그에서 "<" ⇒ "<", ">" ⇒ ">"로 변경되어 표시됩니다.
2.9.3 - escapeHtml 처리 완료 후 표시되는 값\\
<p>MyName<p> // "<" ⇒ "<", ">" ⇒ ">"로 변경되어 표시됩니다.
\\
\\
====== unescapeHtml ======
===== 3. 문제 =====
Crypto-unescapeHtml에서 Decrypt Text 실행 시 에러 발생\\
\\
Decrypt Text 버튼 클릭 전\\
{{:wiki:miscellaneous:decode-unescapehtml01.png?600|}}\\
\\
Decrypt Text 버튼 클릭 후\\
{{:wiki:miscellaneous:decode-unescapehtml02.png?600|}}\\
\\
결과값이 출력되면서 동시에 input Text란에 입력했던 값이 ''**%%<p>MyName</p>%%**'' → ''**%%<p>MyName</p>%%**''으로 변경됨.\\
\\
==== 3.1 - 코드 ====
\\
코드 수정 전\\
"/>
\\
코드 수정 후\\
"/>
\\
코드 수정 후 Decrypt Text 버튼 클릭 후의 캡쳐\\
{{:wiki:miscellaneous:decode-unescapehtml03.png?600|}}\\
\\
결과값이 출력되면서 동시에 input Text란에 입력했던 값 ''**%%<p>MyName</p>%%**''이 변하지 않고 그대로 표시됨을 확인.\\
\\
=== Ref Link ===
[[https://needjarvis.tistory.com/51|[JSTL] Tag가 jsp화면에 그대로 노출될 경우, escapeXml]]\\
[[https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/out.html|JSTL Core - Tag out]]\\
\\
JSTL Core - Tag out에서 ''**%%escapeXml%%**''에 대한 설명은 아래와 같습니다.\\
>>Determines whether characters <,>,&,'," in the resulting string should be converted to their corresponding character entity codes. Default value is true.
>> 결과 문자열의 문자 ''**%%<%%**'', ''**%%>%%**'', ''**%%&%%**'', ''**%%'%%**'', ''**%%"%%**''를 해당 문자 엔티티 코드로 변환해야 하는지 여부를 결정합니다. 기본값은 true입니다.\\
\\
==== 3.2 - unescapeHtml 전처리 과정 실수 ====
\\
=== 3.2.1 - 지저분한 코드(4 lines) & 많은 변수 ===
String unescapeHtml1stRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&")));
String unescapeHtml2ndRslt = (StringEscapeUtils.unescapeHtml(unescapeHtml1stRslt.replaceAll("&", "&")));
String unescapeHtml3ndRslt = (StringEscapeUtils.unescapeHtml(unescapeHtml2ndRslt.replaceAll("'", "'")));
String unescapeHtml4thRslt = (StringEscapeUtils.unescapeHtml(unescapeHtml3ndRslt.replaceAll("<", "<").replaceAll(">", ">")));
\\
=== 3.2.2 - 지저분한 코드(4 lines) ===
String unescapedHtmlRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&")));
unescapedHtmlRslt = (StringEscapeUtils.unescapeHtml(unescapedHtmlRslt.replaceAll("&", "&")));
unescapedHtmlRslt = (StringEscapeUtils.unescapeHtml(unescapedHtmlRslt.replaceAll("'", "'")));
unescapedHtmlRslt = (StringEscapeUtils.unescapeHtml(unescapedHtmlRslt.replaceAll("<", "<").replaceAll(">", ">")));
\\
=== 3.2.3 - 지저분한 코드(2 lines) ===
String unescapedHtmlRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&")));
unescapedHtmlRslt = (StringEscapeUtils.unescapeHtml(unescapedHtmlRslt.replaceAll("&", "&").replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">")));
\\
=== 3.2.4 - 최종(1 line) ===
String unescapedHtmlRslt = resultData.setDecryptRsltFld(StringEscapeUtils.unescapeHtml(cryptoVO.getDecryptInptFld().replaceAll("&", "&").replaceAll("&", "&").replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">")));
\\
** HtmlTagFilterRequestWrapper.class 확인 및 학습 필요\\
\\
** 삽질 금지...\\
{{tag> 오션, escapeHtml, unescapeHtml}}