Halo 是一款强大易用的开源建站工具,它让你无需太多的技术知识就可以快速搭建一个博客、网站或者内容管理系统。具备可插拔架构、主题套用、富文本编辑器等多重特性,支持用户根据自己的喜好选择不同类型的插件及主题模板来定制化自己的站点功能及外观。让内容创作和发布更加便捷生动。
截至目前(2024 年 Q3 季度),Halo 已经在 Docker Hub 获得了超过 240 万次下载,GitHub Star 数突破 33 k,并拥有一百多名社区贡献者。
2024 年 10 月 14 日,强大易用的开源建站工具 Halo 正式发布 2.20 LTS 版本。
Halo 2.20 包含多项功能更新和问题修复,标志着首个 LTS(长期支持) 版本的诞生。
⚠️ 重要提示
此版本重构了登录相关的页面,登录入口从
/console/login
改为了/login
。在重构登录页面的过程中,也改动了登录授权相关的逻辑和 API,请在升级之后进行以下操作:
升级所有登录认证相关的插件。
重新在 用户 -> 身份认证 页面启用和排序三方认证方式。
系统设置 -> 用户 -> 短信验证码 选项已废弃,需要升级之后去 用户 -> 身份认证 重新开启。(专业版)
系统设置 -> 用户 -> 默认登录方式 选项已废弃,需要升级之后去 用户 -> 身份认证 中管理,拖动所需登录方式为第一个即可。(专业版)
角色的 登录之后默认跳转位置 设置选项在此版本已移除,建议使用
/login?redirect_uri=
代替。出于安全考虑,此版本在生产环境下默认禁用了 Basic Auth 的认证方式,如有需要可以通过添加
halo.security.basic-auth.disabled=false
启动参数来启用。
亮点更新
重构登录/注册相关页面
在介绍新的登录页面之前,我们要先说明一下为什么要进行重构,在之前的版本中,和登录相关的功能存在以下问题:
之前的版本中,登录注册相关的逻辑完全由 Console 处理,Console 需要处理各种异常情况和重定向,这会导致 Console 的逻辑过重,且影响整个 Console 页面加载性能。
各种重定向在 Console 端难以处理且本身在后端有类似的处理逻辑。
登录页面加载缓慢,因为依赖于 Console 项目,所以会加载部分使用不上的资源。
登录和注册页面现阶段无法扩展,因为登录页面不会加载插件资源(可能会有隐性的安全问题,如果攻击方可以识别到有哪些插件,可以定向利用插件的漏洞),如果交给后端渲染登录页面则可以避免此问题。
目前管理端不止 Console,还有 UC(个人中心),如果能提供一个统一的登录页面(/login)可能会更好(避免歧义)。
主题无法为登录等页面自定义样式,满足不了部分自定义的场景。
基于以上问题,我们在 2.20 版本中彻底重构了登录/注册等页面,现在完全由后端渲染页面和路由。以下是重构之后带来的一些改进:
统一使用
/login
页面,更加直观。提升页面加载性能,降低至少 30 倍的资源体积。
提升页面的交互逻辑。
插件扩展登录方式的方式更加合理。
支持通过主题或者插件提供渲染模板,支持主题继承登录相关的模块。
加载速度对比
2.19
2.20
部分界面预览
登录
注册
两步验证
退出登录
主题继承登录模块
主题自定义样式
个人中心内容管理优化
在 Halo 2.20 中,我们在个人中心中支持了上传和访问自己的附件以及删除自己创建的文章,可以更好地适应多人管理网站的需求。
支持上传和访问自己的附件
支持删除文章
完整更新日志
新特性
重构登录、注册相关的页面。 by @JohnNiang in #6488
登录、注册相关页面改为由后端渲染页面,提供统一的访问入口。
提升页面加载性能。
优化登录、注册相关页面的交互逻辑。
登录、注册等页面支持通过主题或者插件提供。
破坏性更新
功能优化
备份时排除全文索引目录 indices,防止恢复之后因为索引文件问题无法启动。 by @ruibaby in #6753
支持自动绑定 OAuth2 登录用户。 by @JohnNiang in #6702
允许通过
halo.security.basic-auth.disabled=true
配置来禁用 Basic Auth 认证,在 2.20 版本生产环境下默认禁用了 Basic Auth。 by @guqing in #6689修复 external-url 配置带了尾部斜杠导致邮件通知的查看通知链接无法访问的问题。 by @guqing in #6660
支持利用参数 language 切换地域语言。 by @JohnNiang in #6658
解决重启后可能无法更新附件链接的问题。 by @JohnNiang in #6641
优化根据 URI 生成缩略图时的请求头,修复可能因为无法访问原图导致无法正常生成的问题。 by @guqing in #6628
优化模板渲染时所需的内存。 by @JohnNiang in #6580
优化在内存紧张时 Console 端无法加载插件资源的问题。 by @JohnNiang in #6573
问题修复
修复未登录情况下依然能够访问登出页面的问题。 by @JohnNiang in #6812
修复主题端区域和语言解析错误的问题。 by @JohnNiang in #6647
解决当 FormKit Select 组件中的 options 延迟设置时无法正常回显的问题。 by @LIlGG in #6629
修复取消用户角色后无法正常渲染用户列表的问题。 by @JohnNiang in #6612
解决 FormKit Select 组件在值变更时不会发出事件及修改选项值的问题。 by @LIlGG in #6602
修复重启后无法搜索部分文档的问题。 by @JohnNiang in #6570
修复可配置无效的外部访问地址的问题。 by @JohnNiang in #6840
开发者相关
支持在插件中操作渲染结果。 by @JohnNiang in #6670
为主题端切换地区语言提供支持。 by @JohnNiang in #6657
支持在主题中通过 Thymeleaf 默认行为实现国际化。 by @JohnNiang in #6648
允许在插件使用 CryptoService 和 RateLimiterRegistry。 by @JohnNiang in #6638
依赖更新
升级依赖 jsoup 至 1.18.1。 by @JohnNiang in #6765
升级依赖 Lucene 至 9.12.0。 by @JohnNiang in #6763
升级依赖 Guava 至 33.3.1-jre。 by @JohnNiang in #6762
升级至 Gradle 8.10.2。 by @JohnNiang in #6755
升级 Spring Boot 至 3.4.0-M3。 by @JohnNiang in #6687