如何在身份验证失败时关闭Websocket连接?

时间:2019-01-02 18:48:00

标签: spring-security spring-websocket stomp

我正在设置我的spring boot应用程序。我的应用程序存在的问题是,在春季安全认证失败后,WebSocket连接仍处于打开状态。 在此之前,我没有对用户进行身份验证,以便在非标准情况下测试应用程序。

我的配置要求CONNECT命令具有“ USER”角色。

@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
    messages
        .nullDestMatcher().hasRole("USER")
        .simpDestMatchers("/app/info").hasRole("USER")
        .simpSubscribeDestMatchers("/user/queue/info").hasRole("USER")
        .anyMessage().denyAll();
}

我希望在服务器端关闭连接,但是在客户端收到以下消息:

"<<< ERROR content-length:0 message:Failed to send message to ExecutorSubscribableChannel[clientInboundChannel]; nested exception is org.springframework.security.access.AccessDeniedException\c Access is denied content-length:0

...并且连接仍处于活动状态。

为确认连接处于活动状态,我使用了@EventListener

@EventListener
public void onDisconnectEvent(SessionDisconnectEvent event) {
    // print debug message
}

...并在客户端手动关闭连接。我能够再次看到关闭的连接堆栈跟踪:

// print debug message

+

org.springframework.messaging.MessageDeliveryException: Failed to send message to ExecutorSubscribableChannel[clientInboundChannel]; nested exception is org.springframework.security.access.AccessDeniedException: Access is denied at ...

我认为这是个问题,我不希望我的应用与数百个未经身份验证的套接字保持连接。

0 个答案:

没有答案