升级到spring-boot-2后,SimpMessageHeaderAccessor#getUser可为空。怎么处理?

时间:2018-10-30 13:57:53

标签: java spring spring-boot spring-websocket spring-messaging

有疑问的源代码:

@Configuration
public class PresenceEventListener {    
    @EventListener
    public void handleSessionConnected(SessionConnectEvent event) {
        SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(event.getMessage());
        Principal principal = headers.getUser();
        /* custom logic with principal.getName() */
    }

    @EventListener
    public void handleSessionDisconnect(SessionDisconnectEvent event) {
        SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(event.getMessage());
        Principal principal = headers.getUser();
        /* custom logic with principal.getName() */
    }
}

在我能找到的所有示例中,这段代码或多或少都相同。 Here's one reference...

通过从spring-boot v1.5升级到v2,Findbugs抱怨.getName(),因为principal可能是null,并且未被选中。

这是因为从v5开始,spring-messaging已将方法SimpMessageHeaderAccessor#getUser标记为@Nullable

我的问题是应该如何正确处理? (即#getUser返回null时) 代码是否应该引发异常?没做什么? 在这种情况下,用户实际上是null是什么意思? 可以认为这是黑客尝试吗?

Principal principal = headers.getUser();
if (principal == null) {
    // what should happen here ?
}

谢谢!

0 个答案:

没有答案