Skip to content

Commit

Permalink
HH-88962 Parse source and load testing headers
Browse files Browse the repository at this point in the history
  • Loading branch information
Aulust committed Mar 1, 2019
1 parent b19808d commit d3ab84b
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.glassfish.jersey.servlet.ServletContainer;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.request.RequestContextListener;
import ru.hh.nab.starter.filters.CommonHeadersFilter;
import ru.hh.nab.starter.filters.RequestIdLoggingFilter;

import javax.servlet.DispatcherType;
Expand Down Expand Up @@ -53,6 +54,8 @@ void preConfigureWebApp(WebAppContext webAppContext, WebApplicationContext rootC
webAppContext.addEventListener(new RequestContextListener());
registerFilter(webAppContext.getServletContext(), RequestIdLoggingFilter.class.getName(), RequestIdLoggingFilter.class,
Collections.emptyMap(), EnumSet.allOf(DispatcherType.class), DEFAULT_MAPPING);
registerFilter(webAppContext.getServletContext(), CommonHeadersFilter.class.getName(), CommonHeadersFilter.class,
Collections.emptyMap(), EnumSet.allOf(DispatcherType.class), DEFAULT_MAPPING);
if (rootCtx.containsBean("cacheFilter")) {
FilterHolder cacheFilter = rootCtx.getBean("cacheFilter", FilterHolder.class);
if (cacheFilter.isInstance()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package ru.hh.nab.starter.filters;

import org.springframework.web.filter.OncePerRequestFilter;
import ru.hh.nab.starter.http.RequestContext;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public final class CommonHeadersFilter extends OncePerRequestFilter {

@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {

String source = request.getHeader(RequestHeaders.REQUEST_SOURCE);
boolean isLoadTesting = request.getHeader(RequestHeaders.LOAD_TESTING) != null;

try {
RequestContext.setRequestSource(source);
RequestContext.setLoadTesting(isLoadTesting);

filterChain.doFilter(request, response);

} finally {
RequestContext.clearRequestSource();
RequestContext.clearLoadTesting();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@
public interface RequestHeaders {
String REQUEST_ID = "x-request-id";
String REQUEST_ID_DEFAULT = "NoRequestId";
String REQUEST_SOURCE = "x-source";
String LOAD_TESTING = "x-load-testing";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ru.hh.nab.starter.http;

public class RequestContext {
private static final ThreadLocal<String> REQUEST_SOURCE = new ThreadLocal<>();
private static final ThreadLocal<Boolean> LOAD_TESTING = new ThreadLocal<>();

public static String getRequestSource() {
return REQUEST_SOURCE.get();
}

public static void setRequestSource(String source) {
REQUEST_SOURCE.set(source);
}

public static void clearRequestSource() {
REQUEST_SOURCE.remove();
}

public static boolean isLoadTesting() {
return Boolean.TRUE.equals(LOAD_TESTING.get());
}

public static void setLoadTesting(boolean isLoadTesting) {
LOAD_TESTING.set(isLoadTesting);
}

public static void clearLoadTesting() {
LOAD_TESTING.remove();
}
}

0 comments on commit d3ab84b

Please sign in to comment.