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

Jersey的ContainerRequestContext在Spring中的等价物及SecurityContext获取

Spring MVC中获取SecurityContext的等价方案

当然有啦!在Spring MVC里,你完全可以实现和Jersey中ContainerRequestContext.getSecurityContext()一样的效果,而且方式还挺灵活的,给你整理几个常用的方法:

  • 直接注入SecurityContext到控制器方法参数
    这是最直观的方式,Spring会自动把当前请求对应的安全上下文注入到方法参数中,用法和Jersey里的调用逻辑几乎一致:
@GetMapping("/demo")
public String getDemoInfo(SecurityContext securityContext) {
    Authentication currentAuth = securityContext.getAuthentication();
    // 这里就可以获取当前用户的认证信息、权限等内容了
    return "demo-response";
}
  • 使用SecurityContextHolder静态工具类
    如果不想在方法参数里注入,也可以用Spring Security提供的全局静态工具类,随时随地获取当前线程绑定的SecurityContext:
@GetMapping("/demo")
public String getDemoInfo() {
    SecurityContext securityContext = SecurityContextHolder.getContext();
    Authentication currentAuth = securityContext.getAuthentication();
    // 同样能拿到你需要的安全信息
    return "demo-response";
}

注意:在Web请求场景下,Spring已经帮你处理好了线程绑定的逻辑,不用担心线程安全问题。

  • 通过HttpServletRequest间接获取
    SecurityContext会被绑定到当前请求的属性中,所以也可以通过HttpServletRequest来获取,不过这种方式相对繁琐一些,一般更推荐前两种:
@GetMapping("/demo")
public String getDemoInfo(HttpServletRequest request) {
    SecurityContext securityContext = (SecurityContext) request.getAttribute("SPRING_SECURITY_CONTEXT");
    Authentication currentAuth = securityContext.getAuthentication();
    return "demo-response";
}

简单总结下:Spring MVC里没有和Jersey的ContainerRequestContext完全一一对应的组件,但获取SecurityContext的方式更灵活,上面几种方案都能满足你的需求,本质都是获取当前请求的安全上下文信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:17:14