Search in sources :

Example 1 with JettyWebSocketServerContainer

use of org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer in project spring-framework by spring-projects.

the class JettyRequestUpgradeStrategy method upgrade.

@Override
public void upgrade(ServerHttpRequest request, ServerHttpResponse response, @Nullable String selectedProtocol, List<WebSocketExtension> selectedExtensions, @Nullable Principal user, WebSocketHandler handler, Map<String, Object> attributes) throws HandshakeFailureException {
    Assert.isInstanceOf(ServletServerHttpRequest.class, request, "ServletServerHttpRequest required");
    HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest();
    ServletContext servletContext = servletRequest.getServletContext();
    Assert.isInstanceOf(ServletServerHttpResponse.class, response, "ServletServerHttpResponse required");
    HttpServletResponse servletResponse = ((ServletServerHttpResponse) response).getServletResponse();
    JettyWebSocketSession session = new JettyWebSocketSession(attributes, user);
    JettyWebSocketHandlerAdapter handlerAdapter = new JettyWebSocketHandlerAdapter(handler, session);
    JettyWebSocketCreator webSocketCreator = (upgradeRequest, upgradeResponse) -> {
        if (selectedProtocol != null) {
            upgradeResponse.setAcceptedSubProtocol(selectedProtocol);
        }
        return handlerAdapter;
    };
    JettyWebSocketServerContainer container = JettyWebSocketServerContainer.getContainer(servletContext);
    try {
        container.upgrade(webSocketCreator, servletRequest, servletResponse);
    } catch (UndeclaredThrowableException ex) {
        throw new HandshakeFailureException("Failed to upgrade", ex.getUndeclaredThrowable());
    } catch (Exception ex) {
        throw new HandshakeFailureException("Failed to upgrade", ex);
    }
}
Also used : WebSocketHandler(org.springframework.web.socket.WebSocketHandler) RequestUpgradeStrategy(org.springframework.web.socket.server.RequestUpgradeStrategy) HttpServletRequest(jakarta.servlet.http.HttpServletRequest) ServerHttpRequest(org.springframework.http.server.ServerHttpRequest) UndeclaredThrowableException(java.lang.reflect.UndeclaredThrowableException) ServerHttpResponse(org.springframework.http.server.ServerHttpResponse) JettyWebSocketSession(org.springframework.web.socket.adapter.jetty.JettyWebSocketSession) List(java.util.List) Principal(java.security.Principal) JettyWebSocketCreator(org.eclipse.jetty.websocket.server.JettyWebSocketCreator) ServletServerHttpResponse(org.springframework.http.server.ServletServerHttpResponse) JettyWebSocketHandlerAdapter(org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter) JettyWebSocketServerContainer(org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer) ServletServerHttpRequest(org.springframework.http.server.ServletServerHttpRequest) Map(java.util.Map) HandshakeFailureException(org.springframework.web.socket.server.HandshakeFailureException) Nullable(org.springframework.lang.Nullable) ServletContext(jakarta.servlet.ServletContext) HttpServletResponse(jakarta.servlet.http.HttpServletResponse) WebSocketExtension(org.springframework.web.socket.WebSocketExtension) Collections(java.util.Collections) Assert(org.springframework.util.Assert) ServletServerHttpRequest(org.springframework.http.server.ServletServerHttpRequest) JettyWebSocketSession(org.springframework.web.socket.adapter.jetty.JettyWebSocketSession) HttpServletResponse(jakarta.servlet.http.HttpServletResponse) ServletServerHttpResponse(org.springframework.http.server.ServletServerHttpResponse) JettyWebSocketCreator(org.eclipse.jetty.websocket.server.JettyWebSocketCreator) JettyWebSocketHandlerAdapter(org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter) UndeclaredThrowableException(java.lang.reflect.UndeclaredThrowableException) HandshakeFailureException(org.springframework.web.socket.server.HandshakeFailureException) HttpServletRequest(jakarta.servlet.http.HttpServletRequest) JettyWebSocketServerContainer(org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer) UndeclaredThrowableException(java.lang.reflect.UndeclaredThrowableException) HandshakeFailureException(org.springframework.web.socket.server.HandshakeFailureException) ServletContext(jakarta.servlet.ServletContext)

Example 2 with JettyWebSocketServerContainer

use of org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer in project spring-framework by spring-projects.

the class JettyRequestUpgradeStrategy method upgrade.

@Override
public Mono<Void> upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol, Supplier<HandshakeInfo> handshakeInfoFactory) {
    ServerHttpRequest request = exchange.getRequest();
    ServerHttpResponse response = exchange.getResponse();
    HttpServletRequest servletRequest = ServerHttpRequestDecorator.getNativeRequest(request);
    HttpServletResponse servletResponse = ServerHttpResponseDecorator.getNativeResponse(response);
    ServletContext servletContext = servletRequest.getServletContext();
    HandshakeInfo handshakeInfo = handshakeInfoFactory.get();
    DataBufferFactory factory = response.bufferFactory();
    // Trigger WebFlux preCommit actions before upgrade
    return exchange.getResponse().setComplete().then(Mono.deferContextual(contextView -> {
        JettyWebSocketHandlerAdapter adapter = new JettyWebSocketHandlerAdapter(ContextWebSocketHandler.decorate(handler, contextView), session -> new JettyWebSocketSession(session, handshakeInfo, factory));
        JettyWebSocketCreator webSocketCreator = (upgradeRequest, upgradeResponse) -> {
            if (subProtocol != null) {
                upgradeResponse.setAcceptedSubProtocol(subProtocol);
            }
            return adapter;
        };
        JettyWebSocketServerContainer container = JettyWebSocketServerContainer.getContainer(servletContext);
        try {
            container.upgrade(webSocketCreator, servletRequest, servletResponse);
        } catch (Exception ex) {
            return Mono.error(ex);
        }
        return Mono.empty();
    }));
}
Also used : JettyWebSocketHandlerAdapter(org.springframework.web.reactive.socket.adapter.JettyWebSocketHandlerAdapter) HttpServletRequest(jakarta.servlet.http.HttpServletRequest) ServerHttpResponse(org.springframework.http.server.reactive.ServerHttpResponse) HandshakeInfo(org.springframework.web.reactive.socket.HandshakeInfo) RequestUpgradeStrategy(org.springframework.web.reactive.socket.server.RequestUpgradeStrategy) Mono(reactor.core.publisher.Mono) Supplier(java.util.function.Supplier) ServerWebExchange(org.springframework.web.server.ServerWebExchange) JettyWebSocketCreator(org.eclipse.jetty.websocket.server.JettyWebSocketCreator) JettyWebSocketServerContainer(org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer) DataBufferFactory(org.springframework.core.io.buffer.DataBufferFactory) ServerHttpRequestDecorator(org.springframework.http.server.reactive.ServerHttpRequestDecorator) ServerHttpResponseDecorator(org.springframework.http.server.reactive.ServerHttpResponseDecorator) Nullable(org.springframework.lang.Nullable) WebSocketHandler(org.springframework.web.reactive.socket.WebSocketHandler) ContextWebSocketHandler(org.springframework.web.reactive.socket.adapter.ContextWebSocketHandler) ServletContext(jakarta.servlet.ServletContext) HttpServletResponse(jakarta.servlet.http.HttpServletResponse) ServerHttpRequest(org.springframework.http.server.reactive.ServerHttpRequest) JettyWebSocketSession(org.springframework.web.reactive.socket.adapter.JettyWebSocketSession) ServerHttpRequest(org.springframework.http.server.reactive.ServerHttpRequest) JettyWebSocketSession(org.springframework.web.reactive.socket.adapter.JettyWebSocketSession) HttpServletResponse(jakarta.servlet.http.HttpServletResponse) JettyWebSocketCreator(org.eclipse.jetty.websocket.server.JettyWebSocketCreator) ServerHttpResponse(org.springframework.http.server.reactive.ServerHttpResponse) JettyWebSocketHandlerAdapter(org.springframework.web.reactive.socket.adapter.JettyWebSocketHandlerAdapter) HttpServletRequest(jakarta.servlet.http.HttpServletRequest) JettyWebSocketServerContainer(org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer) ServletContext(jakarta.servlet.ServletContext) DataBufferFactory(org.springframework.core.io.buffer.DataBufferFactory) HandshakeInfo(org.springframework.web.reactive.socket.HandshakeInfo)

Aggregations

ServletContext (jakarta.servlet.ServletContext)2 HttpServletRequest (jakarta.servlet.http.HttpServletRequest)2 HttpServletResponse (jakarta.servlet.http.HttpServletResponse)2 JettyWebSocketCreator (org.eclipse.jetty.websocket.server.JettyWebSocketCreator)2 JettyWebSocketServerContainer (org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer)2 Nullable (org.springframework.lang.Nullable)2 UndeclaredThrowableException (java.lang.reflect.UndeclaredThrowableException)1 Principal (java.security.Principal)1 Collections (java.util.Collections)1 List (java.util.List)1 Map (java.util.Map)1 Supplier (java.util.function.Supplier)1 DataBufferFactory (org.springframework.core.io.buffer.DataBufferFactory)1 ServerHttpRequest (org.springframework.http.server.ServerHttpRequest)1 ServerHttpResponse (org.springframework.http.server.ServerHttpResponse)1 ServletServerHttpRequest (org.springframework.http.server.ServletServerHttpRequest)1 ServletServerHttpResponse (org.springframework.http.server.ServletServerHttpResponse)1 ServerHttpRequest (org.springframework.http.server.reactive.ServerHttpRequest)1 ServerHttpRequestDecorator (org.springframework.http.server.reactive.ServerHttpRequestDecorator)1 ServerHttpResponse (org.springframework.http.server.reactive.ServerHttpResponse)1