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 {