--- /dev/null
+package org.onap.ccsdk.apps.ms.sliboot;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Properties;
+
+import org.onap.aaf.cadi.filter.CadiFilter;
+import org.onap.ccsdk.sli.core.utils.common.EnvProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+
+@Configuration
+@ConditionalOnProperty("cadi.properties.path")
+public class FilterConfiguration {
+    private static final Logger log = LoggerFactory.getLogger(FilterConfiguration.class);
+
+       @Value( "${cadi.properties.path:none}" )
+       private String cadiPropFile;
+
+       @Bean
+       @Order(1)
+       public FilterRegistrationBean<CadiFilter> cadiFilter() {
+               CadiFilter filter = new CadiFilter();
+               
+               FilterRegistrationBean<CadiFilter> registrationBean = new FilterRegistrationBean<>();
+               registrationBean.setFilter(filter);
+               if ("none".equals(cadiPropFile)) {
+            log.info("cadi.properties.path undefined, AAF CADI disabled");
+                       registrationBean.setEnabled(false);
+                       registrationBean.addUrlPatterns("/xxxx/*");
+               } else {
+                       // Note: assume that cadi.properties.path specifies full path to properties file
+                       File cadiFile = new File(cadiPropFile);
+                       if (!cadiFile.exists()) {
+                               log.info("cadi properties file {} not found, AAF CADI disabled", cadiPropFile);
+                               registrationBean.setEnabled(false);
+                               registrationBean.addUrlPatterns("/xxxx/*");
+                       } else {
+                               Properties cadiProperties = new EnvProperties();
+                               try {
+                                       cadiProperties.load(new FileReader(cadiFile));
+                                       cadiProperties.forEach((k, v) -> {
+                                               registrationBean.addInitParameter((String) k, cadiProperties.getProperty((String) k));
+                                       });
+                                       registrationBean.addUrlPatterns("/*");
+                                       log.info("Installed and configured CADI filter");
+                               } catch (IOException e) {
+                                       log.info("Caught exception loading cadi properties file {}, AAF CADI disabled", cadiPropFile, e);
+                                       registrationBean.setEnabled(false);
+                                       registrationBean.addUrlPatterns("/xxxx/*");
+                               }
+                       }
+
+               }
+
+               return registrationBean;
+       }
+
+}
 
 \r
 package org.onap.ccsdk.apps.services;\r
 \r
+import java.io.File;\r
 import java.io.FileInputStream;\r
+import java.io.FileReader;\r
 import java.io.IOException;\r
+import java.io.InputStream;\r
 import java.util.List;\r
 import java.util.Properties;\r
 \r
 import org.onap.ccsdk.sli.core.dblib.DBResourceManager;\r
 import org.onap.ccsdk.sli.core.dblib.DbLibService;\r
 import org.onap.ccsdk.sli.core.sli.ConfigurationException;\r
+import org.onap.ccsdk.sli.core.sli.SvcLogicAdaptor;\r
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;\r
 import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;\r
 import org.onap.ccsdk.sli.core.sli.SvcLogicLoader;\r
 import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder;\r
 @Configuration\r
 @Service\r
 public class SvcLogicFactory {\r
-  private static final Logger log = LoggerFactory.getLogger(SvcLogicFactory.class);\r
-\r
-  @Autowired\r
-  List<SvcLogicRecorder> recorders;\r
-\r
-  @Autowired\r
-  List<SvcLogicJavaPlugin> plugins;\r
-\r
-  @Autowired\r
-  List<SvcLogicResource> svcLogicResources;\r
+    private static final Logger log = LoggerFactory.getLogger(SvcLogicFactory.class);\r
+    private static final String SDNC_CONFIG_DIR = "SDNC_CONFIG_DIR";\r
+    private static final String CONTRAIL_PROPERTIES = "contrail-adaptor.properties";\r
+\r
+    @Autowired\r
+    List<SvcLogicRecorder> recorders;\r
+\r
+    @Autowired\r
+    List<SvcLogicJavaPlugin> plugins;\r
+\r
+    @Autowired\r
+    List<SvcLogicResource> svcLogicResources;\r
+\r
+\r
+    @Bean\r
+    public SvcLogicStore getStore() throws Exception {\r
+        SvcLogicPropertiesProvider propProvider = new SvcLogicPropertiesProvider() {\r
+\r
+            @Override\r
+            public Properties getProperties() {\r
+                Properties props = new Properties();\r
+\r
+                String propPath = System.getProperty("serviceLogicProperties", "");\r
+\r
+                if ("".equals(propPath)) {\r
+                    propPath = System.getenv("SVCLOGIC_PROPERTIES");\r
+                }\r
+\r
+                if ((propPath == null) || propPath.length() == 0) {\r
+                    propPath = "src/main/resources/svclogic.properties";\r
+                }\r
+                System.out.println(propPath);\r
+                try (FileInputStream fileInputStream = new FileInputStream(propPath)) {\r
+                    props = new EnvProperties();\r
+                    props.load(fileInputStream);\r
+                } catch (final IOException e) {\r
+                    log.error("Failed to load properties for file: {}", propPath,\r
+                            new ConfigurationException("Failed to load properties for file: " + propPath, e));\r
+                }\r
+                return props;\r
+            }\r
+        };\r
+        SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(propProvider.getProperties());\r
+        return store;\r
+    }\r
 \r
-  @Bean\r
-  public SvcLogicStore getStore() throws Exception {\r
-    SvcLogicPropertiesProvider propProvider = new SvcLogicPropertiesProvider() {\r
+    @Bean\r
+    public SvcLogicLoader createLoader() throws Exception {\r
+        String serviceLogicDirectory = System.getProperty("serviceLogicDirectory");\r
+        if (serviceLogicDirectory == null) {\r
+            serviceLogicDirectory = "src/main/resources";\r
+        }\r
 \r
-      @Override\r
-      public Properties getProperties() {\r
-        Properties props = new Properties();\r
+        System.out.println("serviceLogicDirectory is " + serviceLogicDirectory);\r
+        SvcLogicLoader loader = new SvcLogicLoader(serviceLogicDirectory, getStore());\r
 \r
+        try {\r
+            loader.loadAndActivate();\r
+        } catch (IOException e) {\r
+            log.error("Cannot load directed graphs", e);\r
+        }\r
+        return loader;\r
+    }\r
 \r
-        String propPath = System.getProperty("serviceLogicProperties", "");\r
+    @Bean\r
+    public SvcLogicServiceBase createService() throws Exception {\r
+        HashMapResolver resolver = new HashMapResolver();\r
+        for (SvcLogicRecorder recorder : recorders) {\r
+            log.info("Registering SvcLogicRecorder {}", recorder.getClass().getName());\r
+            resolver.addSvcLogicRecorder(recorder.getClass().getName(), recorder);\r
 \r
-        if ("".equals(propPath)) {\r
-          propPath = System.getenv("SVCLOGIC_PROPERTIES");\r
         }\r
 \r
+        for (SvcLogicJavaPlugin plugin : plugins) {\r
+            log.info("Registering SvcLogicJavaPlugin {}", plugin.getClass().getName());\r
+            resolver.addSvcLogicSvcLogicJavaPlugin(plugin.getClass().getName(), plugin);\r
 \r
-        if ((propPath == null) || propPath.length() == 0) {\r
-          propPath = "src/main/resources/svclogic.properties";\r
         }\r
-        System.out.println(propPath);\r
-        try (FileInputStream fileInputStream = new FileInputStream(propPath)) {\r
-          props = new EnvProperties();\r
-          props.load(fileInputStream);\r
-        } catch (final IOException e) {\r
-          log.error("Failed to load properties for file: {}", propPath,\r
-              new ConfigurationException("Failed to load properties for file: " + propPath, e));\r
+        for (SvcLogicResource svcLogicResource : svcLogicResources) {\r
+            log.info("Registering SvcLogicResource {}", svcLogicResource.getClass().getName());\r
+            resolver.addSvcLogicResource(svcLogicResource.getClass().getName(), svcLogicResource);\r
         }\r
-        return props;\r
-      }\r
-    };\r
-    SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(propProvider.getProperties());\r
-    return store;\r
-  }\r
-\r
-  @Bean\r
-  public SvcLogicLoader createLoader() throws Exception {\r
-    String serviceLogicDirectory = System.getProperty("serviceLogicDirectory");\r
-    if (serviceLogicDirectory == null) {\r
-      serviceLogicDirectory = "src/main/resources";\r
+\r
+        return new SvcLogicServiceImplBase(getStore(), resolver);\r
     }\r
 \r
-    System.out.println("serviceLogicDirectory is " + serviceLogicDirectory);\r
-    SvcLogicLoader loader = new SvcLogicLoader(serviceLogicDirectory, getStore());\r
+    @Bean\r
+    public Slf4jRecorder slf4jRecorderNode() {\r
+        return new Slf4jRecorder();\r
+    }\r
 \r
-    try {\r
-      loader.loadAndActivate();\r
-    } catch (IOException e) {\r
-      log.error("Cannot load directed graphs", e);\r
+    // Beans from sli/core\r
+\r
+    @Bean\r
+    public SliPluginUtils sliPluginUtil() {\r
+        return new SliPluginUtils();\r
     }\r
-    return loader;\r
-  }\r
 \r
-  @Bean\r
-  public SvcLogicServiceBase createService() throws Exception {\r
-    HashMapResolver resolver = new HashMapResolver();\r
-    for (SvcLogicRecorder recorder : recorders) {\r
-      resolver.addSvcLogicRecorder(recorder.getClass().getName(), recorder);\r
+    @Bean\r
+    public SliStringUtils sliStringUtils() {\r
+        return new SliStringUtils();\r
+    }\r
 \r
+    // Beans from sli/adaptors\r
+\r
+    @Bean\r
+    AAIService aaiService() {\r
+        return new AAIService(new AAIServiceProvider());\r
+    }\r
+\r
+    @Bean\r
+    public ConfigResource configResource() {\r
+        return new ConfigResource(new MdsalResourcePropertiesProviderImpl());\r
+    }\r
+\r
+    @Bean\r
+    public OperationalResource operationalResource() {\r
+        return new OperationalResource(new MdsalResourcePropertiesProviderImpl());\r
     }\r
-    for (SvcLogicJavaPlugin plugin : plugins) {\r
-      resolver.addSvcLogicSvcLogicJavaPlugin(plugin.getClass().getName(), plugin);\r
 \r
+    @Bean\r
+    public PublisherApi publisherApi() {\r
+        return new PublisherApiImpl();\r
     }\r
-    for (SvcLogicResource svcLogicResource : svcLogicResources) {\r
-      resolver.addSvcLogicResource(svcLogicResource.getClass().getName(), svcLogicResource);\r
+\r
+    @Bean\r
+    public NetboxClient netboxClient() {\r
+        return new NetboxClientImpl();\r
     }\r
 \r
-    return new SvcLogicServiceImplBase(getStore(), resolver);\r
-  }\r
-\r
-  @Bean\r
-  public Slf4jRecorder slf4jRecorderNode() {\r
-    return new Slf4jRecorder();\r
-  }\r
-\r
-  // Beans from sli/core\r
-\r
-  @Bean\r
-  public SliPluginUtils sliPluginUtil() {\r
-    return new SliPluginUtils();\r
-  }\r
-\r
-  @Bean\r
-  public SliStringUtils sliStringUtils() {\r
-    return new SliStringUtils();\r
-  }\r
-\r
-  // Beans from sli/adaptors\r
-\r
-  @Bean AAIService aaiService() {\r
-    return new AAIService(new AAIServiceProvider());\r
-  }\r
-  \r
-  @Bean\r
-  public ConfigResource configResource() {\r
-    return new ConfigResource(new MdsalResourcePropertiesProviderImpl());\r
-  }\r
-\r
-  @Bean\r
-  public OperationalResource operationalResource() {\r
-    return new OperationalResource(new MdsalResourcePropertiesProviderImpl());\r
-  }\r
-\r
-  @Bean \r
-  public PublisherApi publisherApi() {\r
-    return new PublisherApiImpl();\r
-  }\r
-  \r
-  \r
-  @Bean \r
-  public NetboxClient netboxClient() {\r
-    return new NetboxClientImpl();\r
-  }\r
-  \r
-  \r
-  @Bean\r
-  public SqlResource sqlResource() {\r
-    return new SqlResource();\r
-  }\r
-\r
-  \r
-  @Bean\r
-  public RestapiCallNode restapiCallNode() {\r
-      return new RestapiCallNode();\r
-  }\r
-  \r
-  @Bean\r
-  public PropertiesNode propertiesNode() {\r
-      return new PropertiesNode();\r
-  }\r
+    @Bean\r
+    public SqlResource sqlResource() {\r
+        return new SqlResource();\r
+    }\r
 \r
+    @Bean\r
+    public RestapiCallNode restapiCallNode() {\r
+        return new RestapiCallNode();\r
+    }\r
+\r
+    @Bean\r
+    public PropertiesNode propertiesNode() {\r
+        return new PropertiesNode();\r
+    }\r
 \r
 }\r