![JAR search and dependency download from the Maven repository](/logo.png)
com.sap.cloud.yaas.servicesdk.springboot.apiconsole.ApiConsoleAutoConfiguration Maven / Gradle / Ivy
/*
* © 2017 SAP SE or an SAP affiliate company.
* All rights reserved.
* Please see http://www.sap.com/corporate-en/legal/copyright/index.epx for additional trademark information and
* notices.
*/
package com.sap.cloud.yaas.servicesdk.springboot.apiconsole;
import javax.servlet.Filter;
import com.sap.cloud.yaas.servicesdk.apiconsole.web.ApiConsoleRedirectFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnResource;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.DelegatingFilterProxyRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.net.URI;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* Auto Configuration class that auto-registers the functionality of api-console library of the YaaS Service SDK.
*
* It provides an endpoint to which any request pointing to the root folder will be redirected. There it will
* display Mulesoft's API Console.
*/
@Configuration
@ConditionalOnClass({
ApiConsoleRedirectFilter.class,
WebMvcConfigurerAdapter.class,
DelegatingFilterProxyRegistrationBean.class})
@ConditionalOnWebApplication
@EnableConfigurationProperties(ApiConsoleProperties.class)
public class ApiConsoleAutoConfiguration
{
private static final Logger LOG = LoggerFactory.getLogger(ApiConsoleAutoConfiguration.class);
private static final String STATIC_RESOURCES_LOCATION = "/com/sap/cloud/yaas/servicesdk/apiconsole/web/static/";
@Autowired
private ApiConsoleProperties properties;
/**
* Registers an instance of {@link ApiConsoleRedirectFilter}.
*
* @return the apiConsoleRedirectFilter
*/
@Bean
@Lazy
public Filter apiConsoleRedirectFilter()
{
final URI apiConsoleUri;
if (properties.getUri() != null)
{
apiConsoleUri = properties.getUri();
}
else
{
if (properties.getBasePath() == null)
{
throw new IllegalStateException("Property 'basePath' is missing.");
}
apiConsoleUri = URI.create(properties.getBasePath() + "index.html");
LOG.info("No uri has been configured for the API-Console."
+ " Using default uri, constructed from base-path of built-in API-Console: '" + apiConsoleUri + "'.");
}
return new ApiConsoleRedirectFilter(apiConsoleUri, properties.getRamlUri());
}
/**
* Factory method that registers an instance of the
* {@link com.sap.cloud.yaas.servicesdk.ramlrewriter.filter.RamlRewriterFilter} as a Filter for all requests.
*
* @return The ramlRewriterFilterRegistration bean.
*/
@Bean
@ConditionalOnMissingBean(name = "apiConsoleRedirectFilterRegistration")
public DelegatingFilterProxyRegistrationBean apiConsoleRedirectFilterRegistration()
{
final DelegatingFilterProxyRegistrationBean registration = new DelegatingFilterProxyRegistrationBean(
"apiConsoleRedirectFilter");
if (properties.getFilterOrder() != null)
{
registration.setOrder(properties.getFilterOrder());
}
if (properties.getRedirectPatterns() == null)
{
final List defaultRedirectPatterns = Arrays.asList(
properties.getBasePath() + "index.html",
properties.getBasePath(),
"/",
"");
LOG.info("No redirect-patterns have been configured to redirecto to the API-Console."
+ " Falling back to defaults: "
+ defaultRedirectPatterns.stream().map(StringUtils::quote).collect(Collectors.joining(", ")) + "."
+ " To disable API-Console redirects alltogether, configure an empty list of redirect-patterns.");
registration.setUrlPatterns(defaultRedirectPatterns);
}
else if (!properties.getRedirectPatterns().isEmpty())
{
registration.setUrlPatterns(properties.getRedirectPatterns());
}
return registration;
}
protected void setProperties(final ApiConsoleProperties properties)
{
this.properties = properties;
}
/**
* Adds resource handlers that will serve static API Console of the YaaS Service SDK.
*/
@Configuration
@EnableConfigurationProperties(ApiConsoleProperties.class)
@ConditionalOnResource(resources = STATIC_RESOURCES_LOCATION)
public static class ApiConsoleResourcesConfiguration extends WebMvcConfigurerAdapter
{
@Autowired
private ApiConsoleProperties properties;
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry)
{
registry
.addResourceHandler(properties.getBasePath() + "**")
.addResourceLocations("classpath:" + STATIC_RESOURCES_LOCATION);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy