当前位置: 首页 > java >正文

如何给自研MCP加上安全验证

在这里插入图片描述

前言
刚过去两个月,市面的 MCP 服务,如雨后春笋一般不断涌现出来,包括;百度、高德、网盘、支付宝。这些 MCP 服务,可以让我们基于 Spring AI 框架构建的 Agent 具备非常丰富的使用功能。同时这也说明,程序员👨🏻‍💻,应该具备开发 MCP 服务的能力,Spring AI 让 Java 再次牛逼!
举例
如对接高德地图 MCP

{"mcpServers": {"amap-amap-sse": {"url": "https://mcp.amap.com/sse?key=您在高德官网上申请的key"}}
}

官网 - 官网提供了创建对接 Key
二:代码案例

@Configuration
publicclass McpConfig {@Beanpublic List<NamedClientMcpTransport> mcpClientTransport() {McpClientTransport transport = HttpClientSseClientTransport.builder("https://mcp.amap.com").sseEndpoint("/sse?key=<your_key>").objectMapper(new ObjectMapper()).build();return Collections.singletonList(new NamedClientMcpTransport("amap", transport));}}

1:对接时,需要设定 sseEndpoint 如果不设定个,Spring AI 默认是对 builder 的 baseUrl 值添加 /sse 的。

2:所以,如果你要对接外部带有验证权限的 MCP 服务,需要手动设置下 sseEndpoint 值。

项目中的配置
支持了外部的这些带有权限校验的 MCP 服务。你可以,以多种方式进行配置。如

{"baseUri":"https://mcp.amap.com","sseEndpoint":"/sse?key=****"
}
{"baseUri":"https://mcp.amap.com","sseEndpoint":"/sse?key=****"
}

以上两种配置方式,在 项目案例代码中 都做了兼容处理。以下是兼容代码,有案例项目的,可以直接阅读课程代码。

@Slf4j
@Component
publicclass AiClientToolMcpNode extends AbstractArmorySupport {// ... 省略部分代码protected McpSyncClient createMcpSyncClient(AiClientToolMcpVO aiClientToolMcpVO) {String transportType = aiClientToolMcpVO.getTransportType();switch (transportType) {case"sse" -> {AiClientToolMcpVO.TransportConfigSse transportConfigSse = aiClientToolMcpVO.getTransportConfigSse();// http://127.0.0.1:9999/sse?apikey=DElk89iu8EhhnbuString originalBaseUri = transportConfigSse.getBaseUri();String baseUri;String sseEndpoint;int queryParamStartIndex = originalBaseUri.indexOf("sse");if (queryParamStartIndex != -1) {baseUri = originalBaseUri.substring(0, queryParamStartIndex - 1);sseEndpoint = originalBaseUri.substring(queryParamStartIndex - 1);} else {baseUri = originalBaseUri;sseEndpoint = transportConfigSse.getSseEndpoint();
http://www.xdnf.cn/news/9016.html

相关文章:

  • 类的设计模式——单例、工厂以及建造者模式
  • java-单列集合list与set。
  • 前端移动端上传图片pc端如何实时获取
  • 2 的 4 次方到 10 次方
  • android安卓模拟器中访问宿主机的开发接口服务
  • Axure元件动作七:移动、旋转、启用/禁用效果、置于顶层/底层详解
  • 芋道框架 - 接口设置匿名访问
  • 鸿蒙OSUniApp 实现的短信验证码登录功能#三方框架 #Uniapp
  • Numba模块的用法(高性能计算)
  • 类和对象(2)
  • LlamaFirewall:开源框架助力检测与缓解AI核心安全风险
  • C++项目中调用C#DLL的的方式
  • 人工智能工程师学习路线总结(下)
  • pytorch 15.2 学习率调度在PyTorch中的实现方法
  • 0526漏洞原理:漏洞验证-信息收集笔记(BurpSuite Professional,fofa,BUUCTF)
  • 互联网大厂Java求职面试:AI大模型与云原生架构融合中的挑战
  • ai学习--python部分-1.变量名及命名空间的存储
  • django三级联动
  • MongoDB 快速整合 SpringBoot 示例
  • 系统架构中的限流实践:构建多层防护体系(二)
  • 文件管理(第八章、九)
  • Linux常见设备
  • EPT(Efficient Prompt Tuning)方法,旨在解决提示调优(Prompt Tuning)中效率与准确性平衡和跨任务一致性的问题
  • 基于大模型的急性腐蚀性胃炎风险预测与诊疗方案研究报告
  • 【保姆级教程】TortoiseGit安装和Visual Studio2019插件配置详细说明
  • leetcode98.验证二叉搜索树:迭代法中序遍历与栈操作的深度剖析
  • noc多核芯片设计:booksim仿真从入门到精通2Router 类型及路由算法修改
  • 28. 自动化测试开发框架拓展之邮件模块开发
  • Google 发布AI 编程工具Jules
  • Kaggle-Predict Calorie Expenditure-(回归+xgb+cat+lgb+模型融合)