no.nav.common.rest.filter.ConsumerIdComplianceFilter Maven / Gradle / Ivy
package no.nav.common.rest.filter;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Optional;
import static no.nav.common.log.LogFilter.CONSUMER_ID_HEADER_NAME;
@Slf4j
public class ConsumerIdComplianceFilter implements Filter {
private final boolean enforceCompliance;
public ConsumerIdComplianceFilter(boolean enforceCompliance) {
this.enforceCompliance = enforceCompliance;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
boolean isMissingConsumerId = getHeader(request, CONSUMER_ID_HEADER_NAME).isEmpty();
if (isMissingConsumerId) {
log.warn("Request is missing consumer id, enforcingCompliance={}", enforceCompliance);
if (enforceCompliance) {
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setStatus(400);
response.getWriter().write(
"Bad request: Consumer id is missing from header: " + CONSUMER_ID_HEADER_NAME +
". Make sure to set the header with the name of the requesting application."
);
response.getWriter().flush();
return;
}
}
chain.doFilter(servletRequest, servletResponse);
}
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void destroy() {}
private Optional getHeader(HttpServletRequest request, String headerName) {
return Optional.ofNullable(request.getHeader(headerName));
}
}