Commit 2e0c9891 authored by Brian Long's avatar Brian Long
Browse files

added dynamic AuthFilter support for fowarding auth

parent b91321c6
Loading
Loading
Loading
Loading
+19 −7
Original line number Diff line number Diff line
package com.inteligr8.rs;

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.client.WebTarget;

import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
@@ -13,22 +12,35 @@ public abstract class Client {
	
	protected abstract ClientConfiguration getConfig();
	
	public javax.ws.rs.client.Client getClient() {
		ClientRequestFilter authFilter = this.getConfig().getAuthorizationFilter();
	public final javax.ws.rs.client.Client getClient() {
		return this.getClient(null);
	}
	
	public javax.ws.rs.client.Client getClient(AuthorizationFilter authFilter) {
		ClientBuilder clientBuilder = ClientBuilder.newBuilder()
				.register(new JacksonJaxbJsonProvider());

		if (authFilter == null)
			authFilter = this.getConfig().createAuthorizationFilter();
		if (authFilter != null)
			clientBuilder.register(authFilter);
		
		return clientBuilder.build();
	}

	public WebTarget getTarget() {
		return this.getClient()
	public final WebTarget getTarget() {
		return this.getTarget(null);
	}

	public WebTarget getTarget(AuthorizationFilter authFilter) {
		return this.getClient(authFilter)
				.target(this.getConfig().getBaseUrl());
	}
	
	public abstract <T> T getApi(Class<T> apiClass);
	public final <T> T getApi(Class<T> apiClass) {
		return this.getApi(null, apiClass);
	}
	
	public abstract <T> T getApi(AuthorizationFilter authFilter, Class<T> apiClass);

}
+1 −3
Original line number Diff line number Diff line
@@ -2,8 +2,6 @@ package com.inteligr8.rs;

import java.net.URI;

import javax.ws.rs.client.ClientRequestFilter;

public interface ClientConfiguration {
	
	String getBaseUrl();
@@ -28,7 +26,7 @@ public interface ClientConfiguration {
	
	String getOAuthPassword();

	default ClientRequestFilter getAuthorizationFilter() {
	default AuthorizationFilter createAuthorizationFilter() {
		if (this.getAccessToken() != null) {
			return new AccessTokenRequestFilter(this.getAccessToken());
		} else if (this.getOAuthTokenUrl() != null) {
+8 −4
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ package com.inteligr8.rs;
import java.util.LinkedList;
import java.util.List;

import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.ext.RuntimeDelegate;

import org.apache.cxf.BusFactory;
@@ -43,10 +42,15 @@ public abstract class ClientCxfImpl extends Client implements InitializingBean {
	}
	
	public WebClient getCxfClient() {
		return this.getCxfClient(null);
	}
	
	public WebClient getCxfClient(AuthorizationFilter authFilter) {
		List<Object> providersAndFilters = new LinkedList<Object>();
		providersAndFilters.add(new JacksonJaxbJsonProvider());
		
		ClientRequestFilter authFilter = this.getConfig().getAuthorizationFilter();
		if (authFilter == null)
			authFilter = this.getConfig().createAuthorizationFilter();
		if (authFilter != null)
			providersAndFilters.add(authFilter);

@@ -66,8 +70,8 @@ public abstract class ClientCxfImpl extends Client implements InitializingBean {
	}
	
	@Override
	public <T> T getApi(Class<T> apiClass) {
		return JAXRSClientFactory.fromClient(this.getCxfClient(), apiClass);
	public <T> T getApi(AuthorizationFilter authFilter, Class<T> apiClass) {
		return JAXRSClientFactory.fromClient(this.getCxfClient(authFilter), apiClass);
	}

}
+4 −4
Original line number Diff line number Diff line
@@ -36,8 +36,8 @@ public abstract class ClientJerseyImpl extends Client implements InitializingBea
	}
	
	@Override
	public javax.ws.rs.client.Client getClient() {
		javax.ws.rs.client.Client client = super.getClient();
	public javax.ws.rs.client.Client getClient(AuthorizationFilter authFilter) {
		javax.ws.rs.client.Client client = super.getClient(authFilter);
		
		if (!this.getConfig().isPutBodyRequired()) {
			// allow PUT operations without body data
@@ -48,8 +48,8 @@ public abstract class ClientJerseyImpl extends Client implements InitializingBea
	}
	
	@Override
	public <T> T getApi(Class<T> apiClass) {
		return WebResourceFactory.newResource(apiClass, this.getTarget());
	public <T> T getApi(AuthorizationFilter authFilter, Class<T> apiClass) {
		return WebResourceFactory.newResource(apiClass, this.getTarget(authFilter));
	}

}
+19 −0
Original line number Diff line number Diff line
package com.inteligr8.rs;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.core.HttpHeaders;

public class ForwardingAuthorizationFilter implements AuthorizationFilter {
	
	private final String authorizationHeaderValue;
	
	public ForwardingAuthorizationFilter(String authorizationHeaderValue) {
		this.authorizationHeaderValue = authorizationHeaderValue;
	}
	
	@Override
	public void filter(ClientRequestContext requestContext) {
		requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, this.authorizationHeaderValue);
	}

}