扩展点
术语:
- 扩展点
- 由 Halo 定义的用于添加特定功能的接口。
- 扩展点应该在服务的核心功能和它所认为的集成之间的交叉点上。
- 扩展点是对服务的扩充,但不是影响服务的核心功能:区别在于,如果没有其核心功能,服务就无法运行,而扩展点对于特定的配置可能至关重要该服务最终是可选的。
- 扩展点应该小且可组合,并且在相互配合使用时,可为 Halo 提供比其各部分总和更大的价值。
- 扩展
- 扩展点的一种具体实现。
使用 Halo 扩展点的必要步骤是:
- 实现扩展点接口,然后标记上
@Component
注解。 - 对该扩展点的实现类进行
ExtensionDefinition
自定义模型对象的声明。
例如: 实现一个通知器的扩展,首先 implements
ReactiveNotifier 扩展点接口:
@Component
public class EmailNotifier implements ReactiveNotifier {
@Override
public Mono<Void> notify(NotificationContext context) {
// Send notification
}
}
然后声明一个 ExtensionDefinition
自定义模型对象:
apiVersion: plugin.halo.run/v1alpha1
kind: ExtensionDefinition
metadata:
name: halo-email-notifier # 指定一个扩展定义的名称
spec:
# 扩展的全限定类名
className: run.halo.app.notification.EmailNotifier
# 所实现的扩展点定义的自定义模型对象名称
extensionPointName: reactive-notifier
# 扩展名称用于展示给用户
displayName: "EmailNotifier"
# 扩展的简要描述,用于让用户了解该扩展的作用
description: "Support sending notifications to users via email"
Note
单实例或多实例的扩展点需要声明对应的 ExtensionPointDefinition
自定义模型对象被称之为扩展点定义,用于描述该扩展点的信息,例如:扩展点的名称、描述、扩展点的类型等。
单实例或多实例扩展点的实现也必须声明一个对应的 ExtensionDefinition
自定义模型对象被称之为扩展定义,用于描述该扩展的信息,例如:扩展的名称、描述、对应扩展点的对象名称等。
关于如何在插件中声明自定义模型对象请参考:自定义模型
以下是目前已支持的扩展点列表:
📄️ Web 过滤器
为 Web 请求提供过滤器扩展点,可用于对请求进行拦截、修改等操作。
📄️ 认证安全过滤器
提供 Security WebFilter 扩展点,插件可实现自定义认证逻辑,例如:用户名密码认证,JWT 认证,匿名认证。
📄️ 附件存储
为附件存储方式提供的扩展点,可用于自定义附件存储方式。
📄️ 评论主体展示
用于在管理端评论列表中展示评论的主体内容。
📄️ 评论组件
用于自定义评论组件,可在主题端使用其他评论组件。
📄️ 通知器
为以何种方式向用户发送通知提供的扩展点。
📄️ 主题端文章内容处理
提供扩展主题端文章内容处理的方法,干预文章内容的渲染。
📄️ 主题端自定义页面内容处理
提供扩展主题端自定义页面内容处理的方法,干预自定义页面内容的渲染。