All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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));
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy