Inject ApplicationEventPublisher

Previously, the auto-configured
`OAuth2ClientAuthenticationProcessingFilter` instance had no
`ApplicationEventPublisher`. As a result, no event was fired. This commit
makes sure to associate the event publisher instance.

Closes gh-5853
pull/5864/head
Stephane Nicoll 9 years ago
parent 5a730a916c
commit 6f4ec4e741

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2015 the original author or authors. * Copyright 2012-2016 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -23,12 +23,12 @@ import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.framework.ProxyFactory;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2SsoCustomConfiguration.WebSecurityEnhancerCondition; import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2SsoCustomConfiguration.WebSecurityEnhancerCondition;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.ConditionContext; import org.springframework.context.annotation.ConditionContext;
import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -51,15 +51,15 @@ import org.springframework.util.ReflectionUtils;
@Configuration @Configuration
@Conditional(WebSecurityEnhancerCondition.class) @Conditional(WebSecurityEnhancerCondition.class)
public class OAuth2SsoCustomConfiguration public class OAuth2SsoCustomConfiguration
implements ImportAware, BeanPostProcessor, BeanFactoryAware { implements ImportAware, BeanPostProcessor, ApplicationContextAware {
private Class<?> configType; private Class<?> configType;
private BeanFactory beanFactory; private ApplicationContext applicationContext;
@Override @Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException { public void setApplicationContext(ApplicationContext applicationContext) {
this.beanFactory = beanFactory; this.applicationContext = applicationContext;
} }
@Override @Override
@ -82,7 +82,7 @@ public class OAuth2SsoCustomConfiguration
&& bean instanceof WebSecurityConfigurerAdapter) { && bean instanceof WebSecurityConfigurerAdapter) {
ProxyFactory factory = new ProxyFactory(); ProxyFactory factory = new ProxyFactory();
factory.setTarget(bean); factory.setTarget(bean);
factory.addAdvice(new SsoSecurityAdapter(this.beanFactory)); factory.addAdvice(new SsoSecurityAdapter(this.applicationContext));
bean = factory.getProxy(); bean = factory.getProxy();
} }
return bean; return bean;
@ -92,8 +92,8 @@ public class OAuth2SsoCustomConfiguration
private SsoSecurityConfigurer configurer; private SsoSecurityConfigurer configurer;
SsoSecurityAdapter(BeanFactory beanFactory) { SsoSecurityAdapter(ApplicationContext applicationContext) {
this.configurer = new SsoSecurityConfigurer(beanFactory); this.configurer = new SsoSecurityConfigurer(applicationContext);
} }
@Override @Override

@ -16,11 +16,11 @@
package org.springframework.boot.autoconfigure.security.oauth2.client; package org.springframework.boot.autoconfigure.security.oauth2.client;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2SsoDefaultConfiguration.NeedsWebSecurityCondition; import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2SsoDefaultConfiguration.NeedsWebSecurityCondition;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ConditionContext; import org.springframework.context.annotation.ConditionContext;
import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -44,20 +44,20 @@ import org.springframework.util.ClassUtils;
public class OAuth2SsoDefaultConfiguration extends WebSecurityConfigurerAdapter public class OAuth2SsoDefaultConfiguration extends WebSecurityConfigurerAdapter
implements Ordered { implements Ordered {
private final BeanFactory beanFactory; private final ApplicationContext applicationContext;
private final OAuth2SsoProperties sso; private final OAuth2SsoProperties sso;
public OAuth2SsoDefaultConfiguration(BeanFactory beanFactory, public OAuth2SsoDefaultConfiguration(ApplicationContext applicationContext,
OAuth2SsoProperties sso) { OAuth2SsoProperties sso) {
this.beanFactory = beanFactory; this.applicationContext = applicationContext;
this.sso = sso; this.sso = sso;
} }
@Override @Override
protected void configure(HttpSecurity http) throws Exception { protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/**").authorizeRequests().anyRequest().authenticated(); http.antMatcher("/**").authorizeRequests().anyRequest().authenticated();
new SsoSecurityConfigurer(this.beanFactory).configure(http); new SsoSecurityConfigurer(this.applicationContext).configure(http);
} }
@Override @Override

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2015 the original author or authors. * Copyright 2012-2016 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -18,7 +18,7 @@ package org.springframework.boot.autoconfigure.security.oauth2.client;
import java.util.Collections; import java.util.Collections;
import org.springframework.beans.factory.BeanFactory; import org.springframework.context.ApplicationContext;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.security.config.annotation.SecurityConfigurerAdapter; import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
@ -39,14 +39,14 @@ import org.springframework.web.accept.HeaderContentNegotiationStrategy;
class SsoSecurityConfigurer { class SsoSecurityConfigurer {
private BeanFactory beanFactory; private ApplicationContext applicationContext;
SsoSecurityConfigurer(BeanFactory beanFactory) { SsoSecurityConfigurer(ApplicationContext applicationContext) {
this.beanFactory = beanFactory; this.applicationContext = applicationContext;
} }
public void configure(HttpSecurity http) throws Exception { public void configure(HttpSecurity http) throws Exception {
OAuth2SsoProperties sso = this.beanFactory.getBean(OAuth2SsoProperties.class); OAuth2SsoProperties sso = this.applicationContext.getBean(OAuth2SsoProperties.class);
// Delay the processing of the filter until we know the // Delay the processing of the filter until we know the
// SessionAuthenticationStrategy is available: // SessionAuthenticationStrategy is available:
http.apply(new OAuth2ClientAuthenticationConfigurer(oauth2SsoFilter(sso))); http.apply(new OAuth2ClientAuthenticationConfigurer(oauth2SsoFilter(sso)));
@ -76,14 +76,15 @@ class SsoSecurityConfigurer {
private OAuth2ClientAuthenticationProcessingFilter oauth2SsoFilter( private OAuth2ClientAuthenticationProcessingFilter oauth2SsoFilter(
OAuth2SsoProperties sso) { OAuth2SsoProperties sso) {
OAuth2RestOperations restTemplate = this.beanFactory OAuth2RestOperations restTemplate = this.applicationContext
.getBean(OAuth2RestOperations.class); .getBean(OAuth2RestOperations.class);
ResourceServerTokenServices tokenServices = this.beanFactory ResourceServerTokenServices tokenServices = this.applicationContext
.getBean(ResourceServerTokenServices.class); .getBean(ResourceServerTokenServices.class);
OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter( OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter(
sso.getLoginPath()); sso.getLoginPath());
filter.setRestTemplate(restTemplate); filter.setRestTemplate(restTemplate);
filter.setTokenServices(tokenServices); filter.setTokenServices(tokenServices);
filter.setApplicationEventPublisher(this.applicationContext);
return filter; return filter;
} }

Loading…
Cancel
Save