Remove bierman02-noauth feature
[netconf.git] / restconf / restconf-nb-bierman02 / src / main / java / org / opendaylight / netconf / sal / restconf / web / Bierman02WebRegistrarImpl.java
index 034e26869fe9906535efa29e406a1d74ed22b767..fb6f5bc821cb3a62dbf49bb4153095e8d4bdc481 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.netconf.sal.restconf.web;
 
+import java.util.concurrent.atomic.AtomicBoolean;
 import javax.servlet.ServletException;
 import javax.ws.rs.core.Application;
 import org.opendaylight.aaa.filterchain.configuration.CustomFilterAdapterConfiguration;
@@ -18,6 +19,9 @@ import org.opendaylight.aaa.web.WebContextBuilder;
 import org.opendaylight.aaa.web.WebContextRegistration;
 import org.opendaylight.aaa.web.WebContextSecurer;
 import org.opendaylight.aaa.web.WebServer;
+import org.opendaylight.aaa.web.servlet.ServletSupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Implementation of Bierman02WebRegistrar.
@@ -25,24 +29,31 @@ import org.opendaylight.aaa.web.WebServer;
  * @author Thomas Pantelis
  */
 public class Bierman02WebRegistrarImpl implements Bierman02WebRegistrar {
+    private static final Logger LOG = LoggerFactory.getLogger(Bierman02WebRegistrarImpl.class);
 
-    private WebContextRegistration registraton;
     private final WebServer webServer;
     private final WebContextSecurer webContextSecurer;
+    private final ServletSupport servletSupport;
     private final Application webApp;
     private final CustomFilterAdapterConfiguration customFilterAdapterConfig;
+    private volatile WebContextRegistration registraton;
+    private final AtomicBoolean registered = new AtomicBoolean(false);
 
     public Bierman02WebRegistrarImpl(WebServer webServer,  WebContextSecurer webContextSecurer,
-            Application webApp, CustomFilterAdapterConfiguration customFilterAdapterConfig) {
+            ServletSupport servletSupport, Application webApp,
+            CustomFilterAdapterConfiguration customFilterAdapterConfig) {
         this.webServer = webServer;
         this.webContextSecurer = webContextSecurer;
+        this.servletSupport = servletSupport;
         this.webApp = webApp;
         this.customFilterAdapterConfig = customFilterAdapterConfig;
     }
 
     public void close() {
-        if (registraton != null) {
-            registraton.close();
+        if (registered.compareAndSet(true, false)) {
+            if (registraton != null) {
+                registraton.close();
+            }
         }
     }
 
@@ -57,9 +68,13 @@ public class Bierman02WebRegistrarImpl implements Bierman02WebRegistrar {
     }
 
     private void register(boolean authenticate) {
+        if (!registered.compareAndSet(false, true)) {
+            LOG.warn("Web context has already been registered", new Exception("call site"));
+            return;
+        }
+
         WebContextBuilder webContextBuilder = WebContext.builder().contextPath("restconf").supportsSessions(true)
-                .addServlet(ServletDetails.builder().servlet(
-                        new com.sun.jersey.spi.container.servlet.ServletContainer(webApp))
+                .addServlet(ServletDetails.builder().servlet(servletSupport.createHttpServletBuilder(webApp).build())
                     .addUrlPattern("/*").build())
 
                 // Allows user to add javax.servlet.Filter(s) in front of REST services