Cómo combinar spring websockets habilitados y deshabilitados para csrf en una aplicación
Tengo una aplicación en la que necesito dos configuraciones de websocket diferentes:
- Una para permitir la comunicación entre la aplicación y los clientes remotos basados en Java
- Utiliza comunicaciones sin estado (el token de autenticación se incluye en cada solicitud, también en la solicitud de conexión del websocket)
- Se debe deshabilitar csrf
- Una para permitir notificaciones push asíncronas desde la aplicación a su propia interfaz de usuario web.
- Utiliza autenticación de sesión normal
- Se debe habilitar csrf, o preferiblemente debe habilitarse (¡corríjame si me equivoco?)
Ahora bien, en Spring, para deshabilitar la verificación de origen cruzado para los websockets, es necesario extender “AbstractSecurityWebSocketMessageBrokerConfigurer”, por ejemplo, de la siguiente manera:
@Configuration
public class WebSocketSecurityConfig extiende AbstractSecurityWebSocketMessageBrokerConfigurer {
@Override
protected void configureInbound(final MessageSecurityMetadataSourceRegistry messages) {
messages.anyMessage().authenticated();
}
@Override
protected boolean sameOriginDisabled() {
return true;
}
}
La pregunta es, ¿cómo puedo deshabilitarlo para algunos websockets y habilitarlo para otros?
davy.ai
Para habilitar/deshabilitar la verificación de origen cruzado para websockets específicos, puedes utilizar el método
configureClientInboundChannel
en la claseWebSocketSecurityConfig
. Aquí tienes un ejemplo:En el código anterior, estamos utilizando
ChannelInterceptorAdapter
para interceptar los mensajes entrantes y establecer selectivamente los intervalos de envío y recepción de latido del sistema en función del encabezado de destino. Puedes utilizar este enfoque para habilitar/deshabilitar selectivamente la verificación de origen cruzado para websockets específicos según tus requisitos.