Java 主体获取用户ID

Java 主体获取用户ID,java,spring-websocket,Java,Spring Websocket,我无法获取除用户名以外的其他用户,但该名称不是id或完整用户唯一需要的名称 我有 有一个方法getUser()getName,但名称不是唯一的, 方法event.getUser()给出了一些可怕的结果-- 有没有办法从那里获取用户或id 如果我尝试User User=event.getUser()或((User)event.getUser()).getId() 我明白了 我只找到了一种获取用户的方法 由于“event.getUser()”我们得到了“Principal”=> 只有一个方法“get

我无法获取除用户名以外的其他用户,但该名称不是id或完整用户唯一需要的名称 我有

有一个方法getUser()getName,但名称不是唯一的, 方法event.getUser()给出了一些可怕的结果--

有没有办法从那里获取用户或id

如果我尝试User User=event.getUser()或((User)event.getUser()).getId() 我明白了


我只找到了一种获取用户的方法 由于“event.getUser()”我们得到了“Principal”=>

只有一个方法“getName”,但它不适合我们,因为我们的名称不是唯一的,不可能将“Principal”转换为“User”,我们使用与字符串一起工作)


不是很优雅,但可以正常工作)

event.getUser().getPrincipal()
((MyUserClass)event.getUser()).getId()((用户)event.getUser()).getId())java.lang.ClassCastException:org.springframework.security.authentication.UsernamePasswordAuthenticationToken无法强制转换为com.newcode.meeting.domain.User
((用户)event.getUser().getPrincipal()).getId()错误。getPrincipal()--“找不到要转到的声明”Principal pr=event.getUser()这是当前正在打印的UsernamePasswordAuthenticationToken上toString()方法的实现。所以我相信你能解决这个问题:
StringBuilder sb=newstringbuilder();sb.append(super.toString()).append(“:”);sb.append(“主体:”).append(this.getPrincipal()).append(;”);某人追加(“凭证:[受保护];”);sb.append(“已验证:”).append(this.isAuthenticated()).append(;”);sb.append(“细节:”).append(this.getDetails()).append(;”)
@Component
public class WebSocketEventListener {
    private static final Logger logger = 
    LoggerFactory.getLogger(WebSocketEventListener.class);

    @EventListener
    public void handleWebSocketConnectListener(SessionConnectedEvent event) {
        logger.info("Received a new web socket connection");

        System.out.println("User connection : " + event.getUser());
    }
}
User connection : 
org.springframework.security.authentication.UsernamePasswordAuthenticationToken@fe260c00: Principal: 
User(id=1, username=admin, password=$2a$08$VDogbqVQY23gNnLFty/6ReGLecW/bk3oCkUHrsly4HgjBIGRNBSEC, 
email=kiy9@gmail.com); Credentials: [PROTECTED]; Authenticated: true; Details: 
org.springframework.security.web.authentication.WebAuthenticationDetails@0: RemoteIpAddress: 
0:0:0:0:0:0:0:1; SessionId: 3566D00689DCC01041367983F3132937; Granted Authorities: USER
 java.lang.ClassCastException:
 org.springframework.security.authentication.
 UsernamePasswordAuthenticationToken 
 cannot be cast to com.newcode.meeting.domain.User
  User connection : 
  org.springframework.security.authentication.Usernam 
  ePasswordAuthenticationToken@fe260c00: Principal: 
  User(id=1, username=admin, 
  password=$2a$08$VDogbqVQY23gNnLFty/6ReGLecW/bk3oCkUHrsly4HgjBIGRNBSEC, 
  email=kiy9@gmail.com); Credentials: [PROTECTED]; Authenticated: true; Details: 
  org.springframework.security.web.authentication.WebAuthenticationDetails@0: 
  RemoteIpAddress: 
  0:0:0:0:0:0:0:1; SessionId: 3566D00689DCC01041367983F3132937; Granted Authorities: USER
@EventListener
public void handleWebSocketConnectListener(SessionConnectedEvent event) {
    logger.info("Received a new web socket connection:=> "event.getUser().getName());
    User user = userRepo.findUserById(getUserId(event.getUser()));
   // code
}
private Long getUserId(Principal principal) {
    String userString = principal.toString();
    int startIndex = userString.indexOf("id=");
    int endIndex = userString.indexOf(",", startIndex);
    return Long.valueOf(userString.substring(startIndex + 3, endIndex));
}