diff --git a/config/config.gradle b/config/config.gradle index e8ecb0f285..c0e0e5327c 100644 --- a/config/config.gradle +++ b/config/config.gradle @@ -18,6 +18,7 @@ dependencies { optional project(':spring-security-web'), project(':spring-security-ldap'), project(':spring-security-openid'), + project(':spring-security-aspects'), "org.springframework:spring-web:$springVersion", "org.springframework:spring-webmvc:$springVersion", "org.aspectj:aspectjweaver:$aspectjVersion", @@ -28,7 +29,6 @@ dependencies { testCompile project(':spring-security-cas'), project(':spring-security-core').sourceSets.test.output, - project(':spring-security-aspects'), 'javax.annotation:jsr250-api:1.0', "org.springframework.ldap:spring-ldap-core:$springLdapVersion", "org.springframework:spring-expression:$springVersion", diff --git a/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecurityAspectJAutoProxyRegistrar.java b/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecurityAspectJAutoProxyRegistrar.java deleted file mode 100644 index 811c452e6f..0000000000 --- a/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecurityAspectJAutoProxyRegistrar.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2002-2013 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.security.config.annotation.method.configuration; - -import java.util.Map; - -import org.springframework.aop.config.AopConfigUtils; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; -import org.springframework.core.annotation.AnnotationAttributes; -import org.springframework.core.type.AnnotationMetadata; - -/** - * Registers an - * {@link org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator - * AnnotationAwareAspectJAutoProxyCreator} against the current - * {@link BeanDefinitionRegistry} as appropriate based on a given @ - * {@link EnableGlobalMethodSecurity} annotation. - * - *
- * Note: This class is necessary because AspectJAutoProxyRegistrar only supports - * EnableAspectJAutoProxy. - *
- * - * @author Rob Winch - * @since 3.2 - */ -class GlobalMethodSecurityAspectJAutoProxyRegistrar implements - ImportBeanDefinitionRegistrar { - - /** - * Register, escalate, and configure the AspectJ auto proxy creator based on - * the value of the @{@link EnableGlobalMethodSecurity#proxyTargetClass()} - * attribute on the importing {@code @Configuration} class. - */ - public void registerBeanDefinitions( - AnnotationMetadata importingClassMetadata, - BeanDefinitionRegistry registry) { - - BeanDefinition interceptor = registry.getBeanDefinition("methodSecurityInterceptor"); - - BeanDefinitionBuilder aspect = - BeanDefinitionBuilder.rootBeanDefinition("org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect"); - aspect.setFactoryMethod("aspectOf"); - aspect.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - aspect.addPropertyValue("securityInterceptor", interceptor); - - registry.registerBeanDefinition("annotationSecurityAspect$0", aspect.getBeanDefinition()); - } - -} \ No newline at end of file diff --git a/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecurityAspectJConfiguration.java b/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecurityAspectJConfiguration.java new file mode 100644 index 0000000000..e90f57c7e6 --- /dev/null +++ b/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecurityAspectJConfiguration.java @@ -0,0 +1,42 @@ +/* + * Copyright 2002-2013 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.security.config.annotation.method.configuration; + +import org.aopalliance.intercept.MethodInterceptor; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Role; +import org.springframework.security.access.intercept.aspectj.AspectJMethodSecurityInterceptor; +import org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect; + +/** + * Creates the AnnotationSecurityAspect for use with AspectJ based security. + * + * @author Rob Winch + * @since 3.2 + */ +class GlobalMethodSecurityAspectJConfiguration { + + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public AnnotationSecurityAspect annotationSecurityAspect(@Qualifier("methodSecurityInterceptor") MethodInterceptor methodSecurityInterceptor) { + AnnotationSecurityAspect result = AnnotationSecurityAspect.aspectOf(); + result.setSecurityInterceptor((AspectJMethodSecurityInterceptor )methodSecurityInterceptor); + return result; + } +} \ No newline at end of file diff --git a/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecuritySelector.java b/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecuritySelector.java index 8af89c51ca..baf5050628 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecuritySelector.java +++ b/config/src/main/java/org/springframework/security/config/annotation/method/configuration/GlobalMethodSecuritySelector.java @@ -48,7 +48,7 @@ final class GlobalMethodSecuritySelector implements ImportSelector { AdviceMode mode = attributes.getEnum("mode"); String autoProxyClassName = AdviceMode.PROXY == mode ? AutoProxyRegistrar.class.getName() - : GlobalMethodSecurityAspectJAutoProxyRegistrar.class.getName(); + : GlobalMethodSecurityAspectJConfiguration.class.getName(); if(skipMethodSecurityConfiguration) { return new String[] { autoProxyClassName }; }