2 * Copyright (c) 2018 Inocybe Technologies and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netconf.sal.restconf.web;
10 import java.util.concurrent.atomic.AtomicBoolean;
11 import javax.servlet.ServletException;
12 import javax.ws.rs.core.Application;
13 import org.opendaylight.aaa.filterchain.configuration.CustomFilterAdapterConfiguration;
14 import org.opendaylight.aaa.filterchain.filters.CustomFilterAdapter;
15 import org.opendaylight.aaa.web.FilterDetails;
16 import org.opendaylight.aaa.web.ServletDetails;
17 import org.opendaylight.aaa.web.WebContext;
18 import org.opendaylight.aaa.web.WebContextBuilder;
19 import org.opendaylight.aaa.web.WebContextRegistration;
20 import org.opendaylight.aaa.web.WebContextSecurer;
21 import org.opendaylight.aaa.web.WebServer;
22 import org.opendaylight.aaa.web.servlet.ServletSupport;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
27 * Implementation of Bierman02WebRegistrar.
29 * @author Thomas Pantelis
31 public class Bierman02WebRegistrarImpl implements Bierman02WebRegistrar {
32 private static final Logger LOG = LoggerFactory.getLogger(Bierman02WebRegistrarImpl.class);
34 private final WebServer webServer;
35 private final WebContextSecurer webContextSecurer;
36 private final ServletSupport servletSupport;
37 private final Application webApp;
38 private final CustomFilterAdapterConfiguration customFilterAdapterConfig;
39 private volatile WebContextRegistration registraton;
40 private final AtomicBoolean registered = new AtomicBoolean(false);
42 public Bierman02WebRegistrarImpl(WebServer webServer, WebContextSecurer webContextSecurer,
43 ServletSupport servletSupport, Application webApp,
44 CustomFilterAdapterConfiguration customFilterAdapterConfig) {
45 this.webServer = webServer;
46 this.webContextSecurer = webContextSecurer;
47 this.servletSupport = servletSupport;
49 this.customFilterAdapterConfig = customFilterAdapterConfig;
53 if (registered.compareAndSet(true, false)) {
54 if (registraton != null) {
61 public void registerWithAuthentication() {
66 public void registerWithoutAuthentication() {
70 private void register(boolean authenticate) {
71 if (!registered.compareAndSet(false, true)) {
72 LOG.warn("Web context has already been registered", new Exception("call site"));
76 WebContextBuilder webContextBuilder = WebContext.builder().contextPath("restconf").supportsSessions(true)
77 .addServlet(ServletDetails.builder().servlet(servletSupport.createHttpServletBuilder(webApp).build())
78 .addUrlPattern("/*").build())
80 // Allows user to add javax.servlet.Filter(s) in front of REST services
81 .addFilter(FilterDetails.builder().filter(new CustomFilterAdapter(customFilterAdapterConfig))
82 .addUrlPattern("/*").build())
84 .addFilter(FilterDetails.builder().filter(new org.eclipse.jetty.servlets.GzipFilter())
85 .putInitParam("mimeTypes",
86 "application/xml,application/yang.data+xml,xml,application/json,application/yang.data+json")
87 .addUrlPattern("/*").build());
90 webContextSecurer.requireAuthentication(webContextBuilder, "/*");
94 registraton = webServer.registerWebContext(webContextBuilder.build());
95 } catch (ServletException e) {
96 throw new RuntimeException("Failed to register the web context", e);