1774673562
This commit is contained in:
+25
-29
@@ -1,13 +1,37 @@
|
||||
{
|
||||
"recentFiles": [
|
||||
{
|
||||
"basename": "jinja",
|
||||
"path": "000-inbox/jinja.md"
|
||||
},
|
||||
{
|
||||
"basename": "20260328124189",
|
||||
"path": "000-Inbox/20260328124189.md"
|
||||
},
|
||||
{
|
||||
"basename": "Qwen3.5(通义千问 3.5)系列的多模态图文大模型(Vision-Language Models)",
|
||||
"path": "resource/ai/大模型安装笔记/Qwen3.5(通义千问 3.5)系列的多模态图文大模型(Vision-Language Models).md"
|
||||
},
|
||||
{
|
||||
"basename": "x-csrf-token",
|
||||
"path": "000-inbox/x-csrf-token.md"
|
||||
"path": "work/移动杭研/业务梳理/x-csrf-token.md"
|
||||
},
|
||||
{
|
||||
"basename": "需求-命中率计算",
|
||||
"path": "000-inbox/需求-命中率计算.md"
|
||||
},
|
||||
{
|
||||
"basename": "Docker 核心知识与实战笔记",
|
||||
"path": "000-inbox/Docker 核心知识与实战笔记.md"
|
||||
},
|
||||
{
|
||||
"basename": "GNU Screen 命令全解析",
|
||||
"path": "resource/系统/GNU Screen 命令全解析.md"
|
||||
},
|
||||
{
|
||||
"basename": "结构化输出和工具调用",
|
||||
"path": "resource/ai/大模型安装笔记/结构化输出和工具调用.md"
|
||||
},
|
||||
{
|
||||
"basename": "如何成为一个 React 工程师呢?",
|
||||
"path": "resource/前端/如何成为一个 React 工程师呢?.md"
|
||||
@@ -28,18 +52,6 @@
|
||||
"basename": "开发笔记",
|
||||
"path": "work/移动杭研/开发记录/7.19.0/开发笔记.md"
|
||||
},
|
||||
{
|
||||
"basename": "结构化输出和工具调用",
|
||||
"path": "000-inbox/结构化输出和工具调用.md"
|
||||
},
|
||||
{
|
||||
"basename": "jinja",
|
||||
"path": "000-inbox/jinja.md"
|
||||
},
|
||||
{
|
||||
"basename": "Qwen3.5(通义千问 3.5)系列的多模态图文大模型(Vision-Language Models)",
|
||||
"path": "resource/ai/大模型安装笔记/Qwen3.5(通义千问 3.5)系列的多模态图文大模型(Vision-Language Models).md"
|
||||
},
|
||||
{
|
||||
"basename": "IBS 智能体具体落实技术方案",
|
||||
"path": "work/移动杭研/AI 项目/IBS 智能体具体落实技术方案.md"
|
||||
@@ -84,14 +96,6 @@
|
||||
"basename": "函数调用 和 工具调用",
|
||||
"path": "resource/ai/大模型安装笔记/函数调用 和 工具调用.md"
|
||||
},
|
||||
{
|
||||
"basename": "GNU Screen 命令全解析",
|
||||
"path": "000-inbox/GNU Screen 命令全解析.md"
|
||||
},
|
||||
{
|
||||
"basename": "Docker 核心知识与实战笔记",
|
||||
"path": "000-inbox/Docker 核心知识与实战笔记.md"
|
||||
},
|
||||
{
|
||||
"basename": "ubuntu",
|
||||
"path": "resource/系统/ubuntu.md"
|
||||
@@ -191,14 +195,6 @@
|
||||
{
|
||||
"basename": "ibs-ai 项目梳理",
|
||||
"path": "work/移动杭研/AI 项目/ibs-ai 项目梳理.md"
|
||||
},
|
||||
{
|
||||
"basename": "Prompt 01 COSMIC 需求扩写",
|
||||
"path": "resource/ai/prompts/cosmic/Prompt 01 COSMIC 需求扩写.md"
|
||||
},
|
||||
{
|
||||
"basename": "Prompt 06 COSMIC 锐评",
|
||||
"path": "resource/ai/prompts/cosmic/Prompt 06 COSMIC 锐评.md"
|
||||
}
|
||||
],
|
||||
"omittedPaths": [
|
||||
|
||||
Vendored
+18
-23
@@ -4,22 +4,17 @@
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "0e5febf7350f0399",
|
||||
"id": "907e9a7a1202bddd",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "bf3ca11320d7a83e",
|
||||
"id": "b38877d81f5d7556",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "000-inbox/x-csrf-token.md",
|
||||
"mode": "source",
|
||||
"source": false,
|
||||
"backlinks": false
|
||||
},
|
||||
"type": "empty",
|
||||
"state": {},
|
||||
"icon": "lucide-file",
|
||||
"title": "x-csrf-token"
|
||||
"title": "新标签页"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -114,13 +109,12 @@
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "000-inbox/x-csrf-token.md",
|
||||
"followCursor": true,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "x-csrf-token 的大纲"
|
||||
"title": "大纲"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -217,7 +211,8 @@
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300.5
|
||||
"width": 300.5,
|
||||
"collapsed": true
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
@@ -231,34 +226,34 @@
|
||||
"obsidian-excalidraw-plugin:New drawing": false
|
||||
}
|
||||
},
|
||||
"active": "bf3ca11320d7a83e",
|
||||
"active": "c8718c0c63702202",
|
||||
"lastOpenFiles": [
|
||||
"000-inbox/jinja.md",
|
||||
"000-inbox/20260328124189.md",
|
||||
"000-Inbox/20260328124189.md",
|
||||
"resource/ai/大模型安装笔记/Qwen3.5(通义千问 3.5)系列的多模态图文大模型(Vision-Language Models).md",
|
||||
"calendar/diary/2026-03-27.md",
|
||||
"work/移动杭研/业务梳理/x-csrf-token.md",
|
||||
"calendar/diary/2026-03-26.md",
|
||||
"000-inbox/需求-命中率计算.md",
|
||||
"000-inbox/Docker 核心知识与实战笔记.md",
|
||||
"resource/系统/GNU Screen 命令全解析.md",
|
||||
"resource/ai/大模型安装笔记/结构化输出和工具调用.md",
|
||||
"resource/前端/如何成为一个 React 工程师呢?.md",
|
||||
"000-inbox/20260327101490.md",
|
||||
"000-Inbox/20260327113359.md",
|
||||
"000-Inbox/20260327151942.md",
|
||||
"000-inbox/20260327151942.md",
|
||||
"000-inbox/x-csrf-token.md",
|
||||
"000-Inbox/20260327105648.md",
|
||||
"calendar/diary/2026-03-02.md",
|
||||
"000-Inbox/20260327101490.md",
|
||||
"calendar/diary/2026-03-23.md",
|
||||
"calendar/diary/2026-03-20.md",
|
||||
"calendar/diary/2026-03-21.md",
|
||||
"calendar/diary/2026-03-26.md",
|
||||
"calendar/diary/2026-03-25.md",
|
||||
"calendar/diary/2026-03-24.md",
|
||||
"calendar/diary/2026-03-19.md",
|
||||
"calendar/diary/2026-03-18.md",
|
||||
"calendar/diary/2026-03-17.md",
|
||||
"calendar/diary/2026-03-16.md",
|
||||
"calendar/diary/2026-03-13.md",
|
||||
"calendar/diary/2026-03-12.md",
|
||||
"calendar/diary/2026-03-11.md",
|
||||
"calendar/diary/2026-03-10.md",
|
||||
"calendar/diary/2026-03-09.md",
|
||||
"attachment/image-20260325224201537.png",
|
||||
"attachment/image-20260325224152205.png",
|
||||
"attachment/image-20260325224141721.png",
|
||||
|
||||
@@ -22,3 +22,23 @@ com.cmcc.cdn.platform.selfservice.controller.StatisticsController#getHitRatio
|
||||
给我梳理下这个接口的功能,输出一个 markdown 文档到项目的根目录。
|
||||
|
||||
主要是用到哪些参数,有哪些校验,有没有参数转换和默认值。掉了哪些三方接口,调了接口后做了哪些事情。尽量清晰。注意细节。
|
||||
|
||||
---
|
||||
|
||||
com.cmcc.cdn.platform.selfservice.controller.StatisticsController#getHitRatio
|
||||
|
||||
getHitRatio接口分析.md 是我 getHitRatio 命中率接口的梳理,是在跑的业务。我现在给你安排一个艰巨的任务。
|
||||
|
||||
因为我们有一个 MCP 注册中心。我要接入进去。接入我们只需要提供标准的 http 接口就行了。所以按照这个接口做 3 个新接口出来:
|
||||
|
||||
1. 请求数
|
||||
2. 命中请求数
|
||||
3. 计算命中率(命中率 = 命中请求数 / 总请求数)的接口。
|
||||
|
||||
controller 在 ibs-portal\cdn-web\src\main\java\com\cmcc\cdn\platform 下建一个 mcp 文件夹写。
|
||||
|
||||
service 在 ibs-portal\cdn-service\src\main\java\com\cmcc\cdn\platform 下建一个 mcp 文件夹写。
|
||||
|
||||
因为是新接口代码一定要标准易读清晰,不要用原来的垃圾逻辑。
|
||||
|
||||
再帮我额外提供一个接口。可以实现比如 AI 获取 请求数 然后获取 命中请求数 。然后可以计算他们两个得出命中率的工具接口。方便我测试是调用一次计算命中率比较好,还是调用 请求数 然后调用 命中请求数 然后调用计算工具计算合适。
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# 任务
|
||||
|
||||
- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5)
|
||||
- [x] 项目:内容网络IBS系统研发项目_IBS子项目3月任务清单。(李春良 1)
|
||||
- [ ] 开发:请求命中率计算问题。
|
||||
- [x] 项目:内容网络IBS系统研发项目_IBS子项目3月任务清单。(李春良 1.5)
|
||||
- [x] 开发:MCP统计接口服务实现,请求命中率计算问题。(张鹏豪 6)
|
||||
|
||||
# 日志
|
||||
|
||||
@@ -42,3 +42,5 @@
|
||||
完成BPM对接接口规范扩展需求开发自测,具备联调条件
|
||||
|
||||
# 总结
|
||||
|
||||
早晨思考了一些关于 LLM 性能的问题,更新了 OpenClaw,下午写了两个接口,感觉最近集赞了很多东西没有消化了。
|
||||
|
||||
@@ -1,20 +1,14 @@
|
||||
`x-csrf-token` 是 Spring Security CSRF 防护机制 的一部分,用于防止跨站请求伪造(CSRF)攻击。
|
||||
`x-csrf-token` 是 Spring Security CSRF 防护机制 的一部分,用于防止跨站请求伪造(CSRF)攻击。后端接口需要通过请求头接收前端携带的 CSRF token,以验证请求的合法性。
|
||||
|
||||
后端接口需要通过请求头接收前端携带的 CSRF token,以验证请求的合法性。
|
||||
其中 IBSCsrfTokenRepository 管理 CSRF token,本质是一个 `UUID.randomUUID().toString()` 随机字符串。
|
||||
|
||||
其中 IBSCsrfTokenRepository 管理 CSRF token,是一个 `UUID.randomUUID().toString()` 随机字符串
|
||||
登录成功后,`SecurityConfig.writeLoginSuccessResult()(SecurityConfig.java:482)` 会将 token 存入 session。
|
||||
|
||||
登录成功后,SecurityConfig.writeLoginSuccessResult()(SecurityConfig.java:482)会将 token 存入 session:request.getSession().setAttribute(IBSCsrfTokenRepository.class.getName() + ".CSRF_TOKEN", token)
|
||||
|
||||
同时通过 /admin/getCurrentUser 接口返回给前端:userVO.setCsrfToken(csrfToken.getToken())
|
||||
前端获取 Token,前端有两套机制,取决于环境:
|
||||
|
||||
```
|
||||
前端获取 Token
|
||||
前端有两套机制,取决于环境:
|
||||
|
||||
生产环境(cdn-web 模板):页面通过 Thymeleaf 模板将 token 渲染到 HTML meta 标签中
|
||||
|
||||
|
||||
<meta name="_csrf" th:content="${_csrf.token}">
|
||||
<meta name="_csrf_header" th:content="${_csrf.headerName}">
|
||||
前端通过 getCsrfHeaderFromMeta() 读取这两个 meta 标签,动态设置请求头。
|
||||
@@ -22,19 +16,13 @@
|
||||
非生产环境(IBS-web):通过调用 /admin/getCurrentUser 接口获取 token 并缓存在 window.XTOKEN 中。
|
||||
```
|
||||
|
||||
后端 Filter 链验证 Token
|
||||
|
||||
RequestReplaceFilter
|
||||
后端 Filter 链验证 Token RequestReplaceFilter
|
||||
|
||||
```
|
||||
response.setHeader("Access-Control-Allow-Headers",
|
||||
"content-type,x-requested-with,Authorization, x-request-with,x-ui-request,lang,x-csrf-token,csrf-token");
|
||||
|
||||
response.setHeader("Access-Control-Allow-Headers", "content-type,x-requested-with,Authorization, x-request-with,x-ui-request,lang,x-csrf-token,csrf-token");
|
||||
```
|
||||
|
||||
```
|
||||
在 SecurityConfig.csrf() 配置中(SecurityConfig.java:211-218),以下路径不进行 CSRF 校验:
|
||||
|
||||
// CSRF
|
||||
String[] ignorePathes = {"/v1/**", "/v2/**", "/v1.0/**", "/analyzer/**", "/puppet/**", "/api/**",
|
||||
"/sso/**", "/ssoapi/**", "/dss/prohibit/**", "/dss/v1/log/subscribe/callback", "/portal/**",
|
||||
@@ -43,10 +31,10 @@ response.setHeader("Access-Control-Allow-Headers",
|
||||
"/action/js", "/content/delivery/**", "/information/**","/testAction","/api/v2/**",
|
||||
"/home/page/help/Doc/**", "/home/page/security/**", "/query/cmcc/party/**", "/query/enterprise/domain/info", "/v2.0/log/template/**"};
|
||||
http.csrf().ignoringAntMatchers(ignorePathes)
|
||||
.csrfTokenRepository(new IBSCsrfTokenRepository(Arrays.asList(ignorePathes)));//不塞在cookie中
|
||||
.csrfTokenRepository(new IBSCsrfTokenRepository(Arrays.asList(ignorePathes)));
|
||||
```
|
||||
|
||||
如果请求路径在 ignorePathes 列表中(如 /v1/**, /api/**, /action, /actionpm 等),loadToken 返回硬编码的 "1111111111",此时:
|
||||
如果请求路径在 ignorePathes 列表中(如 /v1/, /api/, /action, /actionpm 等),loadToken 返回硬编码的 "1111111111",此时:
|
||||
|
||||
请求带 X-CSRF-TOKEN: 1111111111 → 可以通过
|
||||
|
||||
Reference in New Issue
Block a user