Skip to content

Instantly share code, notes, and snippets.

View jkuipers's full-sized avatar

Joris Kuipers jkuipers

  • Trifork
  • The Netherlands, near Amsterdam
View GitHub Profile
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PROXY_KEY;
/**
* Adds an API key in the form of a request header to proxied requests.
@jkuipers
jkuipers / InstrumentedQueueMessagingTemplate.java
Last active May 2, 2019 12:18
Spring Cloud AWS QueueMessagingTemplate subtype which adds Brave and Micrometer.io integration for sending messages
import brave.Span;
import brave.Tracer;
import brave.Tracing;
import brave.propagation.Propagation;
import brave.propagation.TraceContext;
import com.amazonaws.services.sqs.AmazonSQSAsync;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import org.springframework.cloud.aws.messaging.core.QueueMessageChannel;
import org.springframework.cloud.aws.messaging.core.QueueMessagingTemplate;
import com.netflix.loadbalancer.Server;
import com.netflix.loadbalancer.ServerList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.security.Security;
import java.util.ArrayList;
import java.util.List;
@jkuipers
jkuipers / HttpClientProperties.java
Created May 29, 2018 20:23
Type-safe configuration class for the HttpClientAutoConfiguration sample
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("http.client")
public class HttpClientProperties {
private int connectionTimeoutInMillis = 1_000;
private int readTimeoutInMillis = 10_000;
/** Used to configure both the default max per route as well as the maximum total connections. */
private int maxConnections = 200;
/**
* Configures a LoggingClientHttpRequestInterceptor and a BufferingClientHttpRequestFactory,
@jkuipers
jkuipers / HttpClientAutoConfiguration.java
Last active November 27, 2023 18:44
Spring Boot auto-configuration example for an Apache Components HTTP client and its usage in all RestTemplates created by the RestTemplateBuilder, plus trace logging support
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.client.RestTemplateCustomizer;
@jkuipers
jkuipers / ResolvedErrorAttributes.java
Created April 8, 2018 13:42
Example of custom Spring Boot ErrorAttributes which resolves ObjectErrors (incl. FieldErrors) rather than serializing them fully
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.context.MessageSource;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.context.request.WebRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@jkuipers
jkuipers / LoggingClientHttpRequestInterceptor.java
Last active November 27, 2023 18:44
RestTemplate-interceptor that logs outgoing requests and resulting responses
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.util.StreamUtils;
@jkuipers
jkuipers / CommonsHttpClientSniSupport.java
Created September 7, 2015 20:03
SNI (Server Name Identification) support for old Apache Commons HTTP Client (for use with Spring Security SAML)
import org.apache.commons.httpclient.ConnectTimeoutException;
import org.apache.commons.httpclient.params.HttpConnectionParams;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import org.apache.commons.httpclient.protocol.ReflectionSocketFactory;
import org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.security.ssl.SSLSocketImpl;
@jkuipers
jkuipers / mvc-config-fragment.xml
Created September 4, 2013 20:54
Spring XML configuration example of setting up a Spring Data DomainClassConverter
<mvc:annotation-driven conversion-service="conversionService" ignoreDefaultModelOnRedirect="true">
<mvc:argument-resolvers>
<bean class="org.springframework.data.web.PageableArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
<bean class="org.springframework.data.repository.support.DomainClassConverter">
<constructor-arg ref="conversionService"/>
</bean>
@jkuipers
jkuipers / formMacros.ftl
Last active June 21, 2022 13:43
FreeMarker macros for rendering Bootstrap horizontal form inputs in Spring-MVC applications
<#ftl strip_whitespace=true>
<#import "spring.ftl" as spring />
<#-- This file contains form-related macros for use in the other Freemarker template files.
The generated HTML is intended for use with Twitter Bootstrap based forms. -->
<#--
* radioButtons
*
* @param path the name of the field to bind to