#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
Now, we can pass command-line arguments while using Docker. Please refer to <https://github.com/halo-dev/halo/issues/2902>.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2902
#### Special notes for your reviewer:
Steps to test:
1. Run Halo with command-line arguments:
```bash
docker run --rm -it -p6666:6666 johnniang/halo:support-command-line-args --server.port=6666
```
1. Request <http://localhost:6666>
```bash
curl -v http://localhost:6666
```
#### Does this PR introduce a user-facing change?
<!--
如果当前 Pull Request 的修改不会造成用户侧的任何变更,在 `release-note` 代码块儿中填写 `NONE`。
否则请填写用户侧能够理解的 Release Note。如果当前 Pull Request 包含破坏性更新(Break Change),
Release Note 需要以 `action required` 开头。
If no, just write "NONE" in the release-note block below.
If yes, a release note is required:
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".
-->
```release-note
支持命令行参数启动 Halo
```
#### What type of PR is this?
/kind feature
/area core
#### What this PR does / why we need it:
为主题端新增作者页面
see #2837 for more detail
#### Which issue(s) this PR fixes:
Fixes#2837
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
主题端支持作者页面
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.1.x
#### What this PR does / why we need it:
Force to add environment variables `HALO_WORK_DIR` and `SPRING_CONFIG_LOCATION` into Dockerfile. After that, we can configure `application.yaml` in working directory as we want.
Please note that we can not configure Halo working directory in `/root/.halo2/application.yaml` directly. Use environment variable `HALO_WORK_DIR` instead.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2812
#### Special notes for your reviewer:
Steps to test:
1. Prepare custom configuration
```bash
mkdir -p halo2
cat <<EOF > halo2/application.yaml
server:
port: 12345
EOF
```
2. Start up Halo using Docker
```bash
docker run -it --rm -p12345:12345 -v `pwd`/halo2:/root/.halo2 johnniang/halo:configure-halo-in-work-dir
```
3. Request http://localhost:12345
```bash
curl -v localhost:12345
```
#### Does this PR introduce a user-facing change?
```release-note
支持在工作目录添加自定义配置
```
#### What type of PR is this?
/kind bug
/area core
#### What this PR does / why we need it:
修复插件 logo 为相对路径时先启用再停后就无法加载 logo 的问题
原因是 reverse proxy reconciler 资源被删除要取消注册路由时没有确切指定名称,logo 这样的 ReverseProxy 是插件安装时初始化的这条初始化的规则要跟随插件的生命周期,只有插件卸载时才会被删除,而在此之前插件被停止时就被误取消注册了
see #2937 for more detail
#### Which issue(s) this PR fixes:
Fixes#2937
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
修复插件 logo 为相对路径时先启用再停后就无法加载 logo 的问题
```
#### What type of PR is this?
/kind bug
/area core
#### What this PR does / why we need it:
修复插件开发模式下后续增加的 fixedPluginPath 项无法被加载的问题
- 目前启动时会加载 pluginRepository 的所有 path,fixedPluginPath 被 DefaultDevelopmentPluginRepository 管理,所以在遍历 fixedPluginPath 加载时可能已经被加载过,需要判断是否被加载过,但即使被加载过也不能跳过而要继续执行创建/更新 plugin.yaml 资源的逻辑
- 创建/更新 plugin.yaml 时需要使用重试机制防止因为乐观锁冲突导致 Halo 无法启动
see #2939 for more detail
#### Which issue(s) this PR fixes:
Fixes#2939
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
修复插件开发模式下后续增加的 fixedPluginPath 项无法被加载的问题
```
#### What type of PR is this?
/kind improvement
#### What this PR does / why we need it:
将 http 请求体的最大字节数改为 10m。
Ref https://github.com/halo-dev/halo/issues/2861#issuecomment-1339526589
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2861
#### Special notes for your reviewer:
测试方式:
1. 在 Console 端新建文章,保存大量文本内容(最快方式是截图或者复制图片到编辑器,这时候因为会转为 base64,所以内容会很大)
2. 保存文章,检查是否成功。
#### Does this PR introduce a user-facing change?
```release-note
修改 HTTP 请求体最大字节数的限制,修复保存大内容文章异常的问题。
```
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
重构访问量统计逻辑
1. 去掉了访问量总数存储在 Meter Counter 中的逻辑,因为迁移时是直接像 Counter 自定义模型创建数据,而文章被访问时是存储在 Meter Counter 后定时同步到数据库,这就存在双向同步问题且都有新数据无法知道该如何合并数据。
2. 目前访问时会发送一个事件,当得到事件后会缓存在队列中,每隔一分钟将增量更新到数据库中
3. 评论统计也去掉了 Meter Counter 改为事件队列处理
4. 如果后续要暴露 Metrics 应该使用 Gauge 监控 Counter 自定义模型
5. Counter 自定义模型的查询优化后续可以使用 Indexer 或者加缓存来实现而非将 Meter Counter 当作缓存
#### Which issue(s) this PR fixes:
Fixes#2820
#### Special notes for your reviewer:
1. 测试迁移导入看文章访问量是否正确
2. 创建评论及回复观察未读回复数量、评论回复数、最新回复时间是否正确
3. 多创建一些回复然后删除评论,看是否正确删除
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
重构访问量统计逻辑,修复文章visits无法迁移的问题
```
#### What type of PR is this?
/kind bug
/area core
#### What this PR does / why we need it:
Shutdown AsyncLogWriter on VM exit.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2901
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind bug
/area core
#### What this PR does / why we need it:
修复自定义页面没有统计访问量的问题
#### Which issue(s) this PR fixes:
Fixes#2912
#### Special notes for your reviewer:
how to test it?
创建自定义页面并到主题端访问,可以看到访问量增加
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
修复自定义页面没有统计访问量的问题
```
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
在插件开发模式下加载插件失败时不抛出异常改为静默提示
#### Which issue(s) this PR fixes:
A part of #2901
#### Special notes for your reviewer:
how to test it?
1. 配置 `halo.plugin.fixed-plugin-path` 为一些不合法的插件项目路径不影响 Halo 正常启动,且有错误提示
2. 配置合法路径,插件能正确启动
#### Does this PR introduce a user-facing change?
```release-note
插件开发模式下无法被加载时改为静默提示不抛出异常
```
#### What type of PR is this?
/kind documentation
#### What this PR does / why we need it:
更新 Readme 中快速开始的命令,提供初始管理员账号和外部访问链接的环境变量设置。
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
Bump halo version to 2.1.0-SNAPSHOT for next release.
#### Which issue(s) this PR fixes:
```release-note
None
```
#### What type of PR is this?
/kind bug
/area core
#### What this PR does / why we need it:
Add forgotten label `rbac.authorization.halo.run/system-reserved` for system-reserved roles. See the screenshot below:

#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2844
#### Special notes for your reviewer:
For @halo-dev/sig-halo-console : We have to determine whether the role is system-reserved by checking if label `rbac.authorization.halo.run/system-reserved` is equal to `true`.
#### Does this PR introduce a user-facing change?
<!--
如果当前 Pull Request 的修改不会造成用户侧的任何变更,在 `release-note` 代码块儿中填写 `NONE`。
否则请填写用户侧能够理解的 Release Note。如果当前 Pull Request 包含破坏性更新(Break Change),
Release Note 需要以 `action required` 开头。
If no, just write "NONE" in the release-note block below.
If yes, a release note is required:
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".
-->
```release-note
修复每个角色都显示系统保留标签的问题
```
#### What type of PR is this?
/kind bugfix
/area core
#### What this PR does / why we need it:
修复文章列表查询时的类型转换错误
文章列表查询将 collectList 错写为 collectSortedList 导致此 `Contributor cannot be cast to class java.lang.Comparable`,
collectSortedList 会使用 `Arrays.sort(a, (Comparator) c)`,这需要目标类实现 Comparable 才行,而此处并不需要自然排序。
#### Which issue(s) this PR fixes:
Fixes#2830
#### Special notes for your reviewer:
此 bug 的复现方式为:
编辑一篇文章保存后,在使用另一个用户账户编辑此文章并发布就会出现,而使用此 PR 后问题消失,此问题只对 Contributor 这个类型有效它不是自定义模型类,而 Tag 和 Category 都是自定义模型 继承了 AbstractExtension 而它 实现了 Comparable 接口。
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
修复文章列表查询时的类型转换错误
```
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
Bump Halo version in gradle.properties for next release.
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind documentation
#### What this PR does / why we need it:
鉴于目前已不在 Release 中提供 Jar 包下载,Releases 下载数量的展示已经没有太大意思,所以去掉了 README 中的 Releases 下载数量徽章。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind documentation
#### What this PR does / why we need it:
为 Halo 2.0 正式版本更新 README。
#### Special notes for your reviewer:
/hold
等待创建 2.0 的 release。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.0.0
#### What this PR does / why we need it:
This PR provides an ability to migrate attachments from other places, like Halo 1.x or Wordpress.
We could simply configure resource mappings to support attachments migration:
```yaml
halo:
attachment:
resource-mappings:
- pathPattern: /upload/**
locations:
- upload
- migrate-from-1.x
- pathPattern: /wp-content/uploads/**
locations:
- migrate-from-wp
```
Meanwhile, I refactored LocalAttachmentUploadHandler for managing attachments from migration in the future.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2585
#### Special notes for your reviewer:
**Steps to test:**
1. Try to configure the resource mappings
2. Put some static resources into the corresponding location
3. Access it from Browser
At last, please make sure the functionalities of attachment are ok as before.
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
/kind api-change
#### What this PR does / why we need it:
将 Plugin 的 author 改为 Author 对象与主题保持一致。
移除了测试类中使用的 jar 文件,改为使用时压缩
⚠️ 此为破坏性更新,需要修改 Console 插件列表的展示,以及所有官方插件的 plugin.yaml
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
Require-user-change:将 Plugin 的 author 类型从 String 为 Author
```
#### What type of PR is this?
/kind improvement
/kind api-change
/area core
/milestone 2.0.x
#### What this PR does / why we need it:
Two things this PR does:
1. **Simplify MenuItem with targetRef instead of multi refs**
2. Organize extensions with group `content.halo.run` into content folder
> **Warning** The first thing has some break changes about structure of MenuItem, please @halo-dev/sig-halo-console be aware of that.
Before:
```java
@Schema(description = "Category reference.")
private Ref categoryRef;
@Schema(description = "Tag reference.")
private Ref tagRef;
@Schema(description = "Post reference.")
private Ref postRef;
@Schema(description = "SinglePage reference.")
private Ref singlePageRef;
```
After:
```java
@Schema(description = "Target reference. Like Category, Tag, Post or SinglePage")
private Ref targetRef;
```
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2739
#### Special notes for your reviewer:
Because this PR contains break changes, we cannot test it in console directly.
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/milestone 2.0
#### What this PR does / why we need it:
更新默认主题的安装包。 https://github.com/halo-dev/theme-earth/releases/tag/v1.0.0
#### Special notes for your reviewer:
测试方式:
1. 使用全新的环境启动此 PR。
2. 插件默认主题是否正确初始化。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
/kind api-change
#### What this PR does / why we need it:
- 暂时关闭 JWT 认证功能,`POST /api/auth/token` API 将失效。
- 移除 `halo.security.oauth2.jwt` 配置,公私钥放在 classpath 只是之前还没有 halo work dir 时的临时方案
- Disable JWT 相关的单元测试
后续会 Revert 此 PR。
#### Special notes for your reviewer:
how to test it?
1. 期望 `/api/auth/token` 失效
2. 期望 Console 登录功能没问题
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.0.x
#### What this PR does / why we need it:
This PR only do one improvement for reconciling Role. I always fetch the latest data and compare the difference between the latest and current, and then decide whether to update based on the result.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2784
#### Special notes for your reviewer:
Steps to test:
1. Restart Halo multiple times and see the log
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.0.0-rc.2
#### What this PR does / why we need it:
适配 SEO 系统设置,此功能之前遗漏
#### Which issue(s) this PR fixes:
Fixes#2797
#### Special notes for your reviewer:
how to test it?
1. seo 设置禁用搜索引擎,会在所有页面的 head 添加 `<meta name="robots" content="noindex" />`
2. seo 设置填写`关键词`和`描述`会在所有页面的 head 标签填充 `<meta name="xxx> content="xxx" />`
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
支持 SEO 全局系统设置
```
#### What type of PR is this?
/kind improvement
/kind api-change
/area core
/milestone 2.0.x
#### What this PR does / why we need it:
This PR replace refs in Attachment extension with simple name.
> **Warning** Please @halo-dev/sig-halo-console be aware of that this PR contains break changes, so that we can not use Attachment feature in the console directly. The console has to adapt the break changes.
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind bug
/area core
/milestone 2.0.0-rc.2
#### What this PR does / why we need it:
This PR mainly refactor PostEventListener into PostEventReconciler to reconcile post events synchronously. After that, the concurrent issue will be gone.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2756
Fixes https://github.com/halo-dev/halo/issues/2757
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
#### What this PR does / why we need it:
1. 增加console代理配置,默认代理到`http://localhost:3000/`。
2. 增加用户名密码初始化配置。
3. 增加win profile,指定与dev profile中不同的r2dbc url,windows环境下调试时可以使用 `dev,win` profile。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.0.0-rc.1
/kind api-change
#### What this PR does / why we need it:
- 修复 theme.yaml 之前没有配置过 settingName 会无法 reload 的问题
- 将 `/themes/{name}/reload-setting` 的 API 修改为 `/themes/{name}/reload`
#### Which issue(s) this PR fixes:
Fixes#2735
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
修复 theme.yaml 之前没有配置过 settingName 会无法 reload 的问题
```
#### What type of PR is this?
/kind bug
/kind cleanup
/area core
#### What this PR does / why we need it:
This PR fully delegates ReactiveExtensionClient for default implementation of ExtensionClient and remove old implementation, including its tests. The main reason I delegate is for keeping consistent about implementation of ExtensionClient.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2755
#### Special notes for your reviewer:
You can test full functions after starting Halo with current changes.
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind feature
/milestone 2.0.0-rc.1
/kind api-change
/area core
#### What this PR does / why we need it:
评论和回复新增 approvedTime 属性
1. 此属性在创建时如果是不需要审核就公开的则会填充当前时间
2. 目前没有审核功能,审核是 Console 端去更新的 approved 字段,因此需要更新 approved 时判断有没有设置 approvedTime 没有则填充当前时间,后续有审核功能后则再由后端处理
#### Which issue(s) this PR fixes:
Fixes#2738
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
评论和回复新增 approvedTime 属性
```
#### What type of PR is this?
/kind cleanup
/kind improvement
/area core
/milestone 2.0.0
#### What this PR does / why we need it:
This PR mainly refactors registration of reconcilers to register reconciler more convinient. After that, it is possible to reigster and start reconciler in plugin.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2305
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
see also https://github.com/pf4j/pf4j/compare/release-3.7.0...release-3.8.0
#### Which issue(s) this PR fixes:
Fixes#2771
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
升级依赖 PF4J 至 3.8.0
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.0.0-rc.2
#### What this PR does / why we need it:
See https://github.com/halo-dev/halo/issues/2767 for more.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2767
#### Does this PR introduce a user-facing change?
```release-note
升级依赖 SpringDoc OpenAPI 至 2.0.0
```
#### What type of PR is this?
/kind documentation
#### What this PR does / why we need it:
为 Halo 2.0.0-rc.1 更新 README。
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind bug
/area core
/milestone 2.0.0-rc.1
#### What this PR does / why we need it:
修复文章和自定义页面取消发布后无法再继续发布的问题
#### Special notes for yourd reviewer:
how to test it?
1. create a post and publsih it
2. unpublish it then republish
3. excepted to b published successfully
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.0.0-rc.1
#### What this PR does / why we need it:
插件以开发模式启动时加载插件需判断是否已经加载过
#### Which issue(s) this PR fixes:
Fixes#2758
#### Special notes for your reviewer:
how to test it?
1. 配置 `halo.plugin.fixed-plugin-path`
2. 以开发模式启动后重启几次不会出现 #2758 中描述的异常
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
修复插件以开发模式启动时会出现插件已经加载过的异常
```
#### What type of PR is this?
/kind feature
/area core
#### What this PR does / why we need it:
Ignore websocket protocol while proxying console. If we don't do this, console dev environment will crash with following error:
```bash
VITE v3.2.4 ready in 1672 ms
➜ Local: http://localhost:3000/console/ 16:12:21
➜ Network: http://172.23.176.1:3000/console/ 16:12:21
➜ Network: http://172.18.96.1:3000/console/ 16:12:21
➜ Network: http://192.168.31.106:3000/console/ 16:12:21
[vite-plugin-static-copy] Collected 8 items. 16:12:21
node:events:491
throw er; // Unhandled 'error' event
^
RangeError: Invalid WebSocket frame: RSV1 must be clear
at Receiver$1.getInfo (file:///C:/Users/johnn/workspaces/halo-dev/console/node_modules/.pnpm/vite@3.2.4_ajklay5k626t46b6fyghkbup3i/node_modules/vite/dist/node/chunks/dep-67e7f8ab.js:54186:14)
at Receiver$1.startLoop (file:///C:/Users/johnn/workspaces/halo-dev/console/node_modules/.pnpm/vite@3.2.4_ajklay5k626t46b6fyghkbup3i/node_modules/vite/dist/node/chunks/dep-67e7f8ab.js:54133:22)
at Receiver$1._write (file:///C:/Users/johnn/workspaces/halo-dev/console/node_modules/.pnpm/vite@3.2.4_ajklay5k626t46b6fyghkbup3i/node_modules/vite/dist/node/chunks/dep-67e7f8ab.js:54080:10)
at writeOrBuffer (node:internal/streams/writable:392:12)
at _write (node:internal/streams/writable:333:10)
at Writable.write (node:internal/streams/writable:337:10)
at Socket.socketOnData (file:///C:/Users/johnn/workspaces/halo-dev/console/node_modules/.pnpm/vite@3.2.4_ajklay5k626t46b6fyghkbup3i/node_modules/vite/dist/node/chunks/dep-67e7f8ab.js:56826:37)
at Socket.emit (node:events:513:28)
at addChunk (node:internal/streams/readable:324:12)
at readableAddChunk (node:internal/streams/readable:297:9)
at Readable.push (node:internal/streams/readable:234:10)
at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
Emitted 'error' event on WebSocket$1 instance at:
at Receiver$1.receiverOnError (file:///C:/Users/johnn/workspaces/halo-dev/console/node_modules/.pnpm/vite@3.2.4_ajklay5k626t46b6fyghkbup3i/node_modules/vite/dist/node/chunks/dep-67e7f8ab.js:56712:13)
at Receiver$1.emit (node:events:513:28)
at emitErrorNT (node:internal/streams/destroy:151:8)
at emitErrorCloseNT (node:internal/streams/destroy:116:3)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
code: 'WS_ERR_UNEXPECTED_RSV_1',
[Symbol(status-code)]: 1002
}
Node.js v18.12.1
ELIFECYCLE Command failed with exit code 1.
```
#### Special notes for your reviewer:
Steps to test:
1. Edit your application.yaml with console proxy configuration
2. Start Halo
3. Use non-Chromelike browser to request <http://localhost:8090>.
4. See the result
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind feature
/area core
/milestone 2.0.0-rc.1
#### What this PR does / why we need it:
Provide `ungrouped` query param to filter ungrouped attachments. Please note that we will ignore `group` query param when `ungropued` is `true`.
```bash
curl -X 'GET' \
'http://localhost:8090/apis/api.console.halo.run/v1alpha1/attachments?ungrouped=true' \
-H 'accept: */*'
```
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2451
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.0.0-rc.1
#### What this PR does / why we need it:
修复主题端文章列表排序不固定问题
#### Which issue(s) this PR fixes:
Fixes#2734
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
修复主题端文章列表排序不固定问题
```
#### What type of PR is this?
/kind feature
/milestone 2.0.0-rc.1
/area core
#### What this PR does / why we need it:
主题端支持使用表达式方言获取登录状态和判断权限,例如:
获取当前登录用户名
```html
<div th:text="${#authentication.name}">
The value of the "name" property of the authentication object should appear here.
</div>
```
关于判断登录状态我们并不推荐调用表达式 `${#authentication.isAuthenticated()}`,因为始终返回 `true`,使用以下几种属性表达式代替:
```html
<div sec:authorize="isAuthenticated()">
如果不是匿名用户你会看到我
</div>
<div sec:authorize="isFullyAuthenticated()">
如果不是匿名用户且不是 rememberMe 你会看到我
</div>
```
其他
```html
<div sec:authorize="isAnonymous()">
如果是匿名用户你会看到我
</div>
```
```html
<div sec:authorize="isRememberMe()">
如果是 rememberMe 你会看到我
</div>
```
更多请参考:
https://github.com/thymeleaf/thymeleaf-extras-springsecurity
Console 端判断是否登录需要改一下,目前所有未登录状态都属于一个叫 anonymousUser 的用户
#### Which issue(s) this PR fixes:
Fixes#2676
#### Special notes for your reviewer:
/cc @halo-dev/sig-halo
#### Does this PR introduce a user-facing change?
```release-note
主题端支持使用表达式方言获取登录状态和判断权限
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.0.0
#### What this PR does / why we need it:
springdoc-openapi 2.0.0-RC2 fully supports Spring Boot 3.0.0-RC2 currently, please see https://github.com/springdoc/springdoc-openapi/releases/tag/v2.0.0-RC2 for more.
#### Does this PR introduce a user-facing change?
```release-note
升级依赖 SpringDoc OpenAPI 至 2.0.0-RC2
```