updating names to match refactoring: securityMetadataSource instead of objectDefinitionSource
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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()));
|
||||
|
||||
Reference in New Issue
Block a user