This is an automated email from the ASF dual-hosted git repository. lprimak pushed a commit to branch 3.x in repository https://gitbox.apache.org/repos/asf/shiro.git
commit 0a1e5206ef57c754c85cf0e9bf92dd84c830a6cc Author: lprimak <[email protected]> AuthorDate: Mon Feb 2 16:43:20 2026 -0600 re-enable spring module --- .../samples/spring/config/ApplicationConfig.java | 3 +- support/pom.xml | 2 +- .../web/ShiroWebSpringAutoConfigurationTest.groovy | 3 +- .../spring/ShiroEventBusBeanPostProcessor.java | 9 ++---- .../AuthorizationAttributeSourceAdvisor.java | 3 +- .../shiro/spring/web/ShiroFilterFactoryBean.java | 37 ++++++++++++---------- .../web/config/ShiroRequestMappingConfig.java | 33 ------------------- .../spring/config/ShiroConfigurationTest.groovy | 3 +- ...oConfigurationWithOptionalComponentsTest.groovy | 3 +- .../spring/config/ShiroWebConfigurationTest.groovy | 3 +- .../config/ShiroWebFilterConfigurationTest.groovy | 3 +- 11 files changed, 32 insertions(+), 70 deletions(-) diff --git a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/ApplicationConfig.java b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/ApplicationConfig.java index 36c8a8d03..d5a16d69e 100644 --- a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/ApplicationConfig.java +++ b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/ApplicationConfig.java @@ -49,8 +49,7 @@ import javax.sql.DataSource; ShiroAnnotationProcessorConfiguration.class, ShiroWebConfiguration.class, ShiroWebFilterConfiguration.class, - JspViewsConfig.class, - ShiroRequestMappingConfig.class}) + JspViewsConfig.class}) @ComponentScan("org.apache.shiro.samples.spring") public class ApplicationConfig { diff --git a/support/pom.xml b/support/pom.xml index 6433b855f..1c78ce0b3 100644 --- a/support/pom.xml +++ b/support/pom.xml @@ -42,13 +42,13 @@ <module>jaxrs</module> <module>cdi</module> <module>jakarta-ee</module> + <module>spring</module> </modules> <profiles> <profile> <id>deferred-for-3x</id> <modules> - <module>spring</module> <module>spring-boot</module> <module>features</module> </modules> diff --git a/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/web/ShiroWebSpringAutoConfigurationTest.groovy b/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/web/ShiroWebSpringAutoConfigurationTest.groovy index 8627ccbc1..5a6612dc6 100644 --- a/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/web/ShiroWebSpringAutoConfigurationTest.groovy +++ b/support/spring-boot/spring-boot-starter/src/test/groovy/org/apache/shiro/spring/boot/autoconfigure/web/ShiroWebSpringAutoConfigurationTest.groovy @@ -32,7 +32,6 @@ import org.apache.shiro.web.servlet.AbstractShiroFilter import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest -import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests import static org.hamcrest.Matchers.contains import static org.hamcrest.Matchers.equalTo @@ -44,7 +43,7 @@ import static org.hamcrest.MatcherAssert.assertThat * @since 1.4.0 */ @SpringBootTest(classes = [ShiroWebAutoConfigurationTestApplication]) -class ShiroWebSpringAutoConfigurationTest extends AbstractJUnit4SpringContextTests { +class ShiroWebSpringAutoConfigurationTest { @Autowired private SecurityManager securityManager diff --git a/support/spring/src/main/java/org/apache/shiro/spring/ShiroEventBusBeanPostProcessor.java b/support/spring/src/main/java/org/apache/shiro/spring/ShiroEventBusBeanPostProcessor.java index 5f88f4363..45f513be9 100644 --- a/support/spring/src/main/java/org/apache/shiro/spring/ShiroEventBusBeanPostProcessor.java +++ b/support/spring/src/main/java/org/apache/shiro/spring/ShiroEventBusBeanPostProcessor.java @@ -26,6 +26,7 @@ import org.apache.shiro.util.CollectionUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; +import java.lang.reflect.Method; import java.util.List; /** @@ -49,11 +50,6 @@ public class ShiroEventBusBeanPostProcessor implements BeanPostProcessor { this.eventBus = eventBus; } - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - return bean; - } - @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof EventBusAware aware) { @@ -66,8 +62,7 @@ public class ShiroEventBusBeanPostProcessor implements BeanPostProcessor { } private boolean isEventSubscriber(Object bean) { - List annotatedMethods = ClassUtils.getAnnotatedMethods(bean.getClass(), Subscribe.class); + List<Method> annotatedMethods = ClassUtils.getAnnotatedMethods(bean.getClass(), Subscribe.class); return !CollectionUtils.isEmpty(annotatedMethods); } - } diff --git a/support/spring/src/main/java/org/apache/shiro/spring/security/interceptor/AuthorizationAttributeSourceAdvisor.java b/support/spring/src/main/java/org/apache/shiro/spring/security/interceptor/AuthorizationAttributeSourceAdvisor.java index 443c32d84..f8feee4bc 100644 --- a/support/spring/src/main/java/org/apache/shiro/spring/security/interceptor/AuthorizationAttributeSourceAdvisor.java +++ b/support/spring/src/main/java/org/apache/shiro/spring/security/interceptor/AuthorizationAttributeSourceAdvisor.java @@ -42,6 +42,7 @@ public class AuthorizationAttributeSourceAdvisor extends StaticMethodMatcherPoin private static final Logger LOGGER = LoggerFactory.getLogger(AuthorizationAttributeSourceAdvisor.class); + @SuppressWarnings("rawtypes") private static final Class<? extends Annotation>[] AUTHZ_ANNOTATION_CLASSES = new Class[] { RequiresPermissions.class, RequiresRoles.class, @@ -81,7 +82,7 @@ public class AuthorizationAttributeSourceAdvisor extends StaticMethodMatcherPoin * @return <tt>true</tt> if the method has a Shiro annotation, false otherwise. * @see org.springframework.aop.MethodMatcher#matches(java.lang.reflect.Method, Class) */ - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, Class<?> targetClass) { Method m = method; if (isAuthzAnnotationPresent(m)) { diff --git a/support/spring/src/main/java/org/apache/shiro/spring/web/ShiroFilterFactoryBean.java b/support/spring/src/main/java/org/apache/shiro/spring/web/ShiroFilterFactoryBean.java index a8e997522..0cc22c92a 100644 --- a/support/spring/src/main/java/org/apache/shiro/spring/web/ShiroFilterFactoryBean.java +++ b/support/spring/src/main/java/org/apache/shiro/spring/web/ShiroFilterFactoryBean.java @@ -119,7 +119,8 @@ import java.util.Map; * @see org.springframework.web.filter.DelegatingFilterProxy DelegatingFilterProxy * @since 1.0 */ -public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { +@SuppressWarnings("checkstyle:MethodCount") +public class ShiroFilterFactoryBean implements FactoryBean<Filter>, BeanPostProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(ShiroFilterFactoryBean.class); @@ -143,11 +144,11 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { private ShiroFilterConfiguration filterConfiguration; public ShiroFilterFactoryBean() { - this.filters = new LinkedHashMap<String, Filter>(); + this.filters = new LinkedHashMap<>(); this.globalFilters = new ArrayList<>(); this.globalFilters.add(DefaultFilter.invalidRequest.name()); //order matters! - this.filterChainDefinitionMap = new LinkedHashMap<String, String>(); + this.filterChainDefinitionMap = new LinkedHashMap<>(); this.filterConfiguration = new ShiroFilterConfiguration(); } @@ -210,7 +211,7 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { * configure the 'loginUrl' property manually on each filter instance, and instead that can be configured once * via this attribute. * <p/> - * <b>*</b>If a filter already has already been explicitly configured with a value, it will + * <b>*</b>If a filter has already been explicitly configured with a value, it will * <em>not</em> receive this value. Individual filter configuration overrides this global convenience property. * * @param loginUrl the application's login URL to apply to as a convenience to all discovered @@ -242,7 +243,7 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { * configure the 'successUrl' property manually on each filter instance, and instead that can be configured once * via this attribute. * <p/> - * <b>*</b>If a filter already has already been explicitly configured with a value, it will + * <b>*</b>If a filter has already been explicitly configured with a value, it will * <em>not</em> receive this value. Individual filter configuration overrides this global convenience property. * * @param successUrl the application's after-login success URL to apply to as a convenience to all discovered @@ -274,7 +275,7 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { * configure the 'unauthorizedUrl' property manually on each filter instance, and instead that can be configured once * via this attribute. * <p/> - * <b>*</b>If a filter already has already been explicitly configured with a value, it will + * <b>*</b>If a filter has already been explicitly configured with a value, it will * <em>not</em> receive this value. Individual filter configuration overrides this global convenience property. * * @param unauthorizedUrl the application's 'unauthorized' URL to apply to as a convenience to all discovered @@ -286,15 +287,15 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { } /** - * @return true if filter chain matching should be case insensitive. + * @return true if filter chain matching should be case-insensitive. */ public boolean isCaseInsensitive() { return caseInsensitive; } /** - * Sets whether filter chain matching should be case insensitive. - * @param caseInsensitive true if filter chain matching should be case insensitive. + * Sets whether filter chain matching should be case-insensitive. + * @param caseInsensitive true if filter chain matching should be case-insensitive. */ public void setCaseInsensitive(boolean caseInsensitive) { this.caseInsensitive = caseInsensitive; @@ -414,7 +415,8 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { * @return the application's Shiro Filter instance used to filter incoming web requests. * @throws Exception if there is a problem creating the {@code Filter} instance. */ - public Object getObject() throws Exception { + @Override + public Filter getObject() throws Exception { if (instance == null) { instance = createInstance(); } @@ -426,7 +428,7 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { * * @return <code>{@link org.apache.shiro.web.servlet.AbstractShiroFilter}.class</code> */ - public Class getObjectType() { + public Class<?> getObjectType() { return SpringShiroFilter.class; } @@ -435,6 +437,7 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { * * @return {@code true} always. There is almost always only ever 1 Shiro {@code Filter} per web application. */ + @Override public boolean isSingleton() { return true; } @@ -585,6 +588,7 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { * instance to the internal {@link #setFilters(java.util.Map) filters map} that will be referenced * later during filter chain construction. */ + @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof Filter filter) { LOGGER.debug("Found filter chain candidate filter '{}'", beanName); @@ -600,6 +604,7 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { * Does nothing - only exists to satisfy the BeanPostProcessor interface and immediately returns the * {@code bean} argument. */ + @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } @@ -615,15 +620,15 @@ public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor { */ private static final class SpringShiroFilter extends AbstractShiroFilter { - protected SpringShiroFilter(WebSecurityManager webSecurityManager, - FilterChainResolver resolver, - ShiroFilterConfiguration filterConfiguration) { + private SpringShiroFilter(WebSecurityManager webSecurityManager, + FilterChainResolver resolver, + ShiroFilterConfiguration filterConfiguration) { super(); if (webSecurityManager == null) { throw new IllegalArgumentException("WebSecurityManager property cannot be null."); } - setSecurityManager(webSecurityManager); - setShiroFilterConfiguration(filterConfiguration); + super.setSecurityManager(webSecurityManager); + super.setShiroFilterConfiguration(filterConfiguration); if (resolver != null) { setFilterChainResolver(resolver); diff --git a/support/spring/src/main/java/org/apache/shiro/spring/web/config/ShiroRequestMappingConfig.java b/support/spring/src/main/java/org/apache/shiro/spring/web/config/ShiroRequestMappingConfig.java deleted file mode 100644 index 56f4cad08..000000000 --- a/support/spring/src/main/java/org/apache/shiro/spring/web/config/ShiroRequestMappingConfig.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.shiro.spring.web.config; - -import org.apache.shiro.spring.web.ShiroUrlPathHelper; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; - -@Configuration -public class ShiroRequestMappingConfig { - - public ShiroRequestMappingConfig( - @Qualifier("requestMappingHandlerMapping") RequestMappingHandlerMapping requestMappingHandlerMapping) { - requestMappingHandlerMapping.setUrlPathHelper(new ShiroUrlPathHelper()); - } -} diff --git a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroConfigurationTest.groovy b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroConfigurationTest.groovy index d3e09c419..a365cd194 100644 --- a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroConfigurationTest.groovy +++ b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroConfigurationTest.groovy @@ -31,7 +31,6 @@ import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.test.context.junit.jupiter.SpringJUnitConfig -import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests import static org.hamcrest.MatcherAssert.assertThat import static org.hamcrest.Matchers.* @@ -42,7 +41,7 @@ import static org.junit.jupiter.api.Assertions.* */ @SpringJUnitConfig(classes = [RealmTestConfiguration, ShiroConfiguration]) @ExtendWith(SpringExtension.class) -class ShiroConfigurationTest extends AbstractJUnit4SpringContextTests { +class ShiroConfigurationTest { @Autowired private SecurityManager securityManager diff --git a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroConfigurationWithOptionalComponentsTest.groovy b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroConfigurationWithOptionalComponentsTest.groovy index e9ecb35cd..676e1066c 100644 --- a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroConfigurationWithOptionalComponentsTest.groovy +++ b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroConfigurationWithOptionalComponentsTest.groovy @@ -32,7 +32,6 @@ import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.test.context.junit.jupiter.SpringJUnitConfig -import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests import static org.junit.jupiter.api.Assertions.* import static org.hamcrest.Matchers.* @@ -43,7 +42,7 @@ import static org.hamcrest.MatcherAssert.* */ @SpringJUnitConfig(classes = [RealmTestConfiguration, OptionalComponentsTestConfiguration, ShiroConfiguration, ShiroAnnotationProcessorConfiguration]) @ExtendWith(SpringExtension.class) -class ShiroConfigurationWithOptionalComponentsTest extends AbstractJUnit4SpringContextTests { +class ShiroConfigurationWithOptionalComponentsTest { @Autowired private SecurityManager securityManager diff --git a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroWebConfigurationTest.groovy b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroWebConfigurationTest.groovy index d33ceb250..6a76fae2d 100644 --- a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroWebConfigurationTest.groovy +++ b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroWebConfigurationTest.groovy @@ -34,7 +34,6 @@ import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.test.context.junit.jupiter.SpringJUnitConfig -import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests import static org.hamcrest.MatcherAssert.assertThat import static org.hamcrest.Matchers.* @@ -45,7 +44,7 @@ import static org.junit.jupiter.api.Assertions.* */ @SpringJUnitConfig(classes = [RealmTestConfiguration, ShiroConfiguration, ShiroWebConfiguration, ShiroWebFilterConfiguration]) @ExtendWith(SpringExtension.class) -class ShiroWebConfigurationTest extends AbstractJUnit4SpringContextTests { +class ShiroWebConfigurationTest { @Autowired private SecurityManager securityManager diff --git a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroWebFilterConfigurationTest.groovy b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroWebFilterConfigurationTest.groovy index e5223432c..cdc4ecca2 100644 --- a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroWebFilterConfigurationTest.groovy +++ b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroWebFilterConfigurationTest.groovy @@ -38,7 +38,6 @@ import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.test.context.junit.jupiter.SpringJUnitConfig -import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests import org.springframework.test.context.web.WebAppConfiguration import jakarta.servlet.Filter @@ -60,7 +59,7 @@ import static org.hamcrest.Matchers.is; @WebAppConfiguration @SpringJUnitConfig(classes = [RealmTestConfiguration, FilterConfiguration, ShiroConfiguration, ShiroWebFilterConfiguration]) @ExtendWith(SpringExtension.class) -class ShiroWebFilterConfigurationTest extends AbstractJUnit4SpringContextTests { +class ShiroWebFilterConfigurationTest { @Autowired private SecurityManager securityManager
