Search in sources :

Example 1 with DefaultChannelAccessPolicy

use of org.springframework.integration.security.channel.DefaultChannelAccessPolicy in project spring-integration by spring-projects.

the class SecurityIntegrationConfigurationInitializer method initialize.

@Override
@SuppressWarnings("unchecked")
public void initialize(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
    Map<String, ManagedSet<String>> securityInterceptors = new ManagedMap<String, ManagedSet<String>>();
    Map<String, Map<Pattern, ChannelAccessPolicy>> policies = new HashMap<String, Map<Pattern, ChannelAccessPolicy>>();
    for (String beanName : registry.getBeanDefinitionNames()) {
        BeanDefinition beanDefinition = registry.getBeanDefinition(beanName);
        if (ChannelSecurityInterceptor.class.getName().equals(beanDefinition.getBeanClassName())) {
            BeanDefinition metadataSource = (BeanDefinition) beanDefinition.getConstructorArgumentValues().getIndexedArgumentValue(0, BeanDefinition.class).getValue();
            Map<String, ?> value = (Map<String, ?>) metadataSource.getConstructorArgumentValues().getIndexedArgumentValue(0, Map.class).getValue();
            ManagedSet<String> patterns = new ManagedSet<String>();
            if (!securityInterceptors.containsKey(beanName)) {
                securityInterceptors.put(beanName, patterns);
            } else {
                patterns = securityInterceptors.get(beanName);
            }
            patterns.addAll(value.keySet());
        } else if (beanDefinition instanceof AnnotatedBeanDefinition) {
            if (beanDefinition.getSource() instanceof MethodMetadata) {
                MethodMetadata beanMethod = (MethodMetadata) beanDefinition.getSource();
                String annotationType = SecuredChannel.class.getName();
                if (beanMethod.isAnnotated(annotationType)) {
                    Map<String, Object> securedAttributes = beanMethod.getAnnotationAttributes(annotationType);
                    String[] interceptors = (String[]) securedAttributes.get("interceptor");
                    String[] sendAccess = (String[]) securedAttributes.get("sendAccess");
                    String[] receiveAccess = (String[]) securedAttributes.get("receiveAccess");
                    ChannelAccessPolicy accessPolicy = new DefaultChannelAccessPolicy(sendAccess, receiveAccess);
                    for (String interceptor : interceptors) {
                        ManagedSet<String> patterns = new ManagedSet<String>();
                        if (!securityInterceptors.containsKey(interceptor)) {
                            securityInterceptors.put(interceptor, patterns);
                        } else {
                            patterns = securityInterceptors.get(interceptor);
                        }
                        patterns.add(beanName);
                        Map<Pattern, ChannelAccessPolicy> mapping = new HashMap<Pattern, ChannelAccessPolicy>();
                        if (!policies.containsKey(interceptor)) {
                            policies.put(interceptor, mapping);
                        } else {
                            mapping = policies.get(interceptor);
                        }
                        mapping.put(Pattern.compile(beanName), accessPolicy);
                    }
                }
            }
        }
    }
    if (!securityInterceptors.isEmpty()) {
        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ChannelSecurityInterceptorBeanPostProcessor.class).addConstructorArgValue(securityInterceptors);
        if (!policies.isEmpty()) {
            builder.addConstructorArgValue(policies);
        }
        registry.registerBeanDefinition(CHANNEL_SECURITY_INTERCEPTOR_BPP_BEAN_NAME, builder.getBeanDefinition());
    }
}
Also used : ManagedSet(org.springframework.beans.factory.support.ManagedSet) Pattern(java.util.regex.Pattern) AnnotatedBeanDefinition(org.springframework.beans.factory.annotation.AnnotatedBeanDefinition) DefaultChannelAccessPolicy(org.springframework.integration.security.channel.DefaultChannelAccessPolicy) HashMap(java.util.HashMap) BeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry) AnnotatedBeanDefinition(org.springframework.beans.factory.annotation.AnnotatedBeanDefinition) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder) ChannelAccessPolicy(org.springframework.integration.security.channel.ChannelAccessPolicy) DefaultChannelAccessPolicy(org.springframework.integration.security.channel.DefaultChannelAccessPolicy) SecuredChannel(org.springframework.integration.security.channel.SecuredChannel) MethodMetadata(org.springframework.core.type.MethodMetadata) ManagedMap(org.springframework.beans.factory.support.ManagedMap) HashMap(java.util.HashMap) Map(java.util.Map) ChannelSecurityInterceptor(org.springframework.integration.security.channel.ChannelSecurityInterceptor) ManagedMap(org.springframework.beans.factory.support.ManagedMap)

Aggregations

HashMap (java.util.HashMap)1 Map (java.util.Map)1 Pattern (java.util.regex.Pattern)1 AnnotatedBeanDefinition (org.springframework.beans.factory.annotation.AnnotatedBeanDefinition)1 BeanDefinition (org.springframework.beans.factory.config.BeanDefinition)1 BeanDefinitionBuilder (org.springframework.beans.factory.support.BeanDefinitionBuilder)1 BeanDefinitionRegistry (org.springframework.beans.factory.support.BeanDefinitionRegistry)1 ManagedMap (org.springframework.beans.factory.support.ManagedMap)1 ManagedSet (org.springframework.beans.factory.support.ManagedSet)1 MethodMetadata (org.springframework.core.type.MethodMetadata)1 ChannelAccessPolicy (org.springframework.integration.security.channel.ChannelAccessPolicy)1 ChannelSecurityInterceptor (org.springframework.integration.security.channel.ChannelSecurityInterceptor)1 DefaultChannelAccessPolicy (org.springframework.integration.security.channel.DefaultChannelAccessPolicy)1 SecuredChannel (org.springframework.integration.security.channel.SecuredChannel)1