找回密码
 立即注册
首页 业界区 安全 spring-ai 学习系列(7)-MCP 安全认证

spring-ai 学习系列(7)-MCP 安全认证

蔺堰 昨天 19:38
继续先前的MCP学习,实际企业级应用中,很多信息都是涉及商业敏感数据,需要考虑安全认证,不可能让MCP Server在网上裸奔。spring web开发中,提供了拦截器功能,最简单的思路,在Client连接到Server的sse时,拦截请求,检测http header头中,是否有必要的token信息(包括验证token是否合法)
这次,我们使用spring web mvc来创建mcp server.
一、调整pom.xml
1.gif
2.gif
  1. 1     <dependencyManagement>
  2. 2         <dependencies>
  3. 3             <dependency>
  4. 4                 <groupId>org.springframework.ai</groupId>
  5. 5                 spring-ai-bom</artifactId>
  6. 6                 
  7. 7                 <version>1.1.0-SNAPSHOT</version>
  8. 8                 <type>pom</type>
  9. 9                 <scope>import</scope>
  10. 10             </dependency>
  11. 11         </dependencies>
  12. 12     </dependencyManagement>
  13. 13
  14. 14     <dependencies>
  15. 15         <dependency>
  16. 16             <groupId>org.springframework.ai</groupId>
  17. 17             spring-ai-starter-mcp-server-webmvc</artifactId>
  18. 18         </dependency>
  19. 19     </dependencies>
  20. 20
  21. 21     <build>
  22. 22         <plugins>
  23. 23             <plugin>
  24. 24                 <groupId>org.springframework.boot</groupId>
  25. 25                 spring-boot-maven-plugin</artifactId>
  26. 26             </plugin>
  27. 27         </plugins>
  28. 28     </build>
  29. 29
  30. 30     <repositories>
  31. 31         <repository>
  32. 32             <id>spring-milestones</id>
  33. 33             <name>Spring Milestones</name>
  34. 34             <url>https://repo.spring.io/milestone</url>
  35. 35             <snapshots>
  36. 36                 <enabled>false</enabled>
  37. 37             </snapshots>
  38. 38         </repository>
  39. 39         <repository>
  40. 40             <id>spring-snapshots</id>
  41. 41             <name>Spring Snapshots</name>
  42. 42             <url>https://repo.spring.io/snapshot</url>
  43. 43             <releases>
  44. 44                 <enabled>false</enabled>
  45. 45             </releases>
  46. 46         </repository>
  47. 47         <repository>
  48. 48             <id>central-portal-snapshots</id>
  49. 49             <name>Central Portal Snapshots</name>
  50. 50             <url>https://central.sonatype.com/repository/maven-snapshots/</url>
  51. 51             <releases>
  52. 52                 <enabled>false</enabled>
  53. 53             </releases>
  54. 54             <snapshots>
  55. 55                 <enabled>true</enabled>
  56. 56             </snapshots>
  57. 57         </repository>
  58. 58     </repositories>
复制代码
View Code注:目前只有SNAPSHOT的spring-ai-starter-mcp-server-webmvc能运行正常。
二、添加1个拦截器
  1. @Component
  2. public class Interceptor implements HandlerInterceptor {
  3.     @Override
  4.    public  boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  5.         String authorization = request.getHeader("Authorization");
  6.         if (authorization == null || !authorization.startsWith("Bearer ")) {
  7.             response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
  8.             return false;
  9.         }
  10.         //模拟几个账号123456,234567,允许访问,其它拒绝
  11.         String token = authorization.substring(7);
  12.         if ("123456".equals(token) || "234567".equals(token)) {
  13.             return true;
  14.         }
  15.        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
  16.         return false;
  17.     }
  18. }
复制代码
三、注册拦截器
  1. @Configuration
  2. public class WebConfig implements WebMvcConfigurer {
  3.     @Autowired
  4.     private Interceptor interceptor;
  5.     @Override
  6.     public void addInterceptors(InterceptorRegistry registry) {
  7.         registry.addInterceptor(interceptor)
  8.                 .addPathPatterns("/sse","/mcp/messages");
  9.     }
  10. }
复制代码
 启动后,再访问http://localhost:8080/sse,会得到1个401的错误码
3.png

 在CherryStudio中设置时,必须添加正确的请求头,才能保存成功
4.png

有了正确的请求头,就能正常调用MCP Server了
5.png

参考:
Transports - Model Context Protocol
spring-ai-examples/model-context-protocol/weather/starter-webmvc-server at main · spring-projects/spring-ai-examples

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册