force auth filter to be required dependency via required extension

Signed-off-by: Raymond Augé <rotty3000@apache.org>
diff --git a/cdi-extension-mp-jwt-auth/src/main/java/org/apache/aries/cdi/extension/mp/jwt/JwtAuthFilter.java b/cdi-extension-mp-jwt-auth/src/main/java/org/apache/aries/cdi/extension/mp/jwt/JwtAuthFilter.java
new file mode 100644
index 0000000..a9100dd
--- /dev/null
+++ b/cdi-extension-mp-jwt-auth/src/main/java/org/apache/aries/cdi/extension/mp/jwt/JwtAuthFilter.java
@@ -0,0 +1,86 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.aries.cdi.extension.mp.jwt;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+
+public class JwtAuthFilter implements ContainerRequestFilter, Filter {
+
+	private final Filter delegate;
+	private final ClassLoader loader;
+
+	public JwtAuthFilter(Filter delegate, ClassLoader loader) {
+		this.delegate = delegate;
+		this.loader = loader;
+	}
+
+	@Override
+	public void init(FilterConfig arg0) throws ServletException {
+		Thread currentThread = Thread.currentThread();
+		ClassLoader current = currentThread.getContextClassLoader();
+
+		try {
+			currentThread.setContextClassLoader(loader);
+			delegate.init(arg0);
+		}
+		finally {
+			currentThread.setContextClassLoader(current);
+		}
+	}
+
+	@Override
+	public void filter(ContainerRequestContext requestContext) throws IOException {
+	}
+
+	@Override
+	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
+			throws IOException, ServletException {
+
+		Thread currentThread = Thread.currentThread();
+		ClassLoader current = currentThread.getContextClassLoader();
+
+		try {
+			currentThread.setContextClassLoader(loader);
+			delegate.doFilter(arg0, arg1, arg2);
+		}
+		finally {
+			currentThread.setContextClassLoader(current);
+		}
+	}
+
+	@Override
+	public void destroy() {
+		Thread currentThread = Thread.currentThread();
+		ClassLoader current = currentThread.getContextClassLoader();
+
+		try {
+			currentThread.setContextClassLoader(loader);
+			delegate.destroy();
+		}
+		finally {
+			currentThread.setContextClassLoader(current);
+		}
+	}
+
+}
diff --git a/cdi-extension-mp-jwt-auth/src/main/java/org/apache/aries/cdi/extension/mp/jwt/MPJwtAuthExtension.java b/cdi-extension-mp-jwt-auth/src/main/java/org/apache/aries/cdi/extension/mp/jwt/MPJwtAuthExtension.java
index 0ad32a1..0c69178 100644
--- a/cdi-extension-mp-jwt-auth/src/main/java/org/apache/aries/cdi/extension/mp/jwt/MPJwtAuthExtension.java
+++ b/cdi-extension-mp-jwt-auth/src/main/java/org/apache/aries/cdi/extension/mp/jwt/MPJwtAuthExtension.java
@@ -56,11 +56,7 @@
 import javax.enterprise.inject.spi.WithAnnotations;
 import javax.enterprise.inject.spi.configurator.AnnotatedTypeConfigurator;
 import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
 import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.container.ContainerRequestFilter;
 import javax.ws.rs.container.DynamicFeature;
@@ -103,6 +99,7 @@
 
 	@SuppressWarnings("serial")
 	private final static Set<String> defaultSelects = new HashSet<String>() {{
+		add(format("(%s=%s)", JAX_RS_NAME, "jwt.auth.filter"));
 		add(format("(%s=%s)", JAX_RS_NAME, "jwt.roles.allowed"));
 		add(format("(%s=%s)", JAX_RS_NAME, "jwt.request.forwarder"));
 		add(format("(%s=%s)", JAX_RS_NAME, "jwt.exception.mapper"));
@@ -201,60 +198,16 @@
 		properties.put(HTTP_WHITEBOARD_FILTER_PATTERN, config.read("filter.mapping.default", "/*"));
 		properties.put(HTTP_WHITEBOARD_FILTER_ASYNC_SUPPORTED, true);
 		properties.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE - 1000);
+		properties.put(JAX_RS_APPLICATION_SELECT, applicationSelectFilter("(!(jwt.auth.filter=false))"));
+		properties.put(JAX_RS_EXTENSION, Boolean.TRUE);
+		properties.put(JAX_RS_NAME, "jwt.auth.filter");
 
 		final GeronimoJwtAuthFilter jwtAuthFilter = get(GeronimoJwtAuthFilter.class, beanManager);
 
 		_jwtAuthFilterRegistration = bundleContext.registerService(
-			Filter.class,
-			new Filter() {
-				final Filter delegate = jwtAuthFilter;
-				final ClassLoader loader = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader();
-
-				@Override
-				public void init(FilterConfig arg0) throws ServletException {
-					Thread currentThread = Thread.currentThread();
-					ClassLoader current = currentThread.getContextClassLoader();
-
-					try {
-						currentThread.setContextClassLoader(loader);
-						delegate.init(arg0);
-					}
-					finally {
-						currentThread.setContextClassLoader(current);
-					}
-				}
-
-				@Override
-				public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
-						throws IOException, ServletException {
-
-					Thread currentThread = Thread.currentThread();
-					ClassLoader current = currentThread.getContextClassLoader();
-
-					try {
-						currentThread.setContextClassLoader(loader);
-						delegate.doFilter(arg0, arg1, arg2);
-					}
-					finally {
-						currentThread.setContextClassLoader(current);
-					}
-				}
-
-				@Override
-				public void destroy() {
-					Thread currentThread = Thread.currentThread();
-					ClassLoader current = currentThread.getContextClassLoader();
-
-					try {
-						currentThread.setContextClassLoader(loader);
-						delegate.destroy();
-					}
-					finally {
-						currentThread.setContextClassLoader(current);
-					}
-				}
-
-			}, properties);
+			new String[] {ContainerRequestFilter.class.getName(), Filter.class.getName()},
+			new JwtAuthFilter(jwtAuthFilter, bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader()),
+			properties);
 	}
 
 	void registerJaxrsRolesAllowed(BeanManager beanManager) {
diff --git a/cdi-extension-servlet-weld/src/main/java/org/apache/aries/cdi/extension/servlet/weld/WeldServletExtension.java b/cdi-extension-servlet-weld/src/main/java/org/apache/aries/cdi/extension/servlet/weld/WeldServletExtension.java
index e76e6fe..f4002b0 100644
--- a/cdi-extension-servlet-weld/src/main/java/org/apache/aries/cdi/extension/servlet/weld/WeldServletExtension.java
+++ b/cdi-extension-servlet-weld/src/main/java/org/apache/aries/cdi/extension/servlet/weld/WeldServletExtension.java
@@ -28,7 +28,6 @@
 
 import javax.annotation.Priority;
 import javax.enterprise.event.Observes;
-import javax.enterprise.event.ObservesAsync;
 import javax.enterprise.inject.spi.AfterDeploymentValidation;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
@@ -62,12 +61,6 @@
 		@Observes @Priority(LIBRARY_AFTER + 800)
 		AfterDeploymentValidation adv, BeanManager beanManager) {
 
-		beanManager.getEvent().fireAsync(new Ready());
-	}
-
-	void ready(
-		@ObservesAsync Ready ready, BeanManager beanManager) {
-
 		Dictionary<String, Object> properties = new Hashtable<>();
 
 		properties.put(SERVICE_DESCRIPTION, "Aries CDI - HTTP Portable Extension for Weld");
@@ -92,8 +85,6 @@
 		HttpSessionListener.class.getName()
 	};
 
-	public static class Ready {}
-
 	private class ListenerWrapper<T extends HttpSessionListener & ServletContextListener & ServletRequestListener>
 		implements HttpSessionListener, ServletContextListener, ServletRequestListener {