java - 委托(delegate)人获取用户ID

标签 java spring-websocket

我无法获取除姓名以外的用户,但该姓名并非 id 或完整用户唯一需要的 我有

@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());
    }
}

有一个方法 getUser() getName 但名称不唯一, 方法 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

有什么方法可以从那里获取用户或 id 吗?

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

 java.lang.ClassCastException:
 org.springframework.security.authentication.
 UsernamePasswordAuthenticationToken 
 cannot be cast to com.newcode.meeting.domain.User

最佳答案

我发现只有一种方法来获取用户 由于“event.getUser ()”我们得到“Principal”=>

  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

只有一种方法“getName”,但它不适合我们,因为我们的名称不是唯一的,并且将“Principal”转变为“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));
}

不太优雅但有效))

关于java - 委托(delegate)人获取用户ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59214549/

相关文章:

python - SockJS Python 客户端

java - 如何将convertAndSendToUser()与外部代理(例如Spring4中的RabbitMQ)一起使用?

java - 如何提高使用 Xuggler 制作的视频的质量

java: 是否可以为按钮数组设置 lambda 表达式作为 for 循环?如果是这样怎么办?

java - 我无法使用 IEDriver 在 IE11 Windows 10 中找到 xpath

amazon-ec2 - 负载平衡 websockets - AWS 弹性负载平衡器

java - JPanel 没有显示在我的 JFrame 中

Java process.getInputStream() 没有什么可读的,死锁 child

java - 使用 Spring websocket 时无事务