Spring detect if client disconnect Spring detect if client disconnect nginx nginx

Spring detect if client disconnect


I found the solutions.
I can handle it in Webflux or MVC servlet.

I.MVC Servlet can be detected (when the request was finished)

  • Client closes browser or tab
  • Client PC's shutdown
  • AJAX abortion
  • Client disconnect by switching off the WiFi
@Beanpublic Filter loggingFilter(){    AbstractRequestLoggingFilter f = new AbstractRequestLoggingFilter() {        @Override        protected void beforeRequest(HttpServletRequest request, String message) {            System.out.println("beforeRequest: " +message);        }        @Override        protected void afterRequest(HttpServletRequest request, String message) {                   // Client closes browser or tab                   // Client PC's shutdown                   // AJAX abortion                   // Client disconnect by switching off the WiFi        }    };    return f;}

For any more details

II.Webflux can be detected only

  • Client closes browser or tab
  • Client PC's shutdown
  • AJAX abortion

you use doFinally { ... } event to handle the above problems is enough.

But if you wish to handle client disconnect by switching off the WiFi.
You may need to use the WebSocket dependency.

This code may be working in Servlet not Webflux, but I am not sure, so you can try it.

Server

dependencies {    implementation 'org.springframework.boot:spring-boot-starter-websocket'}
public class GreetingHandler extends TextWebSocketHandler {    @Override    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {        super.afterConnectionClosed(session, status);        // Detected client disconnect here....    }}    @Override    public void afterConnectionEstablished(WebSocketSession session) throws Exception {        super.afterConnectionEstablished(session);        // Detected client connect here....    }    @Override    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {         session.sendMessage(message);    }
@Configuration@EnableWebSocketpublic class RawWebSocketConfiguration {    @Bean    public WebSocketConfigurer webSocketConfigurer() {        return new WebSocketConfigurer() {            @Override            public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {                registry.addHandler(new GreetingHandler(), "/greeting").setAllowedOrigins("http://localhost:7010");            }        };    }}

Client JS (http://localhost:7010)

const socket = new WebSocket("ws://localhost:7000/greeting");