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

SpringBoot控制器中从Authentication获取用户名(无需字符串解析)

从Spring Security的User对象中直接获取用户名/邮箱(无需字符串解析)

别折腾字符串解析啦!你看到的那个长长的返回值其实是org.springframework.security.core.userdetails.User对象的toString()输出,这个类本身就提供了直接获取用户名的方法,完全不用去拆字符串。

直接这么做就行:

  1. 先确认你的principal或者Authentication里的主体是User类型(它是UserDetails接口的实现类)
  2. 直接调用getUsername()方法,代码示例:
// 从principal获取的情况
if (principal instanceof User) {
    String username = ((User) principal).getUsername();
    // 这里就拿到了butitoy@iyotbihagay.com
}

// 从Authentication获取的情况
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth.getPrincipal() instanceof User) {
    String username = ((User) auth.getPrincipal()).getUsername();
}

为什么这方法靠谱?因为User类的toString()只是把内部属性格式化展示用的,万一后续Spring Security调整了这个字符串的格式,你的解析逻辑就崩了。而调用类本身提供的getUsername()方法,是符合面向对象规范的做法,既安全又稳定。

如果你用了自定义的UserDetails实现类也没关系,只要实现了UserDetails接口,就必然有getUsername()方法,直接调用就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:24:27