ensure the force filter works even without an application class
diff --git a/geronimo-jwt-auth-impl/src/main/java/org/apache/geronimo/microprofile/impl/jwtauth/servlet/GeronimoJwtAuthInitializer.java b/geronimo-jwt-auth-impl/src/main/java/org/apache/geronimo/microprofile/impl/jwtauth/servlet/GeronimoJwtAuthInitializer.java
index 43f85be..4b46ddd 100644
--- a/geronimo-jwt-auth-impl/src/main/java/org/apache/geronimo/microprofile/impl/jwtauth/servlet/GeronimoJwtAuthInitializer.java
+++ b/geronimo-jwt-auth-impl/src/main/java/org/apache/geronimo/microprofile/impl/jwtauth/servlet/GeronimoJwtAuthInitializer.java
@@ -40,51 +40,53 @@
public class GeronimoJwtAuthInitializer implements ServletContainerInitializer {
@Override
public void onStartup(final Set<Class<?>> classes, final ServletContext ctx) throws ServletException {
- final Supplier<GeronimoJwtAuthConfig> config = new Supplier<GeronimoJwtAuthConfig>() {
- private GeronimoJwtAuthConfig config;
-
- @Override
- public GeronimoJwtAuthConfig get() {
- return config == null ? config = GeronimoJwtAuthConfig.create() : config;
- }
- };
+ final GeronimoJwtAuthConfig config = GeronimoJwtAuthConfig.create();
+ final boolean forceSetup = "true".equalsIgnoreCase(config.read("filter.active", "false"));
+ if (forceSetup) {
+ doSetup(ctx, config, null);
+ return;
+ }
ofNullable(classes).filter(c -> !c.isEmpty()).ifPresent(marked -> // needed? what's the issue dropping it?
// nothing normally
// to be deterministic
marked.stream()
.filter(Application.class::isAssignableFrom) // needed? what's the issue dropping it? nothing
// normally
- .filter(app -> "true".equalsIgnoreCase(config.get().read("filter.active", "false")) ||
+ .filter(app -> forceSetup ||
(app.isAnnotationPresent(LoginConfig.class) && "MP-JWT".equalsIgnoreCase(app.getAnnotation(LoginConfig.class).authMethod())))
.min(Comparator.comparing(Class::getName))
.ifPresent(app -> {
- final FilterRegistration.Dynamic filter = ctx.addFilter("geronimo-microprofile-jwt-auth-filter", GeronimoJwtAuthFilter.class);
- filter.setAsyncSupported(true);
- final String[] mappings = ofNullable(app.getAnnotation(ApplicationPath.class))
- .map(ApplicationPath::value)
- .map(v -> (!v.startsWith("/") ? "/" : "") +
- (v.contains("{") ? v.substring(0, v.indexOf("{")) : v) +
- (v.endsWith("/") ? "" : "/") +
- "*")
- .map(v -> new String[]{v})
- .orElseGet(() -> {
- final ServletRegistration defaultServlet = ctx.getServletRegistration(Application.class.getName());
- if (defaultServlet != null && !defaultServlet.getMappings().isEmpty()) {
- return defaultServlet.getMappings().toArray(new String[defaultServlet.getMappings().size()]);
- }
-
- final String[] servletMapping = ctx.getServletRegistrations().values().stream()
- .filter(r -> r.getInitParameter("javax.ws.rs.Application") != null)
- .flatMap(r -> r.getMappings().stream())
- .toArray(String[]::new);
- if (servletMapping.length > 0) {
- return servletMapping;
- }
-
- // unlikely
- return new String[]{config.get().read("filter.mapping.default", "/*")};
- });
- filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, mappings);
+ doSetup(ctx, config, app);
}));
}
+
+ private void doSetup(final ServletContext ctx, final GeronimoJwtAuthConfig config, final Class<?> app) {
+ final FilterRegistration.Dynamic filter = ctx.addFilter("geronimo-microprofile-jwt-auth-filter", GeronimoJwtAuthFilter.class);
+ filter.setAsyncSupported(true);
+ final String[] mappings = ofNullable(app).map(a -> a.getAnnotation(ApplicationPath.class))
+ .map(ApplicationPath::value)
+ .map(v -> (!v.startsWith("/") ? "/" : "") +
+ (v.contains("{") ? v.substring(0, v.indexOf("{")) : v) +
+ (v.endsWith("/") ? "" : "/") +
+ "*")
+ .map(v -> new String[]{v})
+ .orElseGet(() -> {
+ final ServletRegistration defaultServlet = ctx.getServletRegistration(Application.class.getName());
+ if (defaultServlet != null && !defaultServlet.getMappings().isEmpty()) {
+ return defaultServlet.getMappings().toArray(new String[defaultServlet.getMappings().size()]);
+ }
+
+ final String[] servletMapping = ctx.getServletRegistrations().values().stream()
+ .filter(r -> r.getInitParameter("javax.ws.rs.Application") != null)
+ .flatMap(r -> r.getMappings().stream())
+ .toArray(String[]::new);
+ if (servletMapping.length > 0) {
+ return servletMapping;
+ }
+
+ // unlikely
+ return new String[]{config.read("filter.mapping.default", "/*")};
+ });
+ filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, mappings);
+ }
}