58
58
import org .springframework .security .web .FilterChainProxy ;
59
59
import org .springframework .security .web .ObservationFilterChainDecorator ;
60
60
import org .springframework .security .web .PortResolverImpl ;
61
+ import org .springframework .security .web .firewall .ObservationMarkingRequestRejectedHandler ;
61
62
import org .springframework .security .web .util .matcher .AnyRequestMatcher ;
62
63
import org .springframework .util .StringUtils ;
63
64
import org .springframework .util .xml .DomUtils ;
@@ -120,7 +121,7 @@ public BeanDefinition parse(Element element, ParserContext pc) {
120
121
CompositeComponentDefinition compositeDef = new CompositeComponentDefinition (element .getTagName (),
121
122
pc .extractSource (element ));
122
123
pc .pushContainingComponent (compositeDef );
123
- registerFilterChainProxyIfNecessary (pc , pc . extractSource ( element ) );
124
+ registerFilterChainProxyIfNecessary (pc , element );
124
125
// Obtain the filter chains and add the new chain to it
125
126
BeanDefinition listFactoryBean = pc .getRegistry ().getBeanDefinition (BeanIds .FILTER_CHAINS );
126
127
List <BeanReference > filterChains = (List <BeanReference >) listFactoryBean .getPropertyValues ()
@@ -351,7 +352,8 @@ else if (StringUtils.hasText(before)) {
351
352
return customFilters ;
352
353
}
353
354
354
- static void registerFilterChainProxyIfNecessary (ParserContext pc , Object source ) {
355
+ static void registerFilterChainProxyIfNecessary (ParserContext pc , Element element ) {
356
+ Object source = pc .extractSource (element );
355
357
BeanDefinitionRegistry registry = pc .getRegistry ();
356
358
if (registry .containsBeanDefinition (BeanIds .FILTER_CHAIN_PROXY )) {
357
359
return ;
@@ -378,6 +380,7 @@ static void registerFilterChainProxyIfNecessary(ParserContext pc, Object source)
378
380
requestRejected .addConstructorArgValue ("requestRejectedHandler" );
379
381
requestRejected .addConstructorArgValue (BeanIds .FILTER_CHAIN_PROXY );
380
382
requestRejected .addConstructorArgValue ("requestRejectedHandler" );
383
+ requestRejected .addPropertyValue ("observationRegistry" , getObservationRegistry (element ));
381
384
AbstractBeanDefinition requestRejectedBean = requestRejected .getBeanDefinition ();
382
385
String requestRejectedPostProcessorName = pc .getReaderContext ().generateBeanName (requestRejectedBean );
383
386
registry .registerBeanDefinition (requestRejectedPostProcessorName , requestRejectedBean );
@@ -391,14 +394,16 @@ private static BeanMetadataElement getObservationRegistry(Element methodSecurity
391
394
return BeanDefinitionBuilder .rootBeanDefinition (ObservationRegistryFactory .class ).getBeanDefinition ();
392
395
}
393
396
394
- static class RequestRejectedHandlerPostProcessor implements BeanDefinitionRegistryPostProcessor {
397
+ public static class RequestRejectedHandlerPostProcessor implements BeanDefinitionRegistryPostProcessor {
395
398
396
399
private final String beanName ;
397
400
398
401
private final String targetBeanName ;
399
402
400
403
private final String targetPropertyName ;
401
404
405
+ private ObservationRegistry observationRegistry = ObservationRegistry .NOOP ;
406
+
402
407
RequestRejectedHandlerPostProcessor (String beanName , String targetBeanName , String targetPropertyName ) {
403
408
this .beanName = beanName ;
404
409
this .targetBeanName = targetBeanName ;
@@ -412,13 +417,24 @@ public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) t
412
417
beanDefinition .getPropertyValues ().add (this .targetPropertyName ,
413
418
new RuntimeBeanReference (this .beanName ));
414
419
}
420
+ else if (!this .observationRegistry .isNoop ()) {
421
+ BeanDefinition observable = BeanDefinitionBuilder
422
+ .rootBeanDefinition (ObservationMarkingRequestRejectedHandler .class )
423
+ .addConstructorArgValue (this .observationRegistry ).getBeanDefinition ();
424
+ BeanDefinition beanDefinition = registry .getBeanDefinition (this .targetBeanName );
425
+ beanDefinition .getPropertyValues ().add (this .targetPropertyName , observable );
426
+ }
415
427
}
416
428
417
429
@ Override
418
430
public void postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory ) throws BeansException {
419
431
420
432
}
421
433
434
+ public void setObservationRegistry (ObservationRegistry registry ) {
435
+ this .observationRegistry = registry ;
436
+ }
437
+
422
438
}
423
439
424
440
/**
0 commit comments