Merge pull request #211 from dBucik/fix_filter_init_npe

fix: 🐛 Fix nullPointerexception in AuthProcFilterInit
pull/1580/head
Dominik František Bučík 2022-07-25 14:54:26 +02:00 committed by GitHub
commit d80673d8de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 9 deletions

View File

@ -6,6 +6,7 @@ import static cz.muni.ics.oidc.server.filters.AuthProcFilterConstants.DEVICE_APP
import cz.muni.ics.oauth2.model.ClientDetailsEntity; import cz.muni.ics.oauth2.model.ClientDetailsEntity;
import cz.muni.ics.oauth2.service.ClientDetailsEntityService; import cz.muni.ics.oauth2.service.ClientDetailsEntityService;
import cz.muni.ics.oidc.BeanUtil; import cz.muni.ics.oidc.BeanUtil;
import cz.muni.ics.oidc.exceptions.ConfigurationException;
import cz.muni.ics.oidc.models.Facility; import cz.muni.ics.oidc.models.Facility;
import cz.muni.ics.oidc.models.PerunUser; import cz.muni.ics.oidc.models.PerunUser;
import cz.muni.ics.oidc.saml.SamlProperties; import cz.muni.ics.oidc.saml.SamlProperties;
@ -74,7 +75,7 @@ public class AuthProcFiltersContainer extends GenericFilterBean {
} }
@PostConstruct @PostConstruct
public void postConstruct() { public void postConstruct() throws ConfigurationException {
this.filters = AuthProcFiltersInitializer.initialize(properties, beanUtil); this.filters = AuthProcFiltersInitializer.initialize(properties, beanUtil);
} }

View File

@ -1,6 +1,7 @@
package cz.muni.ics.oidc.server.filters; package cz.muni.ics.oidc.server.filters;
import cz.muni.ics.oidc.BeanUtil; import cz.muni.ics.oidc.BeanUtil;
import cz.muni.ics.oidc.exceptions.ConfigurationException;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.LinkedList; import java.util.LinkedList;
@ -22,7 +23,7 @@ public class AuthProcFiltersInitializer {
private static final String FILTER_NAMES = "filter.names"; private static final String FILTER_NAMES = "filter.names";
private static final String FILTERS_PROP_BASE_PREFIX = "filter."; private static final String FILTERS_PROP_BASE_PREFIX = "filter.";
public static List<AuthProcFilter> initialize(Properties coreProperties, BeanUtil beanUtil) { public static List<AuthProcFilter> initialize(Properties coreProperties, BeanUtil beanUtil) throws ConfigurationException {
List<AuthProcFilter> filters = new LinkedList<>(); List<AuthProcFilter> filters = new LinkedList<>();
String filterNames = coreProperties.getProperty(FILTER_NAMES); String filterNames = coreProperties.getProperty(FILTER_NAMES);
@ -39,11 +40,11 @@ public class AuthProcFiltersInitializer {
return filters; return filters;
} }
private static AuthProcFilter loadFilter(AuthProcFilterInitContext ctx) { private static AuthProcFilter loadFilter(AuthProcFilterInitContext ctx) throws ConfigurationException {
String filterClass = ctx.getFilterClass(); String filterClass = ctx.getFilterClass();
if (!StringUtils.hasText(filterClass)) { if (!StringUtils.hasText(filterClass)) {
log.warn("{} - failed to initialized filter: no class has ben configured", ctx.getFilterName()); log.warn("{} - failed to initialized filter: no class has ben configured", ctx.getFilterName());
return null; throw new ConfigurationException("Failed to initialize filter '" + ctx.getFilterName() + "' (" + filterClass + ")");
} }
log.debug("{} - loading class '{}'", ctx.getFilterName(), filterClass); log.debug("{} - loading class '{}'", ctx.getFilterName(), filterClass);
@ -52,25 +53,27 @@ public class AuthProcFiltersInitializer {
if (!AuthProcFilter.class.isAssignableFrom(rawClazz)) { if (!AuthProcFilter.class.isAssignableFrom(rawClazz)) {
log.warn("{} - failed to initialized filter: class '{}' does not extend AuthProcFilter", log.warn("{} - failed to initialized filter: class '{}' does not extend AuthProcFilter",
ctx.getFilterName(), filterClass); ctx.getFilterName(), filterClass);
return null; throw new ConfigurationException("Failed to initialize filter '" + ctx.getFilterName() + "' (" + filterClass + ")");
} }
@SuppressWarnings("unchecked") Class<AuthProcFilter> clazz = (Class<AuthProcFilter>) rawClazz; @SuppressWarnings("unchecked") Class<AuthProcFilter> clazz = (Class<AuthProcFilter>) rawClazz;
Constructor<AuthProcFilter> constructor = clazz.getConstructor(AuthProcFilterInitContext.class); Constructor<AuthProcFilter> constructor = clazz.getConstructor(AuthProcFilterInitContext.class);
return constructor.newInstance(ctx); AuthProcFilter filter = constructor.newInstance(ctx);
log.debug("Initialized AuthProcFilter - {}", filter);
return filter;
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
log.warn("{} - failed to initialize filter: class '{}' was not found", ctx.getFilterName(), filterClass); log.warn("{} - failed to initialize filter: class '{}' was not found", ctx.getFilterName(), filterClass);
log.debug("{} - details:", ctx.getFilterName(), e); log.debug("{} - details:", ctx.getFilterName(), e);
return null; throw new ConfigurationException("Failed to initialize filter '" + ctx.getFilterName() + "' (" + filterClass + ")");
} catch (NoSuchMethodException e) { } catch (NoSuchMethodException e) {
log.warn("{} - failed to initialize filter: class '{}' does not have proper constructor", log.warn("{} - failed to initialize filter: class '{}' does not have proper constructor",
ctx.getFilterName(), filterClass); ctx.getFilterName(), filterClass);
log.debug("{} - details:", ctx.getFilterName(), e); log.debug("{} - details:", ctx.getFilterName(), e);
return null; throw new ConfigurationException("Failed to initialize filter '" + ctx.getFilterName() + "' (" + filterClass + ")");
} catch (IllegalAccessException | InvocationTargetException | InstantiationException e) { } catch (IllegalAccessException | InvocationTargetException | InstantiationException e) {
log.warn("{} - failed to initialize filter: class '{}' cannot be instantiated", ctx.getFilterName(), filterClass); log.warn("{} - failed to initialize filter: class '{}' cannot be instantiated", ctx.getFilterName(), filterClass);
log.debug("{} - details:", ctx.getFilterName(), e); log.debug("{} - details:", ctx.getFilterName(), e);
return null; throw new ConfigurationException("Failed to initialize filter '" + ctx.getFilterName() + "' (" + filterClass + ")");
} }
} }