-
Notifications
You must be signed in to change notification settings - Fork 38.8k
Description
The ServletServerHttpRequest getLocalAddress and getRemoteAddress methods contain additional DNS queries. The servletRequest.getLocalName() method requests a hostname from an IP address, and the InetSocketAddress constructor calls InetAddress.getByName, which requests an IP address from a hostname.
It looks like these requests can be omitted if you use servletRequest.getLocalAddr() and servletRequest.getRemoteAddr() instead of get*Name() methods.
If DNS is not properly configured on the server, then the establishment of a websocket connection hangs (for a few seconds).
Problematic stack trace:
at java.net.Inet4AddressImpl.getHostByAddr(Native Method)
at java.net.InetAddress$2.getHostByAddr(InetAddress.java:933)
at java.net.InetAddress.getHostFromNameService(InetAddress.java:618)
at java.net.InetAddress.getHostName(InetAddress.java:560)
at java.net.InetAddress.getHostName(InetAddress.java:532)
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.populateLocalName(NioEndpoint.java:1506)
at org.apache.tomcat.util.net.SocketWrapperBase.getLocalName(SocketWrapperBase.java:277)
at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:478)
at org.apache.coyote.Request.action(Request.java:517)
at org.apache.catalina.connector.Request.getLocalName(Request.java:1357)
at org.apache.catalina.connector.RequestFacade.getLocalName(RequestFacade.java:1002)
at org.springframework.http.server.ServletServerHttpRequest.getLocalAddress(ServletServerHttpRequest.java:200)
at org.springframework.web.socket.server.standard.AbstractStandardUpgradeStrategy.upgrade(AbstractStandardUpgradeStrategy.java:116)
at org.springframework.web.socket.server.support.AbstractHandshakeHandler.doHandshake(AbstractHandshakeHandler.java:297)
at org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.handleRequest(WebSocketHttpRequestHandler.java:178)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
The impression is that these addresses are not even used by Spring, but are only needed to ensure the operation of the WebSocketSession methods getLocalAddress() and getRemoteAddress(), and we don't use these methods at all.