"本文是[链接]的一个章节,该系列文章将介绍 [链接] 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 发布评论实现 发布评论的后端接口在 CommentProcessor.java 中: .."

Solo 发布评论

本贴最后更新于 199 天前,其中的信息可能已经事过景迁

本文是《Solo 从设计到实现》的一个章节,该系列文章将介绍 Solo 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 ❤️

发布评论实现

发布评论的后端接口在 CommentProcessor.java 中:

发布评论时会检查是否是登录用户,如果是登录用户发布评论,则不会校验验证码。

if (!Solos.isLoggedIn(httpServletRequest, httpServletResponse)) {
    final String captcha = requestJSONObject.optString(CaptchaProcessor.CAPTCHA);
    if (CaptchaProcessor.invalidCaptcha(captcha)) {
        jsonObject.put(Keys.STATUS_CODE, false);
        jsonObject.put(Keys.MSG, langPropsService.get("captchaErrorLabel"));

        return;
    }
}

发布评论分为对文章的评论和对页面的评论,处理流程基本类似。添加完数据记录后会在响应中填充 HTML 模板,方便前端做异步渲染。

 // 添加评论优化 https://github.com/b3log/solo/issues/12246
try {
    final String skinDirName = (String) httpServletRequest.getAttribute(Keys.TEMAPLTE_DIR_NAME);
    final Template template = Skins.getSkinTemplate(httpServletRequest, "common-comment.ftl");
    final JSONObject preference = preferenceQueryService.getPreference();
    Skins.fillLangs(preference.optString(Option.ID_C_LOCALE_STRING), skinDirName, dataModel);
    Keys.fillServer(dataModel);
    final StringWriter stringWriter = new StringWriter();
    template.process(dataModel, stringWriter);
    stringWriter.close();
    String cmtTpl = stringWriter.toString();

    addResult.put("cmtTpl", cmtTpl);
} catch (final Exception e) {
    // 1.9.0 向后兼容
}

发布评论大致需要进行如下处理:

评论发布完成后还会触发事件发布评论。内置的事件处理有两个:

XSS 防御

评论内容支持 Markdown 语法,在入库保存时存的是 Markdown 文本。其中有可能包含一些不安全的脚步,在渲染评论时会进行 XSS 过滤处理。

不在发布时过滤是因为当前的过滤有可能存在漏洞,这样以后要更新数据就非常困难了。在渲染时可以随时调整过滤算法,直到排除隐患。


回到全文目录:《Solo 从设计到实现》

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。

    Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
    具体细节请浏览 B3log 构思

    629 引用 • 4803 回帖 • 719 关注
  • 设计
    87 引用 • 522 回帖 • 1 关注
  • 文档
    51 引用 • 912 回帖 • 1 关注
5 回帖   
请输入回帖内容...
  • maomaomiya  

    最新版的咋部署?不会啊就下载了一个 master 文件

    1 回复
  • 88250    

    下载 release 下面的 war 包。

  • abelkeith  

    日志中出现中文乱码,文字格式该在哪里调整?

    1 回复
  • 88250    

    请看 log4j.props 配置文件。

    1 回复
  • abelkeith    

    yes,去除 utf-8 格式就可以了,thx