*/
package org.opendaylight.restconf.nb.rfc8040.web;
-import com.google.common.collect.Lists;
+import java.util.List;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.opendaylight.aaa.web.WebContextSecurer;
import org.opendaylight.aaa.web.WebServer;
import org.opendaylight.aaa.web.servlet.ServletSupport;
+import org.opendaylight.restconf.nb.rfc8040.DataStreamApplication;
import org.opendaylight.restconf.nb.rfc8040.RestconfApplication;
-import org.opendaylight.restconf.nb.rfc8040.RestconfNotifApplication;
+import org.opendaylight.restconf.nb.rfc8040.RootFoundApplication;
import org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants;
import org.opendaylight.restconf.nb.rfc8040.streams.websockets.WebSocketInitializer;
import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
*/
@Singleton
public class WebInitializer {
-
private final WebContextRegistration registration;
@Inject
- public WebInitializer(@Reference WebServer webServer, @Reference WebContextSecurer webContextSecurer,
- @Reference ServletSupport servletSupport, RestconfApplication webApp,RestconfNotifApplication webAppNotif,
- @Reference CustomFilterAdapterConfiguration customFilterAdapterConfig,
- WebSocketInitializer webSocketServlet) throws ServletException {
- WebContextBuilder webContextBuilder = WebContext.builder().contextPath(RestconfConstants.BASE_URI_PATTERN)
- .supportsSessions(false)
- .addServlet(ServletDetails.builder().servlet(servletSupport.createHttpServletBuilder(webApp).build())
- .addUrlPattern("/*").build())
- .addServlet(ServletDetails.builder().servlet(servletSupport.createHttpServletBuilder(webAppNotif)
- .build()).asyncSupported(true).addUrlPattern("/notif/*").name("notificationServlet").build())
- .addServlet(ServletDetails.builder().servlet(webSocketServlet).addAllUrlPatterns(Lists.newArrayList(
- RestconfStreamsConstants.DATA_CHANGE_EVENT_STREAM_PATTERN,
- RestconfStreamsConstants.YANG_NOTIFICATION_STREAM_PATTERN)).build())
- // Allows user to add javax.servlet.Filter(s) in front of REST services
- .addFilter(FilterDetails.builder().filter(new CustomFilterAdapter(customFilterAdapterConfig))
- .addUrlPattern("/*").asyncSupported(true).build())
- .addFilter(FilterDetails.builder().filter(new org.eclipse.jetty.servlets.GzipFilter())
- .putInitParam("mimeTypes",
- "application/xml,application/yang.data+xml,xml,application/json,application/yang.data+json")
- .addUrlPattern("/*").asyncSupported(true).build());
+ public WebInitializer(@Reference final WebServer webServer, @Reference final WebContextSecurer webContextSecurer,
+ @Reference final ServletSupport servletSupport, final RestconfApplication webApp,
+ final DataStreamApplication webAppNotif,
+ @Reference final CustomFilterAdapterConfiguration customFilterAdapterConfig,
+ final WebSocketInitializer webSocketServlet) throws ServletException {
+ WebContextBuilder webContextBuilder = WebContext.builder()
+ .contextPath("/")
+ .supportsSessions(false)
+ .addServlet(ServletDetails.builder()
+ .addUrlPattern(RestconfConstants.BASE_URI_PATTERN + "/*")
+ .servlet(servletSupport.createHttpServletBuilder(webApp).build())
+ .build())
+ .addServlet(ServletDetails.builder()
+ .addUrlPattern(RestconfConstants.BASE_URI_PATTERN + "/notif/*")
+ .servlet(servletSupport.createHttpServletBuilder(webAppNotif).build())
+ .name("notificationServlet")
+ .asyncSupported(true)
+ .build())
+ .addServlet(ServletDetails.builder()
+ .addAllUrlPatterns(List.of(
+ RestconfConstants.BASE_URI_PATTERN + RestconfStreamsConstants.DATA_CHANGE_EVENT_STREAM_PATTERN,
+ RestconfConstants.BASE_URI_PATTERN + RestconfStreamsConstants.YANG_NOTIFICATION_STREAM_PATTERN))
+ .servlet(webSocketServlet)
+ .build())
+ .addServlet(ServletDetails.builder()
+ .addUrlPattern(".well-known/*")
+ .servlet(servletSupport.createHttpServletBuilder(
+ new RootFoundApplication(RestconfConstants.BASE_URI_PATTERN))
+ .build())
+ .name("Rootfound")
+ .build())
+
+ // Allows user to add javax.servlet.Filter(s) in front of REST services
+ .addFilter(FilterDetails.builder()
+ .addUrlPattern("/*")
+ .filter(new CustomFilterAdapter(customFilterAdapterConfig))
+ .asyncSupported(true)
+ .build());
- webContextSecurer.requireAuthentication(webContextBuilder, true , "/*");
+ webContextSecurer.requireAuthentication(webContextBuilder, true, RestconfConstants.BASE_URI_PATTERN + "/*");
registration = webServer.registerWebContext(webContextBuilder.build());
}