하석형 하석형 04-18
250418 하석형 Jsoup 라이브러리 추가, 게시판 내용 등록/수정 시 HTML 태그 제외한 내용 저장
@46bf6549232ad2c63a8c2ae6b61aa2020c3927ce
build.gradle
--- build.gradle
+++ build.gradle
@@ -70,6 +70,9 @@
 
     implementation group: 'net.rakugakibox.util', name: 'yaml-resource-bundle', version: '1.1'
 
+    // 에디터 태그 제거용 라이브러리
+    implementation 'org.jsoup:jsoup:1.19.1'
+
     testImplementation 'org.springframework.boot:spring-boot-starter-test'
     testImplementation 'org.springframework.security:spring-security-test'
 }
src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
--- src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
+++ src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
@@ -16,6 +16,7 @@
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import org.jsoup.Jsoup;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.dao.DataAccessException;
 import org.springframework.stereotype.Service;
@@ -127,13 +128,15 @@
             if (bbsCn.getBbsNm() != null && !bbsCn.getBbsNm().isEmpty()) {
                 String bbsNm = bbsCn.getBbsNm();
                 String content = bbsCn.getBbsCn();
+                String bbsCnText = Jsoup.parse(content).text(); // HTML 태그 제거
+                bbsCn.setBbsCnText(bbsCnText); // HTML 태그 제거된 내용 저장
                 for (String word : wordList) {
                     // 제목에 금지어가 포함되어있는가?
                     if (bbsNm.contains(word)) {
                         throw new CustomPrhibtWordException("제목에 금지어가 포함되어있습니다.", word);
                     }
                     // 내용에 금지어가 포함되어있는가?
-                    if (content.contains(word)) {
+                    if (bbsCnText.contains(word)) {
                         throw new CustomPrhibtWordException("내용에 금지어가 포함되어있습니다.", word);
                     }
                 }
@@ -352,6 +355,8 @@
             // 금지어 포함 여부 체크
             String bbsNm = (params.get("bbsNm") != null) ? params.get("bbsNm").toString() : null;
             String content = params.get("bbsCn").toString();
+            String bbsCnText = Jsoup.parse(content).text(); // HTML 태그 제거
+            params.put("bbsCnText", bbsCnText); // HTML 태그 제거된 내용 저장
             if (bbsNm != null && !bbsNm.isEmpty()) {
                 for (String word : wordList) {
                     // 제목에 금지어가 포함되어있는가?
src/main/java/com/takensoft/cms/bbs/vo/BbsCnVO.java
--- src/main/java/com/takensoft/cms/bbs/vo/BbsCnVO.java
+++ src/main/java/com/takensoft/cms/bbs/vo/BbsCnVO.java
@@ -47,6 +47,7 @@
     private String answer;           // 답변자
     private String answerNm;         // 답변자명
     private String ansDt;            // 답변일자
+    private String bbsCnText;        // 게시판 내용(텍스트)
     
     public BbsCnVO() {
         this.bbsCn = "";
src/main/resources/mybatis/mapper/bbs/bbsCn-SQL.xml
--- src/main/resources/mybatis/mapper/bbs/bbsCn-SQL.xml
+++ src/main/resources/mybatis/mapper/bbs/bbsCn-SQL.xml
@@ -45,6 +45,7 @@
             , use_yn
             , rgtr
             , reg_dt
+            , bbs_cn_text
         ) VALUES (
             #{bbsId}
             , #{bbsMngId}
@@ -66,6 +67,7 @@
             , 'Y'
             , #{rgtr}
             , NOW()
+            , #{bbsCnText}
         )
     </insert>
 
@@ -103,6 +105,7 @@
             , bc.mdfr
             , to_char(bc.mdfcn_dt, 'YYYY-MM-DD HH24:MI') AS mdfcn_dt
             , mi2.mbr_nm AS mdfr_nm
+            , bbs_cn_text
         FROM bbs_cn bc
         LEFT JOIN
             mbr_info mi
@@ -114,8 +117,8 @@
              bc.mdfr = mi2.mbr_id
         LEFT JOIN
              mbr_info mi3
-             ON
-                 bc.mdfr = mi3.mbr_id
+         ON
+             bc.mdfr = mi3.mbr_id
     </sql>
 
     <!--
@@ -149,6 +152,7 @@
              , reg_dt
              , mdfr
              , mdfcn_dt
+             , bbs_cn_text
     </sql>
 
     <!--
@@ -167,7 +171,7 @@
                         AND mi.mbr_nm LIKE '%' || #{searchText} || '%'
                     </if>
                     <if test="searchType == 'bbsCn'">
-                        AND bbs_cn LIKE '%' || #{searchText} || '%'
+                        AND bbs_cn_text LIKE '%' || #{searchText} || '%'
                     </if>
                     <if test="searchType == 'ansCn'">
                         AND ans_cn LIKE '%' || #{searchText} || '%'
@@ -177,7 +181,7 @@
                     AND (
                        bbs_nm LIKE '%' || #{searchText} || '%'
                     OR mi.mbr_nm LIKE '%' || #{searchText} || '%'
-                    OR bbs_cn LIKE '%' || #{searchText} || '%'
+                    OR bbs_cn_text LIKE '%' || #{searchText} || '%'
                     OR ans_cn LIKE '%' || #{searchText} || '%'
                     )
 
@@ -251,6 +255,7 @@
               , mi.mbr_nm AS rgtr_nm
               , mi2.mbr_nm AS mdfr_nm
               , cf.abslt_path AS abslt_path
+              , bbs_cn_text
           from( SELECT bbs_id
                      , bbs_mng_id
                      , bbs_nm
@@ -276,6 +281,7 @@
                      , mdfr
                      , mdfcn_dt
                      , 'Y' as now_ntc_yn
+                     , bbs_cn_text
                   from bbs_cn bc
                  WHERE use_yn = 'Y'
                    AND ntc_pst_yn = 'Y'
@@ -306,6 +312,7 @@
                      , mdfr
                      , mdfcn_dt
                      , 'N' as now_ntc_yn
+                     , bbs_cn_text
                   from bbs_cn bc
                  WHERE use_yn = 'Y'
         <![CDATA[  and (ntc_pst_yn ='N' or ntc_bgng_dt > CURRENT_TIMESTAMP or ntc_end_dt < CURRENT_TIMESTAMP) ]]>
@@ -374,6 +381,7 @@
             , use_yn = #{useYn}
             , mdfr = #{mdfr}
             , mdfcn_dt = NOW()
+            , bbs_cn_text = #{bbsCnText}
         WHERE bbs_id = #{bbsId}
     </update>
 
Add a comment
List