You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot中如何获取调用CRUD接口的外部系统用户ID?

解决SpringBoot接口获取调用方用户ID的问题

首先得明确:HTTP请求本身不会自动携带调用方的用户ID,你现在拿到自己的用户名是因为本地用Postman请求时,系统默认带上了你的本地用户凭证,外部调用方不会有这个情况。下面给你几个可行的实现方案:

方案1:让调用方主动传递用户ID

这是最直接的方式,让调用方在请求里带上用户ID,后端直接读取即可:

  • 请求头传递:让调用方在请求头中添加自定义字段(比如X-User-ID),后端通过HttpServletRequest获取:
public void handleCrud(HttpServletRequest request) {
    String userId = request.getHeader("X-User-ID");
    // 后续业务逻辑使用userId
}
  • 请求参数传递:把用户ID作为URL参数或者表单参数传递,后端用request.getParameter("userId")读取:
public void handleCrud(HttpServletRequest request) {
    String userId = request.getParameter("userId");
}
  • 请求体传递:如果是JSON格式的请求,把userId字段加入请求体,后端用@RequestBody绑定到实体类读取:
public void handleCrud(@RequestBody CrudRequest requestBody) {
    String userId = requestBody.getUserId();
}

// 对应的实体类
class CrudRequest {
    private String userId;
    // 其他字段、getter/setter
}

方案2:基于认证机制安全获取用户ID

如果你的接口需要权限控制,推荐用认证令牌的方式,既安全又能自动获取用户ID:
比如用JWT令牌,调用方请求时在Authorization头里带上Bearer {token},后端解析令牌获取用户ID:

import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.jwt.Jwt;

public void handleCrud() {
    Jwt jwt = (Jwt) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    // 从JWT的声明中取出用户ID,具体key根据你的JWT生成规则调整
    String userId = jwt.getClaim("user_id");
}

这种方式能防止调用方伪造用户ID,适合需要权限校验的场景。

关于本地测试的说明

你用Postman本地调用时拿到自己的用户名,是因为本地请求默认使用了系统的身份认证(比如Windows的NTLM),外部调用方通过IP访问时不会携带你的本地用户信息,只要按照上面的方案传递用户ID,就能正确获取到调用方的用户ID。

内容的提问来源于stack exchange,提问作者Abinayaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:13:30