
250418 하석형 Jsoup 라이브러리 추가, 게시판 내용 등록/수정 시 HTML 태그 제외한 내용 저장
@46bf6549232ad2c63a8c2ae6b61aa2020c3927ce
--- build.gradle
+++ build.gradle
... | ... | @@ -70,6 +70,9 @@ |
70 | 70 |
|
71 | 71 |
implementation group: 'net.rakugakibox.util', name: 'yaml-resource-bundle', version: '1.1' |
72 | 72 |
|
73 |
+ // 에디터 태그 제거용 라이브러리 |
|
74 |
+ implementation 'org.jsoup:jsoup:1.19.1' |
|
75 |
+ |
|
73 | 76 |
testImplementation 'org.springframework.boot:spring-boot-starter-test' |
74 | 77 |
testImplementation 'org.springframework.security:spring-security-test' |
75 | 78 |
} |
--- 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 @@ |
16 | 16 |
import com.takensoft.common.util.JWTUtil; |
17 | 17 |
import lombok.RequiredArgsConstructor; |
18 | 18 |
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl; |
19 |
+import org.jsoup.Jsoup; |
|
19 | 20 |
import org.springframework.beans.factory.annotation.Value; |
20 | 21 |
import org.springframework.dao.DataAccessException; |
21 | 22 |
import org.springframework.stereotype.Service; |
... | ... | @@ -127,13 +128,15 @@ |
127 | 128 |
if (bbsCn.getBbsNm() != null && !bbsCn.getBbsNm().isEmpty()) { |
128 | 129 |
String bbsNm = bbsCn.getBbsNm(); |
129 | 130 |
String content = bbsCn.getBbsCn(); |
131 |
+ String bbsCnText = Jsoup.parse(content).text(); // HTML 태그 제거 |
|
132 |
+ bbsCn.setBbsCnText(bbsCnText); // HTML 태그 제거된 내용 저장 |
|
130 | 133 |
for (String word : wordList) { |
131 | 134 |
// 제목에 금지어가 포함되어있는가? |
132 | 135 |
if (bbsNm.contains(word)) { |
133 | 136 |
throw new CustomPrhibtWordException("제목에 금지어가 포함되어있습니다.", word); |
134 | 137 |
} |
135 | 138 |
// 내용에 금지어가 포함되어있는가? |
136 |
- if (content.contains(word)) { |
|
139 |
+ if (bbsCnText.contains(word)) { |
|
137 | 140 |
throw new CustomPrhibtWordException("내용에 금지어가 포함되어있습니다.", word); |
138 | 141 |
} |
139 | 142 |
} |
... | ... | @@ -352,6 +355,8 @@ |
352 | 355 |
// 금지어 포함 여부 체크 |
353 | 356 |
String bbsNm = (params.get("bbsNm") != null) ? params.get("bbsNm").toString() : null; |
354 | 357 |
String content = params.get("bbsCn").toString(); |
358 |
+ String bbsCnText = Jsoup.parse(content).text(); // HTML 태그 제거 |
|
359 |
+ params.put("bbsCnText", bbsCnText); // HTML 태그 제거된 내용 저장 |
|
355 | 360 |
if (bbsNm != null && !bbsNm.isEmpty()) { |
356 | 361 |
for (String word : wordList) { |
357 | 362 |
// 제목에 금지어가 포함되어있는가? |
--- src/main/java/com/takensoft/cms/bbs/vo/BbsCnVO.java
+++ src/main/java/com/takensoft/cms/bbs/vo/BbsCnVO.java
... | ... | @@ -47,6 +47,7 @@ |
47 | 47 |
private String answer; // 답변자 |
48 | 48 |
private String answerNm; // 답변자명 |
49 | 49 |
private String ansDt; // 답변일자 |
50 |
+ private String bbsCnText; // 게시판 내용(텍스트) |
|
50 | 51 |
|
51 | 52 |
public BbsCnVO() { |
52 | 53 |
this.bbsCn = ""; |
--- src/main/resources/mybatis/mapper/bbs/bbsCn-SQL.xml
+++ src/main/resources/mybatis/mapper/bbs/bbsCn-SQL.xml
... | ... | @@ -45,6 +45,7 @@ |
45 | 45 |
, use_yn |
46 | 46 |
, rgtr |
47 | 47 |
, reg_dt |
48 |
+ , bbs_cn_text |
|
48 | 49 |
) VALUES ( |
49 | 50 |
#{bbsId} |
50 | 51 |
, #{bbsMngId} |
... | ... | @@ -66,6 +67,7 @@ |
66 | 67 |
, 'Y' |
67 | 68 |
, #{rgtr} |
68 | 69 |
, NOW() |
70 |
+ , #{bbsCnText} |
|
69 | 71 |
) |
70 | 72 |
</insert> |
71 | 73 |
|
... | ... | @@ -103,6 +105,7 @@ |
103 | 105 |
, bc.mdfr |
104 | 106 |
, to_char(bc.mdfcn_dt, 'YYYY-MM-DD HH24:MI') AS mdfcn_dt |
105 | 107 |
, mi2.mbr_nm AS mdfr_nm |
108 |
+ , bbs_cn_text |
|
106 | 109 |
FROM bbs_cn bc |
107 | 110 |
LEFT JOIN |
108 | 111 |
mbr_info mi |
... | ... | @@ -114,8 +117,8 @@ |
114 | 117 |
bc.mdfr = mi2.mbr_id |
115 | 118 |
LEFT JOIN |
116 | 119 |
mbr_info mi3 |
117 |
- ON |
|
118 |
- bc.mdfr = mi3.mbr_id |
|
120 |
+ ON |
|
121 |
+ bc.mdfr = mi3.mbr_id |
|
119 | 122 |
</sql> |
120 | 123 |
|
121 | 124 |
<!-- |
... | ... | @@ -149,6 +152,7 @@ |
149 | 152 |
, reg_dt |
150 | 153 |
, mdfr |
151 | 154 |
, mdfcn_dt |
155 |
+ , bbs_cn_text |
|
152 | 156 |
</sql> |
153 | 157 |
|
154 | 158 |
<!-- |
... | ... | @@ -167,7 +171,7 @@ |
167 | 171 |
AND mi.mbr_nm LIKE '%' || #{searchText} || '%' |
168 | 172 |
</if> |
169 | 173 |
<if test="searchType == 'bbsCn'"> |
170 |
- AND bbs_cn LIKE '%' || #{searchText} || '%' |
|
174 |
+ AND bbs_cn_text LIKE '%' || #{searchText} || '%' |
|
171 | 175 |
</if> |
172 | 176 |
<if test="searchType == 'ansCn'"> |
173 | 177 |
AND ans_cn LIKE '%' || #{searchText} || '%' |
... | ... | @@ -177,7 +181,7 @@ |
177 | 181 |
AND ( |
178 | 182 |
bbs_nm LIKE '%' || #{searchText} || '%' |
179 | 183 |
OR mi.mbr_nm LIKE '%' || #{searchText} || '%' |
180 |
- OR bbs_cn LIKE '%' || #{searchText} || '%' |
|
184 |
+ OR bbs_cn_text LIKE '%' || #{searchText} || '%' |
|
181 | 185 |
OR ans_cn LIKE '%' || #{searchText} || '%' |
182 | 186 |
) |
183 | 187 |
|
... | ... | @@ -251,6 +255,7 @@ |
251 | 255 |
, mi.mbr_nm AS rgtr_nm |
252 | 256 |
, mi2.mbr_nm AS mdfr_nm |
253 | 257 |
, cf.abslt_path AS abslt_path |
258 |
+ , bbs_cn_text |
|
254 | 259 |
from( SELECT bbs_id |
255 | 260 |
, bbs_mng_id |
256 | 261 |
, bbs_nm |
... | ... | @@ -276,6 +281,7 @@ |
276 | 281 |
, mdfr |
277 | 282 |
, mdfcn_dt |
278 | 283 |
, 'Y' as now_ntc_yn |
284 |
+ , bbs_cn_text |
|
279 | 285 |
from bbs_cn bc |
280 | 286 |
WHERE use_yn = 'Y' |
281 | 287 |
AND ntc_pst_yn = 'Y' |
... | ... | @@ -306,6 +312,7 @@ |
306 | 312 |
, mdfr |
307 | 313 |
, mdfcn_dt |
308 | 314 |
, 'N' as now_ntc_yn |
315 |
+ , bbs_cn_text |
|
309 | 316 |
from bbs_cn bc |
310 | 317 |
WHERE use_yn = 'Y' |
311 | 318 |
<![CDATA[ and (ntc_pst_yn ='N' or ntc_bgng_dt > CURRENT_TIMESTAMP or ntc_end_dt < CURRENT_TIMESTAMP) ]]> |
... | ... | @@ -374,6 +381,7 @@ |
374 | 381 |
, use_yn = #{useYn} |
375 | 382 |
, mdfr = #{mdfr} |
376 | 383 |
, mdfcn_dt = NOW() |
384 |
+ , bbs_cn_text = #{bbsCnText} |
|
377 | 385 |
WHERE bbs_id = #{bbsId} |
378 | 386 |
</update> |
379 | 387 |
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?