Solo 发布评论

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

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

发布评论实现

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

  • 请求路径:/article/comments
  • HTTP 方法:POST
  • Java 方法:CommentProcessor#addArticleComment

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

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 向后兼容
}

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

  • 填充默认值,比如设置文章 id、时间等
  • 填充参数值,比如评论人信息、内容等
  • 处理统计,比如文章评论计数、全局评论计数
  • 发送邮件通知给管理员

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

  • ArticleCommentReplyNotifier,如果该评论时针对另一条评论的回复,则会发送邮件给原评论人
  • B3CommentSender,同步评论数据给黑客派社区,实现 B3log 构思

XSS 防御

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

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

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1424 引用 • 10041 回帖 • 469 关注
  • 设计
    111 引用 • 796 回帖 • 1 关注
  • 文档
    56 引用 • 1288 回帖 • 2 关注
1 操作
88250 在 2020-07-11 21:42:31 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 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
请输入回帖内容 ...

推荐标签 标签

  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    15 引用 • 66 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 50 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    306 引用 • 1647 回帖
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 26 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 2 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 1 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 408 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 340 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 13 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    472 引用 • 892 回帖 • 3 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖 • 2 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    39 引用 • 40 回帖 • 1 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 551 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    214 引用 • 462 回帖
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 451 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖 • 1 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    124 引用 • 3607 回帖 • 2 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 677 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 17 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    64 引用 • 120 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 127 关注
  • 音乐

    你听到信仰的声音了么?

    58 引用 • 507 回帖 • 1 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 313 关注