package ai.giskard.learnspringwebsockets; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; import java.util.Enumeration; @SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class }) public class LearnSpringWebsocketsApplication { public static void main(String[] args) { SpringApplication.run(LearnSpringWebsocketsApplication.class, args); } @Component static class RequestWrapperFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { final HttpServletRequestWrapper reqWrapper = new HttpServletRequestWrapper(request) { @Override public Enumeration getHeaders(String name) { if ("connection".equals(name) && "UPGRADE".equals(super.getHeaders(name).nextElement())) { return Collections.enumeration(Collections.singleton("Upgrade")); } return super.getHeaders(name); } @Override public String getHeader(String name) { if ("connection".equals(name) && "UPGRADE".equals(super.getHeader(name))) { return "Upgrade"; } return super.getHeader(name); } }; System.out.println("HEADERS: " + request.getServletPath()); request.getHeaderNames().asIterator().forEachRemaining(s -> { System.out.println("HEADER: " + s + " = " + request.getHeader(s) + " ---> " + reqWrapper.getHeader(s)); }); filterChain.doFilter(reqWrapper, response); } } }