mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-24 04:52:16 +00:00
SEC-2479: Search parent context for AuthenticationManager
This commit is contained in:
parent
e17adad878
commit
7a3da28987
@ -24,6 +24,7 @@ import org.apache.commons.logging.Log;
|
|||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.springframework.aop.framework.ProxyFactoryBean;
|
import org.springframework.aop.framework.ProxyFactoryBean;
|
||||||
import org.springframework.aop.target.LazyInitTargetSource;
|
import org.springframework.aop.target.LazyInitTargetSource;
|
||||||
|
import org.springframework.beans.factory.BeanFactoryUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
@ -104,7 +105,7 @@ public class AuthenticationConfiguration {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private <T> T lazyBean(Class<T> interfaceName) {
|
private <T> T lazyBean(Class<T> interfaceName) {
|
||||||
LazyInitTargetSource lazyTargetSource = new LazyInitTargetSource();
|
LazyInitTargetSource lazyTargetSource = new LazyInitTargetSource();
|
||||||
String[] beanNamesForType = applicationContext.getBeanNamesForType(interfaceName);
|
String[] beanNamesForType = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(applicationContext, interfaceName);
|
||||||
if(beanNamesForType.length == 0) {
|
if(beanNamesForType.length == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ import org.aopalliance.intercept.MethodInterceptor
|
|||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
import org.springframework.context.ApplicationContext
|
import org.springframework.context.ApplicationContext
|
||||||
import org.springframework.context.ApplicationListener
|
import org.springframework.context.ApplicationListener
|
||||||
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
import org.springframework.context.annotation.Configuration
|
import org.springframework.context.annotation.Configuration
|
||||||
import org.springframework.security.access.AccessDeniedException
|
import org.springframework.security.access.AccessDeniedException
|
||||||
@ -301,4 +302,41 @@ public class GlobalMethodSecurityConfigurationTests extends BaseSpringSpec {
|
|||||||
new MethodSecurityServiceImpl()
|
new MethodSecurityServiceImpl()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def "SEC-2479: Support AuthenticationManager in parent"() {
|
||||||
|
setup:
|
||||||
|
SecurityContextHolder.getContext().setAuthentication(
|
||||||
|
new TestingAuthenticationToken("user", "password","ROLE_USER"))
|
||||||
|
loadConfig(Sec2479ParentConfig)
|
||||||
|
def child = new AnnotationConfigApplicationContext()
|
||||||
|
child.register(Sec2479ChildConfig)
|
||||||
|
child.parent = context
|
||||||
|
child.refresh()
|
||||||
|
MethodSecurityService service = child.getBean(MethodSecurityService)
|
||||||
|
when:
|
||||||
|
service.preAuthorize()
|
||||||
|
then:
|
||||||
|
thrown(AccessDeniedException)
|
||||||
|
cleanup:
|
||||||
|
child?.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
static class Sec2479ParentConfig {
|
||||||
|
static AuthenticationManager AM
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public AuthenticationManager am() {
|
||||||
|
AM
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableGlobalMethodSecurity(prePostEnabled = true)
|
||||||
|
static class Sec2479ChildConfig {
|
||||||
|
@Bean
|
||||||
|
public MethodSecurityService service() {
|
||||||
|
new MethodSecurityServiceImpl()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user