Solo 发布评论

从 Solo v4.3.0 起,本地评论系统已经被彻底移除,以下内容已过时。

发布评论实现

发布评论的后端接口在 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 过滤处理。

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

1 操作
88250 在 2020-07-11 21:42:31 更新了该帖

赞助商 我要投放

7 回帖
请输入回帖内容 ...
  • maomaomiya

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

    1 回复
  • 88250

    下载 release 下面的 war 包。

  • abelkeith

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

    1 回复
  • 88250

    请看 log4j.props 配置文件。

    1 回复
  • abelkeith

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

  • someone49892

    image.png
    请问 solo 博客 能否自定义 评论排序模式, 就像黑客派这样。

    1 回复
  • 88250 1 评论

    目前不能。评论这一块我们正在计划个大改版,预计明年第一季度发布,会把这个需求考虑进去的,谢谢!

    感谢!
    someone49892
请输入回帖内容 ...