@@ -75,8 +75,7 @@ public class AppSecConfigServiceImpl implements AppSecConfigService {
7575 private final ConfigurationPoller configurationPoller ;
7676 private WafBuilder wafBuilder ;
7777
78- private MergedAsmFeatures mergedAsmFeatures ;
79- private volatile boolean initialized ;
78+ private final MergedAsmFeatures mergedAsmFeatures = new MergedAsmFeatures ();
8079
8180 private final ConcurrentHashMap <String , SubconfigListener > subconfigListeners =
8281 new ConcurrentHashMap <>();
@@ -173,9 +172,7 @@ private class AppSecConfigChangesListener implements ProductListener {
173172 @ Override
174173 public void accept (ConfigKey configKey , byte [] content , PollingRateHinter pollingRateHinter )
175174 throws IOException {
176- if (!initialized ) {
177- throw new IllegalStateException ();
178- }
175+ maybeInitializeDefaultConfig ();
179176
180177 if (content == null ) {
181178 try {
@@ -219,8 +216,8 @@ public void accept(ConfigKey configKey, byte[] content, PollingRateHinter pollin
219216 }
220217 defaultConfigActivated = false ;
221218 }
222- super .accept (configKey , content , pollingRateHinter );
223219 usedDDWafConfigKeys .add (configKey .toString ());
220+ super .accept (configKey , content , pollingRateHinter );
224221 }
225222
226223 @ Override
@@ -282,13 +279,7 @@ private void subscribeAsmFeatures() {
282279 Product .ASM_FEATURES ,
283280 AppSecFeaturesDeserializer .INSTANCE ,
284281 (configKey , newConfig , hinter ) -> {
285- if (!hasUserWafConfig && !defaultConfigActivated ) {
286- // features activated in runtime
287- init ();
288- }
289- if (!initialized ) {
290- throw new IllegalStateException ();
291- }
282+ maybeInitializeDefaultConfig ();
292283 if (newConfig == null ) {
293284 mergedAsmFeatures .removeConfig (configKey );
294285 } else {
@@ -305,10 +296,7 @@ private void subscribeAsmFeatures() {
305296
306297 private void distributeSubConfigurations (
307298 String key , AppSecModuleConfigurer .Reconfiguration reconfiguration ) {
308- if (usedDDWafConfigKeys .isEmpty () && !defaultConfigActivated && !hasUserWafConfig ) {
309- // no config left in the WAF builder, add the default config
310- init ();
311- }
299+ maybeInitializeDefaultConfig ();
312300 for (Map .Entry <String , SubconfigListener > entry : subconfigListeners .entrySet ()) {
313301 SubconfigListener listener = entry .getValue ();
314302 try {
@@ -320,6 +308,13 @@ private void distributeSubConfigurations(
320308 }
321309 }
322310
311+ private void maybeInitializeDefaultConfig () {
312+ if (usedDDWafConfigKeys .isEmpty () && !hasUserWafConfig && !defaultConfigActivated ) {
313+ // no config left in the WAF builder, add the default config
314+ init ();
315+ }
316+ }
317+
323318 @ Override
324319 public void init () {
325320 Map <String , Object > wafConfig ;
@@ -341,8 +336,8 @@ public void init() {
341336 } else {
342337 hasUserWafConfig = true ;
343338 }
344- this .mergedAsmFeatures = new MergedAsmFeatures ();
345- this .initialized = true ;
339+ this .mergedAsmFeatures . clear ();
340+ this .usedDDWafConfigKeys . clear () ;
346341
347342 if (wafConfig .isEmpty ()) {
348343 throw new IllegalStateException ("Expected default waf config to be available" );
0 commit comments