Alguns filtros que podem ajudar durante o desenvolvimento com o Spring Boot.

Checar o tipo da conexão com relação a segurança

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 * Checa o tipo da conexão com relação a segurança.
 */
@Component
@Order(1)
public class CheckConnectionTypeFilter implements Filter {

    private static final Logger log = LoggerFactory.getLogger(CheckConnectionTypeFilter.class);

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        log.info("uri: {}", req.getRequestURI());
        log.info("Seguro (https)? {}", req.isSecure());
        log.info("schema: {}", req.getScheme());
        log.info("X-SSL-Secure: {}", req.getAttribute("X-SSL-Secure"));
        log.info("javax.servlet.http.sslsessionid: {}", req.getAttribute("javax.servlet.http.sslsessionid"));
        log.info("javax.servlet.request.key_size: {}", req.getAttribute("javax.servlet.request.key_size"));
        log.info("javax.servlet.request.X509Certificate: {}", req.getAttribute("javax.servlet.request.X509Certificate"));

        chain.doFilter(request, response);
    }

}

Interceptar eventos da Session

import java.util.concurrent.atomic.AtomicInteger;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpSessionConfig {

    private static final Logger log = LoggerFactory.getLogger(HttpSessionConfig.class);

    private static final AtomicInteger totalSessions = new AtomicInteger(0);

    // OBS: Com o uso de passivação de sessão, que faz uso da classe JdbcIndexedSessionRepository,
    // esse lister não é chamado. Motivo: a implementação do JdbcIndexedSessionRepository não
    // oferece suporte para eventos de sessão. Isso pode ser visto no JavaDoc da própria classe
    // ou nesse link do Spring:
    // https://docs.spring.io/spring-session/docs/current/reference/html5/#api-jdbcindexedsessionrepository

    /**
     * Personaliza o listener para ouvir eventos referentes a Session.
     */
    @Bean
    public HttpSessionListener httpSessionListener() {
        return new HttpSessionListener() {
            @Override
            public void sessionCreated(HttpSessionEvent hse) {
                log.info("Session adicionada: {}", hse.getSession().getId());
                log.info("Total de sessions: {}", totalSessions.incrementAndGet());
            }

            @Override
            public void sessionDestroyed(HttpSessionEvent hse) {
                log.info("Session removida: {}", hse.getSession().getId());
                log.info("Total de sessions: {}", totalSessions.incrementAndGet());
            }
        };
    }
}

Dump das requisições web

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CommonsRequestLoggingFilter;

/**
 * Configurações referentes ao log de requisições web.
 */
@Configuration
public class RequestLoggingFilterConfig {

    /**
     * Configura o log/dump das requisições web.
     * <p>É preciso ativar na configuração de log:
     * {@code logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG}</p>
     */
    @Bean
    public CommonsRequestLoggingFilter logFilter() {
        CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
        filter.setIncludeQueryString(true);
        filter.setIncludePayload(true);
        filter.setMaxPayloadLength(10000);
        filter.setIncludeHeaders(true);
        filter.setIncludeClientInfo(true);
        // filter.setBeforeMessagePrefix("REQUEST Inicio:");
        // filter.setAfterMessagePrefix("REQUEST Fim:");
        return filter;
    }

}