This is an automated email from the ASF dual-hosted git repository. bdemers pushed a commit to branch aop-1-10-x in repository https://gitbox.apache.org/repos/asf/shiro.git
commit dd1de0da829d87459da68006ca72f66836bf1ef8 Author: George CAO <[email protected]> AuthorDate: Fri Oct 7 16:57:51 2022 +0800 Add unit tests for SHIRO-890 --- support/spring-boot/spring-boot-starter/pom.xml | 14 +++---- .../AspectjAndDefaultProxyCreatorTest.java | 44 ++++++++++++++++++++++ ...roAnnotationProcessorAutoConfigurationTest.java | 34 +++++++++++++++++ .../AspectjAndDefaultProxyCreatorApplication.java | 42 +++++++++++++++++++++ .../autoconfigure/AspectjEnabledApplication.java | 31 +++++++++++++++ 5 files changed, 158 insertions(+), 7 deletions(-) diff --git a/support/spring-boot/spring-boot-starter/pom.xml b/support/spring-boot/spring-boot-starter/pom.xml index 20775410..1e168399 100644 --- a/support/spring-boot/spring-boot-starter/pom.xml +++ b/support/spring-boot/spring-boot-starter/pom.xml @@ -18,7 +18,8 @@ ~ under the License. --> <!--suppress osmorcNonOsgiMavenDependency --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> @@ -32,12 +33,10 @@ <name>Apache Shiro :: Support :: Spring Boot</name> <dependencies> - <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> </dependency> - <!-- Spring --> <dependency> <groupId>org.springframework.boot</groupId> @@ -58,7 +57,6 @@ <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> - <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> @@ -69,20 +67,22 @@ <artifactId>spring-test</artifactId> <scope>test</scope> </dependency> - <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <scope>test</scope> </dependency> - <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>${commons.logging.version}</version> <scope>test</scope> </dependency> - + <dependency> + <groupId>org.aspectj</groupId> + <artifactId>aspectjweaver</artifactId> + <optional>true</optional> + </dependency> </dependencies> <build> diff --git a/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/AspectjAndDefaultProxyCreatorTest.java b/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/AspectjAndDefaultProxyCreatorTest.java new file mode 100644 index 00000000..95896954 --- /dev/null +++ b/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/AspectjAndDefaultProxyCreatorTest.java @@ -0,0 +1,44 @@ +package org.apache.shiro.spring.boot.autoconfigure; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator; +import org.springframework.aop.config.AopConfigUtils; +import org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.Arrays; + +import static org.junit.Assert.*; + +@SpringBootTest(classes = AspectjAndDefaultProxyCreatorApplication.class) +@RunWith(SpringJUnit4ClassRunner.class) +public class AspectjAndDefaultProxyCreatorTest { + + @Autowired + private ApplicationContext applicationContext; + + @Test + public void defaultAdvisorAutoProxyCreator() throws BeansException { + // There are two proxy creators before SHIRO-890 which causes problem when @EnableAspectJAutoProxy is enabled. + String[] names = new String[]{"defaultAdvisorAutoProxyCreator", AopConfigUtils.AUTO_PROXY_CREATOR_BEAN_NAME}; + for (String name : names) { + Object creator = applicationContext.getBean(name); + assertNotNull(creator); + if (!(creator instanceof DefaultAdvisorAutoProxyCreator + || creator instanceof AnnotationAwareAspectJAutoProxyCreator)) { + fail("It supposed to be one of these two types olny."); + } + } + String[] beanNames = applicationContext.getBeanNamesForType(AbstractAdvisorAutoProxyCreator.class); + assertEquals(2, beanNames.length); + Arrays.sort(names); + Arrays.sort(beanNames); + assertArrayEquals(names, beanNames); + } +} \ No newline at end of file diff --git a/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/ShiroAnnotationProcessorAutoConfigurationTest.java b/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/ShiroAnnotationProcessorAutoConfigurationTest.java new file mode 100644 index 00000000..e3552623 --- /dev/null +++ b/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/ShiroAnnotationProcessorAutoConfigurationTest.java @@ -0,0 +1,34 @@ +package org.apache.shiro.spring.boot.autoconfigure; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator; +import org.springframework.aop.config.AopConfigUtils; +import org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +@SpringBootTest(classes = AspectjEnabledApplication.class) +@RunWith(SpringJUnit4ClassRunner.class) +public class ShiroAnnotationProcessorAutoConfigurationTest { + + @Autowired + private ApplicationContext applicationContext; + + @Test + public void defaultAdvisorAutoProxyCreator() throws BeansException { + // There is only one proxy creator, and it's AnnotationAwareAspectJAutoProxyCreator as expected. + Object creator = applicationContext.getBean(AopConfigUtils.AUTO_PROXY_CREATOR_BEAN_NAME); + if (!(creator instanceof AnnotationAwareAspectJAutoProxyCreator)) { + fail("@EnableAspectJAutoProxy will create in instance of AnnotationAwareAspectJAutoProxyCreator"); + } + String[] names = applicationContext.getBeanNamesForType(AbstractAdvisorAutoProxyCreator.class); + assertEquals(1, names.length); + } +} \ No newline at end of file diff --git a/support/spring-boot/spring-boot-starter/src/test/java/org/apache/shiro/spring/boot/autoconfigure/AspectjAndDefaultProxyCreatorApplication.java b/support/spring-boot/spring-boot-starter/src/test/java/org/apache/shiro/spring/boot/autoconfigure/AspectjAndDefaultProxyCreatorApplication.java new file mode 100644 index 00000000..8e541beb --- /dev/null +++ b/support/spring-boot/spring-boot-starter/src/test/java/org/apache/shiro/spring/boot/autoconfigure/AspectjAndDefaultProxyCreatorApplication.java @@ -0,0 +1,42 @@ +package org.apache.shiro.spring.boot.autoconfigure; + +import org.apache.shiro.realm.Realm; +import org.apache.shiro.realm.text.TextConfigurationRealm; +import org.springframework.aop.config.AopConfigUtils; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.EnableAspectJAutoProxy; + +@EnableAutoConfiguration +@EnableAspectJAutoProxy +public class AspectjAndDefaultProxyCreatorApplication { + + public static void main(String... args) { + SpringApplication.run(AspectjAndDefaultProxyCreatorApplication.class); + } + + @Bean + @SuppressWarnings("Duplicates") + Realm getTextConfigurationRealm() { + + TextConfigurationRealm realm = new TextConfigurationRealm(); + realm.setUserDefinitions("joe.coder=password,user\n" + + "jill.coder=password,admin"); + + realm.setRoleDefinitions("admin=read,write\n" + + "user=read"); + realm.setCachingEnabled(true); + return realm; + } + + @Bean + @DependsOn("lifecycleBeanPostProcessor") + @ConditionalOnMissingBean(value = DefaultAdvisorAutoProxyCreator.class, name = AopConfigUtils.AUTO_PROXY_CREATOR_BEAN_NAME) + public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { + return new DefaultAdvisorAutoProxyCreator(); + } +} \ No newline at end of file diff --git a/support/spring-boot/spring-boot-starter/src/test/java/org/apache/shiro/spring/boot/autoconfigure/AspectjEnabledApplication.java b/support/spring-boot/spring-boot-starter/src/test/java/org/apache/shiro/spring/boot/autoconfigure/AspectjEnabledApplication.java new file mode 100644 index 00000000..dc7073b8 --- /dev/null +++ b/support/spring-boot/spring-boot-starter/src/test/java/org/apache/shiro/spring/boot/autoconfigure/AspectjEnabledApplication.java @@ -0,0 +1,31 @@ +package org.apache.shiro.spring.boot.autoconfigure; + +import org.apache.shiro.realm.Realm; +import org.apache.shiro.realm.text.TextConfigurationRealm; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.EnableAspectJAutoProxy; + +@EnableAutoConfiguration +@EnableAspectJAutoProxy +public class AspectjEnabledApplication { + + public static void main(String... args) { + SpringApplication.run(AspectjEnabledApplication.class); + } + + @Bean + @SuppressWarnings("Duplicates") + Realm getTextConfigurationRealm() { + + TextConfigurationRealm realm = new TextConfigurationRealm(); + realm.setUserDefinitions("joe.coder=password,user\n" + + "jill.coder=password,admin"); + + realm.setRoleDefinitions("admin=read,write\n" + + "user=read"); + realm.setCachingEnabled(true); + return realm; + } +} \ No newline at end of file
