updating names to match refactoring: securityMetadataSource instead of objectDefinitionSource

This commit is contained in:
Mark Fisher
2010-11-15 18:19:57 -05:00
parent f5c17d003b
commit 7a16548f50
9 changed files with 43 additions and 38 deletions

View File

@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.security.channel;
import java.util.Collection;
@@ -27,7 +28,9 @@ import org.springframework.security.access.ConfigAttribute;
* @since 2.0
*/
public interface ChannelAccessPolicy {
public Collection<ConfigAttribute> getConfigAttributesForSend();
public Collection<ConfigAttribute> getConfigAttributesForReceive();
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -33,12 +33,12 @@ import org.springframework.util.Assert;
*/
public class ChannelSecurityInterceptor extends AbstractSecurityInterceptor implements MethodInterceptor {
private final ChannelInvocationDefinitionSource objectDefinitionSource;
private final ChannelSecurityMetadataSource securityMetadataSource;
public ChannelSecurityInterceptor(ChannelInvocationDefinitionSource objectDefinitionSource) {
Assert.notNull(objectDefinitionSource, "objectDefinitionSource must not be null");
this.objectDefinitionSource = objectDefinitionSource;
public ChannelSecurityInterceptor(ChannelSecurityMetadataSource securityMetadataSource) {
Assert.notNull(securityMetadataSource, "securityMetadataSource must not be null");
this.securityMetadataSource = securityMetadataSource;
}
@@ -71,7 +71,7 @@ public class ChannelSecurityInterceptor extends AbstractSecurityInterceptor impl
@Override
public SecurityMetadataSource obtainSecurityMetadataSource() {
return this.objectDefinitionSource;
return this.securityMetadataSource;
}
}

View File

@@ -37,16 +37,16 @@ import org.springframework.util.Assert;
* @author Mark Fisher
* @author Oleg Zhurakousky
*/
public class ChannelInvocationDefinitionSource implements SecurityMetadataSource {
public class ChannelSecurityMetadataSource implements SecurityMetadataSource {
private final Map<Pattern, ChannelAccessPolicy> patternMappings;
public ChannelInvocationDefinitionSource() {
public ChannelSecurityMetadataSource() {
this(null);
}
public ChannelInvocationDefinitionSource(Map<Pattern, ChannelAccessPolicy> patternMappings) {
public ChannelSecurityMetadataSource(Map<Pattern, ChannelAccessPolicy> patternMappings) {
this.patternMappings = (patternMappings != null) ? patternMappings
: new LinkedHashMap<Pattern, ChannelAccessPolicy>();
}
@@ -90,18 +90,17 @@ public class ChannelInvocationDefinitionSource implements SecurityMetadataSource
public Collection<ConfigAttribute> getAllConfigAttributes() {
Set<ConfigAttribute> allAttributes = new HashSet<ConfigAttribute>();
for (ChannelAccessPolicy policy : patternMappings.values()) {
Collection<ConfigAttribute> receiveAttributes = policy.getConfigAttributesForReceive();
allAttributes.addAll(receiveAttributes);
Collection<ConfigAttribute> sendAttributes = policy.getConfigAttributesForSend();
allAttributes.addAll(sendAttributes);
}
return allAttributes;
}
public boolean supports(Class<?> clazz) {
return ChannelInvocation.class.isAssignableFrom(clazz);
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -51,23 +51,24 @@ public class DefaultChannelAccessPolicy implements ChannelAccessPolicy {
boolean recieveAccessDefined = StringUtils.hasText(receiveAccess);
Assert.isTrue(sendAccessDefined || recieveAccessDefined,
"At least one of 'sendAccess' and 'receiveAccess' must not be null.");
if (sendAccessDefined){
if (sendAccessDefined) {
String[] sendAccessValues = StringUtils.commaDelimitedListToStringArray(sendAccess);
configAttributeDefinitionForSend = new HashSet<ConfigAttribute>();
for (String sendAccessValue : sendAccessValues) {
configAttributeDefinitionForSend.add(new SecurityConfig(StringUtils.trimAllWhitespace(sendAccessValue)));
}
} else {
}
else {
configAttributeDefinitionForSend = Collections.EMPTY_SET;
}
if (recieveAccessDefined){
if (recieveAccessDefined) {
String[] receiveAccessValues = StringUtils.commaDelimitedListToStringArray(receiveAccess);
configAttributeDefinitionForReceive = new HashSet<ConfigAttribute>();
for (String receiveAccessValue : receiveAccessValues) {
configAttributeDefinitionForReceive.add(new SecurityConfig(StringUtils.trimAllWhitespace(receiveAccessValue)));
}
} else {
}
else {
configAttributeDefinitionForReceive = Collections.EMPTY_SET;
}
}

View File

@@ -24,7 +24,7 @@ import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.security.channel.ChannelInvocationDefinitionSource;
import org.springframework.integration.security.channel.ChannelSecurityMetadataSource;
import org.springframework.integration.security.channel.ChannelSecurityInterceptor;
import org.springframework.util.Assert;
@@ -50,8 +50,10 @@ public class ChannelSecurityInterceptorBeanPostProcessor implements BeanPostProc
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof MessageChannel && shouldProxy(beanName, (MessageChannel) bean,
(ChannelInvocationDefinitionSource) this.interceptor.obtainSecurityMetadataSource())) {
ChannelSecurityMetadataSource channelSecurityMetadataSource =
(ChannelSecurityMetadataSource) this.interceptor.obtainSecurityMetadataSource();
if (bean instanceof MessageChannel &&
shouldProxy(beanName, (MessageChannel) bean, channelSecurityMetadataSource)) {
ProxyFactory proxyFactory = new ProxyFactory(bean);
proxyFactory.addAdvisor(new DefaultPointcutAdvisor(this.interceptor));
return proxyFactory.getProxy();
@@ -59,8 +61,8 @@ public class ChannelSecurityInterceptorBeanPostProcessor implements BeanPostProc
return bean;
}
private boolean shouldProxy(String beanName, MessageChannel channel, ChannelInvocationDefinitionSource definitionSource) {
Set<Pattern> patterns = ((ChannelInvocationDefinitionSource) this.interceptor.obtainSecurityMetadataSource()).getPatterns();
private boolean shouldProxy(String beanName, MessageChannel channel, ChannelSecurityMetadataSource channelSecurityMetadataSource) {
Set<Pattern> patterns = channelSecurityMetadataSource.getPatterns();
for (Pattern pattern : patterns) {
if (pattern.matcher(beanName).matches()) {
return true;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@@ -57,10 +57,10 @@ public class SecuredChannelsParser extends AbstractSingleBeanDefinitionParser {
@Override
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
String objectDefinitionSourceBeanName = this.parseObjectDefinitionSource(element, parserContext);
String securityMetadataSourceBeanName = this.parseSecurityMetadataSource(element, parserContext);
BeanDefinitionBuilder interceptorBuilder = BeanDefinitionBuilder.genericBeanDefinition(
BASE_PACKAGE_NAME + ".channel.ChannelSecurityInterceptor");
interceptorBuilder.addConstructorArgReference(objectDefinitionSourceBeanName);
interceptorBuilder.addConstructorArgReference(securityMetadataSourceBeanName);
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(interceptorBuilder, element, "authentication-manager");
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(interceptorBuilder, element, "access-decision-manager");
String interceptorBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName(
@@ -69,9 +69,9 @@ public class SecuredChannelsParser extends AbstractSingleBeanDefinitionParser {
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private String parseObjectDefinitionSource(Element element, ParserContext parserContext) {
private String parseSecurityMetadataSource(Element element, ParserContext parserContext) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(
BASE_PACKAGE_NAME + ".channel.ChannelInvocationDefinitionSource");
BASE_PACKAGE_NAME + ".channel.ChannelSecurityMetadataSource");
List<Element> accessPolicyElements = DomUtils.getChildElementsByTagName(element, "access-policy");
ManagedMap patternMappings = new ManagedMap();
for (Element accessPolicyElement : accessPolicyElements) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,9 +35,9 @@ public class ChannelSecurityInterceptorBeanPostProcessorTests {
@Test
public void securedChannelIsProxied() {
ChannelInvocationDefinitionSource objectDefinitionSource = new ChannelInvocationDefinitionSource();
objectDefinitionSource.addPatternMapping(Pattern.compile("secured.*"), new DefaultChannelAccessPolicy("ROLE_ADMIN", null));
ChannelSecurityInterceptor interceptor = new ChannelSecurityInterceptor(objectDefinitionSource);
ChannelSecurityMetadataSource securityMetadataSource = new ChannelSecurityMetadataSource();
securityMetadataSource.addPatternMapping(Pattern.compile("secured.*"), new DefaultChannelAccessPolicy("ROLE_ADMIN", null));
ChannelSecurityInterceptor interceptor = new ChannelSecurityInterceptor(securityMetadataSource);
ChannelSecurityInterceptorBeanPostProcessor postProcessor = new ChannelSecurityInterceptorBeanPostProcessor(interceptor);
QueueChannel securedChannel = new QueueChannel();
securedChannel.setBeanName("securedChannel");
@@ -47,9 +47,9 @@ public class ChannelSecurityInterceptorBeanPostProcessorTests {
@Test
public void nonsecuredChannelIsNotProxied() {
ChannelInvocationDefinitionSource objectDefinitionSource = new ChannelInvocationDefinitionSource();
objectDefinitionSource.addPatternMapping(Pattern.compile("secured.*"), new DefaultChannelAccessPolicy("ROLE_ADMIN", null));
ChannelSecurityInterceptor interceptor = new ChannelSecurityInterceptor(objectDefinitionSource);
ChannelSecurityMetadataSource securityMetadataSource = new ChannelSecurityMetadataSource();
securityMetadataSource.addPatternMapping(Pattern.compile("secured.*"), new DefaultChannelAccessPolicy("ROLE_ADMIN", null));
ChannelSecurityInterceptor interceptor = new ChannelSecurityInterceptor(securityMetadataSource);
ChannelSecurityInterceptorBeanPostProcessor postProcessor = new ChannelSecurityInterceptorBeanPostProcessor(interceptor);
QueueChannel channel = new QueueChannel();
channel.setBeanName("testChannel");

View File

@@ -79,9 +79,9 @@ public class ChannelSecurityInterceptorTests {
}
private static ChannelSecurityInterceptor createInterceptor(String role) throws Exception {
ChannelInvocationDefinitionSource objectDefinitionSource = new ChannelInvocationDefinitionSource();
objectDefinitionSource.addPatternMapping(Pattern.compile("secured.*"), new DefaultChannelAccessPolicy(role, null));
ChannelSecurityInterceptor interceptor = new ChannelSecurityInterceptor(objectDefinitionSource);
ChannelSecurityMetadataSource securityMetadataSource = new ChannelSecurityMetadataSource();
securityMetadataSource.addPatternMapping(Pattern.compile("secured.*"), new DefaultChannelAccessPolicy(role, null));
ChannelSecurityInterceptor interceptor = new ChannelSecurityInterceptor(securityMetadataSource);
AffirmativeBased accessDecisionManager = new AffirmativeBased();
accessDecisionManager.setDecisionVoters(Collections.singletonList((AccessDecisionVoter)new RoleVoter()));