悠悠楠杉
网站页面
正文:
在开发个人博客系统时,文章编辑功能是核心模块之一。本文将基于Spring Boot框架,逐步实现一个支持标题、关键词、正文编辑的完整解决方案,并重点解决富文本编辑和防XSS攻击等实际问题。
首先创建文章编辑的实体类Article,定义核心字段:
public class Article {
private Long id;
private String title; // 标题
private String keywords; // 关键词,逗号分隔
private String content; // 正文(HTML格式)
private LocalDateTime updateTime;
// getters/setters省略
}对应的Thymeleaf表单模板(edit.html):
<form th:action="@{/admin/article/save}" method="post">
<input type="text" th:field="*{title}" placeholder="请输入标题"/>
<textarea th:field="*{keywords}" placeholder="关键词,用逗号分隔"></textarea>
<textarea id="editor" th:field="*{content}" hidden></textarea>
<div id="richEditor"></div> <!-- 富文本编辑器容器 -->
<button type="submit">保存</button>
</form>推荐使用开源编辑器如Quill.js或TinyMCE。以下以TinyMCE为例:
<script src="https://cdn.tiny.cloud/1/your-api-key/tinymce/6/tinymce.min.js"></script>tinymce.init({
selector: '#richEditor',
plugins: 'link image code table',
setup: (editor) => {
editor.on('change', () => {
document.getElementById('editor').value = editor.getContent();
});
}
});在Controller中接收表单数据时,需注意:
Jsoup清理HTML内容@PostMapping("/save")
public String saveArticle(@Valid Article article) {
String safeContent = Jsoup.clean(
article.getContent(),
Whitelist.relaxed() // 允许基础HTML标签
);
article.setContent(safeContent);
articleRepository.save(article);
return "redirect:/articles";
}private String formatKeywords(String rawKeywords) {
return Arrays.stream(rawKeywords.split(","))
.map(String::trim)
.distinct()
.collect(Collectors.joining(","));
}@Version实现乐观锁,避免并发编辑冲突通过以上实现,您将获得一个功能完整、安全可靠的博客编辑模块。实际开发中还需根据业务需求调整细节,例如添加封面图上传、SEO字段自动生成等扩展功能。