给 MCP Server 加上鉴权,让 Claude Code 也能安全调用求职派。
上一篇我们用 Spring AI 搭了一个 MCP Server。
加上 @Tool 注解,配好 YAML,工具就能被Agent发现并加载了。
但有一个问题没处理——MCP Server 没有加鉴权,任何 Agent 只要知道地址就能调用。

生产环境不可能这么干。
MCP Server 暴露的是真实业务能力,求职派的岗位推荐、数据采集、浏览器操作这些工具如果不加鉴权,等于把整个后端能力免费开放了。
鉴权的本质只有一件事,搞清楚“谁在调用”,然后决定让不让调。
这篇内容就从最简单的硬编码 token 讲起,再拆解到求职派的生产方案,Filter + 拦截器、Bearer token 与用户体系绑定、请求上下文跨线程传递。
01、Filter 所有请求
先看最基础的做法。
写一个 Servlet Filter,拦截 MCP 的 SSE 和消息端点,从请求头里提取 Authorization 字段做校验。
public static final String TOKEN = "my-secret-token";
String auth = request.getHeader("Authorization");
if (request.getRequestURI().equals("/sse")
|| request.getRequestURI().equals("/mcp/messages")) {
if (auth == null || !auth.equals("Bearer " + TOKEN)) {
throw new RuntimeException("认证失败");
}
}
判断请求路径是不是 MCP 端点,如果是就检查 Authorization 头,token 对了就放行,不对就拒绝。
@WebFilter 的 asyncSupported = true 必须加上,因为 MCP 的 SSE 通信是异步的,不开这个选项客户端就连不上。
MCP 客户端配置也只要多加一个 headers 字段就行。
{
"mcpServers": {
"时间MCP": {
"type": "sse",
"url": "http://localhost:8080/sse",
"headers": { "Authorization": "Bearer my-secret-token" }
}
}
}
下面是加鉴权前后的对比效果。

这个方案能用,但有三个明显的问题。

第一,token 是硬编码在代码里的,所有用户共享同一个 token,服务端没办法区分“谁在调用”。一百个 Agent 连上来,在服务端看起来都是同一个。
第二,没有用户上下文。MCP 工具执行时拿不到调用者的身份信息,岗位推荐...
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复