From 899593cf62f62d218b4637dc1b0c63cf1cdbaf39 Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Mon, 3 Mar 2025 23:01:15 +0000 Subject: [PATCH 01/11] Update to 3.0.0 Includes version bumps: - Java: 11 -> 17 - Ehcache: 2.6 -> 3.10 - Guice: 6 -> 7 - Jetty: 9.4.56.v2024.. -> 12.0 - `org.eclipse.jetty` -> `org.eclipse.jetty.ee10` - Jakarta EE: 8 -> 10 - Activation: 1.2 -> 2.1 - Annotation: 1.3 -> 2.1 - Enterprise CDI API: 2.0 -> 4.0 - JSON API: 1.1 -> 2.1 - JSON Bind: 1.0 -> 3.0 - Servlet: 4.0 -> 6.0 - Servlet JSP API: 2.2 -> 3.1 - Validation API: 2.0 -> 3.0 - WS RS API: 2.1 -> 3.1 - XML Bind: 2.3 -> 4.0 - Omnifaces: 4.6.1 - CXF RT Client: 3.6 -> 4.0 - Glassfish JAXB RT: 2.3 -> 4.0 - Spring: 5.3 -> 6.2 - Spring Boot: 2.7 -> 3.4 - Hibernate: 5.6 -> 6.6 (sample project) Concerns: - Ehcache migration most certainly needs revision - CI untested (specially Jenkins CD) - `flowlogix`, `omnifaces`, and a few other libs I have no knowledge of, certainly need attention - Spring remoting seems to have been dropped from Spring Context, not sure if replaceable Known issues: - No immediate suitable replacement for `org.eclipse.jetty:apache-jstl` - Ehcache 3.10 is pulling earlier version of jaxb runtime -> conflicting - Added exclusion to circumvent woes - Some web integration tests aren't up to speed - Embedded jetty-based ITs fail, server reports 503 - Arquillian IT fails - Meecrowave support missing (solved in unreleased 2.0.0?) --- .github/workflows/maven.yml | 2 +- bom/pom.xml | 8 - .../java/org/apache/shiro/config/Ini.java | 6 +- .../shiro/config/ogdl/ReflectionBuilder.java | 39 +++-- config/pom.xml | 1 - .../shiro/authc/AbstractAuthenticator.java | 4 +- .../org/apache/shiro/authc/SimpleAccount.java | 8 +- .../shiro/authc/SimpleAuthenticationInfo.java | 15 +- .../credential/DefaultPasswordService.java | 4 +- .../credential/HashedCredentialsMatcher.java | 4 +- .../authc/credential/PasswordMatcher.java | 7 +- .../pam/AbstractAuthenticationStrategy.java | 4 +- .../authc/pam/AllSuccessfulStrategy.java | 4 +- .../authc/pam/ModularRealmAuthenticator.java | 4 +- .../shiro/authz/ModularRealmAuthorizer.java | 8 +- .../org/apache/shiro/authz/SimpleRole.java | 3 +- .../authz/aop/DenyAllAnnotationHandler.java | 2 +- .../authz/aop/PermitAllAnnotationHandler.java | 4 +- .../aop/RolesAllowedAnnotationHandler.java | 2 +- .../authz/permission/DomainPermission.java | 2 + .../authz/permission/WildcardPermission.java | 3 +- .../shiro/ini/IniSecurityManagerFactory.java | 15 +- .../shiro/mgt/AbstractRememberMeManager.java | 2 +- .../mgt/AuthenticatingSecurityManager.java | 4 +- .../shiro/mgt/AuthorizingSecurityManager.java | 4 +- .../shiro/mgt/CachingSecurityManager.java | 4 +- .../shiro/mgt/DefaultSecurityManager.java | 4 +- .../shiro/mgt/RealmSecurityManager.java | 8 +- .../shiro/mgt/SessionsSecurityManager.java | 8 +- .../shiro/realm/ldap/DefaultLdapRealm.java | 3 +- .../realm/ldap/JndiLdapContextFactory.java | 4 +- .../org/apache/shiro/session/Session.java | 2 +- .../mgt/AbstractValidatingSessionManager.java | 8 +- .../session/mgt/DefaultSessionContext.java | 2 + .../session/mgt/DefaultSessionManager.java | 11 +- .../shiro/session/mgt/SessionContext.java | 2 +- .../shiro/session/mgt/SimpleSession.java | 5 +- .../session/mgt/eis/CachingSessionDAO.java | 4 +- .../subject/SimplePrincipalCollection.java | 9 +- .../support/DefaultSubjectContext.java | 4 +- .../subject/support/DelegatingSubject.java | 7 +- .../subject/support/SubjectThreadState.java | 4 +- .../org/apache/shiro/util/MapContext.java | 2 + .../aop/DenyAllAnnotationHandlerTest.java | 2 +- .../aop/PermitAllAnnotationHandlerTest.java | 2 +- .../RolesAllowedAnnotationHandlerTest.java | 2 +- .../text/TextConfigurationRealmTest.java | 2 +- .../mgt/DefaultSessionManagerTest.java | 2 +- core/src/test/resources/log4j2-list.xml | 2 +- core/src/test/resources/log4j2-test.xml | 2 +- .../shiro/crypto/hash/AbstractCryptHash.java | 5 +- .../shiro/crypto/hash/AbstractHash.java | 5 +- .../apache/shiro/crypto/hash/SimpleHash.java | 9 +- crypto/pom.xml | 1 - .../support/hashes/argon2/Argon2Hash.java | 2 + .../support/hashes/bcrypt/BCryptHash.java | 2 + .../support/hashes/bcrypt/BCryptProvider.java | 4 +- .../shiro/event/support/DefaultEventBus.java | 3 +- .../support/EventListenerComparator.java | 6 +- integration-tests/{guice4 => guice}/pom.xml | 54 ++---- .../guice/SampleShiroGuiceBootstrap.java | 4 +- .../guice/SampleShiroServletModule.java | 4 +- .../src/main/resources/log4j2.xml | 4 +- .../src/main/webapp/WEB-INF/shiro.ini | 0 .../src/main/webapp/WEB-INF/web.xml | 6 +- .../src/main/webapp/account/index.jsp | 0 .../src/main/webapp/home.jsp | 0 .../src/main/webapp/include.jsp | 0 .../src/main/webapp/index.jsp | 0 .../src/main/webapp/login.jsp | 0 .../src/main/webapp/style.css | 0 .../samples/guice/ContainerIntegrationIT.java | 0 integration-tests/guice3/pom.xml | 152 ----------------- .../guice/SampleShiroServletModule.java | 89 ---------- .../guice3/src/main/resources/log4j2.xml | 68 -------- .../guice3/src/main/webapp/WEB-INF/web.xml | 43 ----- .../guice/SampleShiroGuiceBootstrap.java | 43 ----- .../guice4/src/main/webapp/WEB-INF/shiro.ini | 53 ------ .../guice4/src/main/webapp/account/index.jsp | 36 ---- .../guice4/src/main/webapp/home.jsp | 69 -------- .../guice4/src/main/webapp/include.jsp | 22 --- .../guice4/src/main/webapp/index.jsp | 21 --- .../guice4/src/main/webapp/login.jsp | 110 ------------ .../guice4/src/main/webapp/style.css | 47 ------ .../samples/guice/ContainerIntegrationIT.java | 79 --------- integration-tests/jakarta-ee/pom.xml | 12 +- .../shiro/testing/cdi/CipherKeyGenerator.java | 2 +- .../testing/cdi/ComponentInjectionBean.java | 4 +- .../shiro/testing/jakarta/ee/FormBean.java | 2 +- .../testing/jakarta/ee/PropertyPrincipal.java | 4 +- .../testing/jakarta/ee/PropertyRealm.java | 4 +- .../ee/ProtectedFacesViewScopedBean.java | 14 +- .../ee/ProtectedOmniViewScopedBean.java | 12 +- .../jakarta/ee/ProtectedOneMethod.java | 2 +- .../ee/ProtectedSessionScopedBean.java | 12 +- .../jakarta/ee/ProtectedStatelessBean.java | 2 +- .../jakarta/ee/StatisticsResource.java | 12 +- .../testing/jakarta/ee/UnprotectedFacade.java | 6 +- .../shiro/testing/jakarta/ee/UseFallback.java | 6 +- .../jakarta/ee/servlets/ExceptionServlet.java | 14 +- .../ee/servlets/InvalidateSessionServlet.java | 13 +- .../jakarta/ee/servlets/LogoutServlet.java | 13 +- .../jakarta/ee/servlets/RestConfig.java | 4 +- .../apache/shiro/testing/jaxrs/JsonPojo.java | 2 + .../shiro/testing/jaxrs/RolesAllowedBean.java | 10 +- .../shiro/testing/jaxrs/TestApplication.java | 12 +- .../shiro/testing/jaxrs/WhoamiBean.java | 4 +- .../shiro/testing/jaxrs/WhoamiResource.java | 16 +- .../logcapture/LogCaptureSingleton.java | 8 +- .../WEB-INF/errorpages/invalidErrorPage.xhtml | 10 +- .../src/main/webapp/WEB-INF/faces-config.xml | 6 +- .../src/main/webapp/WEB-INF/web.xml | 16 +- .../testing/cdi/ComponentInjectionIT.java | 5 +- .../shiro/testing/jakarta/ee/Deployments.java | 3 +- .../testing/jakarta/ee/ShiroAuthFormsIT.java | 3 +- .../testing/jakarta/ee/ShiroBeansIT.java | 14 +- .../shiro/testing/jaxrs/NoIniJaxRsIT.java | 10 +- integration-tests/jaxrs/app/pom.xml | 23 ++- .../testing/jaxrs/app/JaxRsApplication.java | 6 +- .../jaxrs/app/config/JaxRsShiroFeature.java | 6 +- .../jaxrs/app/config/ShiroListener.java | 4 +- .../jaxrs/app/config/ShiroServletFilter.java | 6 +- .../app/dao/InMemoryStormtrooperDao.java | 4 +- .../jaxrs/app/json/JsonbConfigProvider.java | 14 +- .../app/json/StormtrooperIdConverter.java | 6 +- .../testing/jaxrs/app/model/Stormtrooper.java | 4 +- .../jaxrs/app/model/StormtrooperTemplate.java | 4 +- .../app/resources/StormtrooperResource.java | 20 +-- .../app/src/main/resources/META-INF/beans.xml | 5 +- .../app/src/main/webapp/WEB-INF/beans.xml | 6 +- integration-tests/jaxrs/meecrowave/pom.xml | 1 + integration-tests/jaxrs/openliberty/pom.xml | 8 +- .../src/main/liberty/config/server.xml | 8 +- integration-tests/jaxrs/tests/pom.xml | 30 ++-- .../jaxrs/tests/AbstractShiroJaxRsIT.java | 12 +- integration-tests/pom.xml | 3 +- integration-tests/support/pom.xml | 52 +++--- .../testing/web/AbstractContainerIT.java | 77 +-------- lang/pom.xml | 8 +- .../apache/shiro/lang/codec/CodecSupport.java | 36 ++-- .../apache/shiro/lang/io/ResourceUtils.java | 43 +++-- .../apache/shiro/lang/util/ByteSource.java | 24 +-- .../shiro/lang/util/ByteSourceWrapper.java | 8 +- .../org/apache/shiro/lang/util/ByteUtils.java | 6 +- .../apache/shiro/lang/util/ClassUtils.java | 51 +++++- .../shiro/lang/util/JspEngineDependency.java | 2 +- .../shiro/lang/util/LifecycleUtils.java | 12 +- .../shiro/lang/util/SimpleByteSource.java | 3 +- pom.xml | 159 ++++-------------- samples/guice/pom.xml | 19 +-- .../guice/SampleShiroGuiceBootstrap.java | 4 +- ...ampleShiroNativeSessionsServletModule.java | 4 +- .../guice/SampleShiroServletModule.java | 4 +- samples/guice/src/main/resources/log4j2.xml | 2 +- samples/guice/src/main/webapp/WEB-INF/web.xml | 6 +- .../samples/guice/ContainerIntegrationIT.java | 3 +- .../src/main/resources/log4j2.xml | 2 +- .../quickstart/src/main/resources/log4j2.xml | 2 +- samples/servlet-plugin/pom.xml | 32 ++-- .../src/main/resources/log4j2.xml | 2 +- .../src/main/webapp/WEB-INF/web.xml | 6 +- samples/spring-boot-3-web/pom.xml | 15 +- samples/spring-boot-web/pom.xml | 6 +- .../apache/shiro/samples/HelloController.java | 2 +- .../samples/RestrictedErrorController.java | 2 +- samples/spring-boot/pom.xml | 4 +- .../org/apache/shiro/samples/QuickStart.java | 2 +- samples/spring-hibernate/pom.xml | 47 +++--- .../samples/sprhib/dao/HibernateUserDAO.java | 12 +- .../shiro/samples/sprhib/model/Role.java | 18 +- .../shiro/samples/sprhib/model/User.java | 20 +-- .../sprhib/web/CurrentUserInterceptor.java | 4 +- .../sprhib/web/ManageUsersController.java | 7 +- .../sprhib/web/SecurityController.java | 7 +- .../samples/sprhib/web/SignupController.java | 8 +- .../src/main/resources/ehcache.xml | 69 ++++---- .../src/main/webapp/WEB-INF/web.xml | 6 +- samples/spring-mvc/pom.xml | 29 +++- .../spring/BootstrapDataPopulator.java | 42 ++--- .../spring/config/ApplicationConfig.java | 23 +-- .../spring/config/RemotingServletConfig.java | 46 ----- .../config/ServletApplicationInitializer.java | 13 +- .../samples/spring/web/IndexController.java | 7 +- .../samples/spring/web/JnlpController.java | 8 +- .../samples/spring/web/LoginController.java | 11 +- .../samples/spring/web/LogoutController.java | 8 +- .../spring/web/RootRedirectController.java | 4 +- .../spring-mvc/src/main/resources/ehcache.xml | 54 +++--- samples/spring/pom.xml | 5 +- .../shiro/samples/spring/QuickStart.java | 2 +- samples/web-jakarta/pom.xml | 10 +- .../web-jakarta/src/main/resources/log4j2.xml | 2 +- .../src/main/webapp/WEB-INF/web.xml | 6 +- .../jakarta/JakartaAbstractContainerIT.java | 2 + .../web-jakarta/src/test/resources/log4j2.xml | 2 +- samples/web/pom.xml | 32 ++-- samples/web/src/main/resources/log4j2.xml | 2 +- samples/web/src/main/webapp/WEB-INF/web.xml | 6 +- support/aspectj/pom.xml | 4 - support/cdi/pom.xml | 35 +--- .../shiro/cdi/AnnotatedTypeWrapper.java | 2 +- .../java/org/apache/shiro/cdi/AopHelper.java | 6 +- .../shiro/cdi/ShiroComponentProducer.java | 8 +- .../shiro/cdi/ShiroSecureAnnotation.java | 2 +- .../shiro/cdi/ShiroSecurityExtension.java | 14 +- .../shiro/cdi/ShiroSecurityInterceptor.java | 12 +- .../cdi/annotations/NoSessionCreation.java | 2 +- .../shiro/cdi/annotations/Principal.java | 2 +- .../cdi/src/main/resources/META-INF/beans.xml | 5 +- ...> jakarta.enterprise.inject.spi.Extension} | 0 .../shiro/cdi/AnnotatedTypeWrapperTest.java | 6 +- .../org/apache/shiro/cdi/AopHelperTest.java | 2 +- support/ehcache/pom.xml | 18 +- .../apache/shiro/cache/ehcache/EhCache.java | 74 ++++---- .../shiro/cache/ehcache/EhCacheManager.java | 113 +++++++++---- .../apache/shiro/cache/ehcache/ehcache.xml | 59 ++++--- .../cache/ehcache/EhCacheManagerTest.java | 12 +- .../src/test/resources/log4j2-test.xml | 2 +- support/features/pom.xml | 2 +- .../features/src/main/resources/features.xml | 4 +- support/guice/pom.xml | 13 +- .../apache/shiro/guice/BeanTypeListener.java | 3 +- .../org/apache/shiro/guice/ShiroModule.java | 2 +- .../web/FilterChainResolverProvider.java | 2 +- .../shiro/guice/web/GuiceShiroFilter.java | 2 +- .../shiro/guice/web/ShiroWebModule.java | 12 +- .../shiro/guice/web/SimpleFilterChain.java | 10 +- .../guice/web/SimpleFilterChainResolver.java | 8 +- .../shiro/guice/web/WebGuiceEnvironment.java | 4 +- .../shiro/guice/aop/ShiroAopModuleTest.java | 7 +- .../shiro/guice/web/DefaultFiltersTest.java | 2 +- .../web/FilterChainResolverProviderTest.java | 2 +- .../shiro/guice/web/FilterConfigTest.java | 8 +- .../shiro/guice/web/ShiroWebModuleTest.java | 61 +++---- .../web/SimpleFilterChainResolverTest.java | 12 +- .../guice/web/SimpleFilterChainTest.java | 8 +- .../guice/web/WebGuiceEnvironmentTest.java | 2 +- support/jakarta-ee/pom.xml | 36 +--- .../shiro/ee/cdi/ShiroFacesViewScoped.java | 4 +- .../shiro/ee/cdi/ShiroOmniViewScoped.java | 2 +- .../shiro/ee/cdi/ShiroScopeContext.java | 19 ++- .../ee/cdi/ShiroSessionScopeExtension.java | 22 +-- .../shiro/ee/cdi/ShiroSessionScoped.java | 2 +- .../shiro/ee/faces/tags/AuthenticatedTag.java | 2 +- .../faces/tags/AuthenticationTagHandler.java | 10 +- .../apache/shiro/ee/faces/tags/GuestTag.java | 2 +- .../ee/faces/tags/HasAnyPermissionTag.java | 2 +- .../shiro/ee/faces/tags/HasAnyRolesTag.java | 2 +- .../shiro/ee/faces/tags/HasPermissionTag.java | 2 +- .../shiro/ee/faces/tags/HasRoleTag.java | 2 +- .../ee/faces/tags/LacksPermissionTag.java | 2 +- .../shiro/ee/faces/tags/LacksRoleTag.java | 2 +- .../ee/faces/tags/NotAuthenticatedTag.java | 2 +- .../ee/faces/tags/PermissionTagHandler.java | 14 +- .../shiro/ee/faces/tags/PrincipalTag.java | 2 +- .../shiro/ee/faces/tags/RememberedTag.java | 2 +- .../shiro/ee/faces/tags/SecureComponent.java | 4 +- .../shiro/ee/faces/tags/SecureTagHandler.java | 4 +- .../apache/shiro/ee/faces/tags/UserTag.java | 2 +- .../filters/AuthenticationFilterDelegate.java | 6 +- .../ee/filters/FormAuthenticationFilter.java | 6 +- .../shiro/ee/filters/FormResubmitSupport.java | 34 ++-- .../filters/FormResubmitSupportCookies.java | 8 +- .../org/apache/shiro/ee/filters/Forms.java | 8 +- .../apache/shiro/ee/filters/LogoutFilter.java | 6 +- .../filters/PassThruAuthenticationFilter.java | 4 +- .../apache/shiro/ee/filters/ShiroFilter.java | 25 ++- .../apache/shiro/ee/filters/SslFilter.java | 6 +- .../listeners/EnvironmentLoaderListener.java | 10 +- .../shiro/ee/listeners/IniEnvironment.java | 2 +- .../shiro/ee/util/JakartaTransformer.java | 38 ----- .../src/main/resources/META-INF/beans.xml | 5 +- .../main/resources/META-INF/faces-config.xml | 6 +- ...> jakarta.enterprise.inject.spi.Extension} | 0 .../resources/META-INF/shiro-faces.taglib.xml | 6 +- .../shiro/ee/cdi/ShiroScopeContextTest.java | 12 +- .../shiro/ee/filters/FormSupportTest.java | 83 +++++---- support/jaxrs/pom.xml | 8 +- .../jaxrs/AnnotationAuthorizationFilter.java | 10 +- .../jaxrs/ShiroAnnotationFilterFeature.java | 14 +- .../apache/shiro/web/jaxrs/ShiroFeature.java | 8 +- .../shiro/web/jaxrs/ShiroSecurityContext.java | 4 +- .../jaxrs/SubjectPrincipalRequestFilter.java | 10 +- ...authenticatedExceptionExceptionMapper.java | 6 +- .../UnauthorizedExceptionExceptionMapper.java | 6 +- .../web/jaxrs/ShiroSecurityContextTest.groovy | 4 +- .../SubjectPrincipalRequestFilterTest.groovy | 4 +- ...horizedExceptionExceptionMapperTest.groovy | 4 +- support/quartz/pom.xml | 2 +- .../main/resources/META-INF/web-fragment.xml | 6 +- .../ShiroWebFilterConfiguration.java | 2 +- .../src/test/resources/logback.xml | 4 +- support/spring/pom.xml | 4 +- .../spring/LifecycleBeanPostProcessor.java | 8 +- .../ShiroEventBusBeanPostProcessor.java | 4 +- .../SecureRemoteInvocationExecutor.java | 124 -------------- .../SecureRemoteInvocationFactory.java | 144 ---------------- .../shiro/spring/remoting/package-info.java | 23 --- .../spring/web/ShiroFilterFactoryBean.java | 28 ++- .../shiro/spring/web/ShiroUrlPathHelper.java | 2 +- .../AbstractShiroWebFilterConfiguration.java | 2 +- .../config/ShiroBeanConfigurationTest.groovy | 4 +- .../config/ShiroConfigurationTest.groovy | 4 +- ...igurationWithOptionalComponentsTest.groovy | 4 +- .../config/ShiroWebConfigurationTest.groovy | 4 +- .../ShiroWebFilterConfigurationTest.groovy | 16 +- .../config/ShiroWebConfigurationTest.groovy | 4 +- .../ShiroWebConfigurationWithCacheTest.groovy | 4 +- .../AbstractAuthorizationAnnotationTest.java | 7 +- .../DapcAuthorizationAnnotationTest.java | 7 +- .../SchemaAuthorizationAnnotationTest.java | 7 +- .../apache/shiro/spring/web/DummyFilter.java | 12 +- .../web/ShiroFilterFactoryBeanTest.java | 18 +- ...iroWebConfigurationTestSameSiteStrict.java | 7 +- .../spring/src/test/resources/log4j2-test.xml | 2 +- test-coverage/pom.xml | 1 - tools/hasher/pom.xml | 2 +- tools/pom.xml | 1 - web/pom.xml | 12 +- .../config/IniFilterChainResolverFactory.java | 11 +- .../web/config/ShiroFilterConfiguration.java | 2 +- .../config/WebIniSecurityManagerFactory.java | 2 +- .../shiro/web/env/DefaultWebEnvironment.java | 2 +- .../shiro/web/env/EnvironmentLoader.java | 12 +- .../web/env/EnvironmentLoaderListener.java | 6 +- .../shiro/web/env/IniWebEnvironment.java | 7 +- .../shiro/web/env/MutableWebEnvironment.java | 2 +- .../apache/shiro/web/env/WebEnvironment.java | 2 +- .../shiro/web/filter/AccessControlFilter.java | 22 +-- .../web/filter/InvalidRequestFilter.java | 8 +- .../shiro/web/filter/PathConfigProcessor.java | 2 +- .../shiro/web/filter/PathMatchingFilter.java | 20 +-- .../web/filter/authc/AnonymousFilter.java | 4 +- .../filter/authc/AuthenticatingFilter.java | 6 +- .../filter/authc/AuthenticationFilter.java | 6 +- .../authc/BasicHttpAuthenticationFilter.java | 17 +- .../authc/BearerHttpAuthenticationFilter.java | 4 +- .../authc/FormAuthenticationFilter.java | 8 +- .../authc/HttpAuthenticationFilter.java | 8 +- .../shiro/web/filter/authc/LogoutFilter.java | 13 +- .../authc/PassThruAuthenticationFilter.java | 4 +- .../shiro/web/filter/authc/UserFilter.java | 12 +- .../shiro/web/filter/authc/package-info.java | 2 +- .../web/filter/authz/AuthorizationFilter.java | 12 +- .../shiro/web/filter/authz/HostFilter.java | 4 +- .../authz/HttpMethodPermissionFilter.java | 10 +- .../shiro/web/filter/authz/IpFilter.java | 4 +- .../authz/PermissionsAuthorizationFilter.java | 4 +- .../shiro/web/filter/authz/PortFilter.java | 6 +- .../authz/RolesAuthorizationFilter.java | 4 +- .../shiro/web/filter/authz/SslFilter.java | 12 +- .../shiro/web/filter/authz/package-info.java | 2 +- .../shiro/web/filter/mgt/DefaultFilter.java | 6 +- .../filter/mgt/DefaultFilterChainManager.java | 16 +- .../web/filter/mgt/FilterChainManager.java | 14 +- .../web/filter/mgt/FilterChainResolver.java | 8 +- .../shiro/web/filter/mgt/NamedFilterList.java | 4 +- .../mgt/PathMatchingFilterChainResolver.java | 10 +- .../web/filter/mgt/SimpleNamedFilterList.java | 4 +- .../apache/shiro/web/filter/package-info.java | 2 +- .../session/NoSessionCreationFilter.java | 4 +- .../web/mgt/CookieRememberMeManager.java | 6 +- .../web/mgt/DefaultWebSecurityManager.java | 24 ++- .../DefaultWebSessionStorageEvaluator.java | 2 +- .../web/mgt/DefaultWebSubjectFactory.java | 4 +- .../shiro/web/servlet/AbstractFilter.java | 16 +- .../web/servlet/AbstractShiroFilter.java | 44 ++--- .../shiro/web/servlet/AdviceFilter.java | 34 ++-- .../org/apache/shiro/web/servlet/Cookie.java | 4 +- .../shiro/web/servlet/IniShiroFilter.java | 4 +- .../shiro/web/servlet/NameableFilter.java | 10 +- .../web/servlet/OncePerRequestFilter.java | 20 +-- .../shiro/web/servlet/ProxiedFilterChain.java | 10 +- .../web/servlet/ServletContextSupport.java | 2 +- .../web/servlet/ShiroHttpServletRequest.java | 23 ++- .../web/servlet/ShiroHttpServletResponse.java | 10 +- .../shiro/web/servlet/ShiroHttpSession.java | 44 +---- .../shiro/web/servlet/SimpleCookie.java | 18 +- .../shiro/web/session/HttpServletSession.java | 2 +- .../session/mgt/DefaultWebSessionContext.java | 7 +- .../session/mgt/DefaultWebSessionManager.java | 8 +- .../mgt/ServletContainerSessionManager.java | 6 +- .../web/session/mgt/WebSessionContext.java | 4 +- .../shiro/web/session/mgt/WebSessionKey.java | 4 +- .../apache/shiro/web/subject/WebSubject.java | 4 +- .../shiro/web/subject/WebSubjectContext.java | 4 +- .../support/DefaultWebSubjectContext.java | 15 +- .../subject/support/WebDelegatingSubject.java | 4 +- .../shiro/web/tags/AuthenticatedTag.java | 4 +- .../org/apache/shiro/web/tags/GuestTag.java | 4 +- .../shiro/web/tags/NotAuthenticatedTag.java | 4 +- .../apache/shiro/web/tags/PermissionTag.java | 4 +- .../apache/shiro/web/tags/PrincipalTag.java | 4 +- .../org/apache/shiro/web/tags/RoleTag.java | 4 +- .../org/apache/shiro/web/tags/SecureTag.java | 4 +- .../org/apache/shiro/web/tags/UserTag.java | 2 +- .../apache/shiro/web/util/RedirectView.java | 11 +- .../shiro/web/util/RequestPairSource.java | 4 +- .../apache/shiro/web/util/SavedRequest.java | 2 +- .../org/apache/shiro/web/util/WebUtils.java | 84 ++++----- .../IniFilterChainResolverFactoryTest.groovy | 6 +- .../web/env/EnvironmentLoaderTest.groovy | 2 +- .../shiro/web/env/MockWebEnvironment.groovy | 2 +- .../filter/InvalidRequestFilterTest.groovy | 7 +- .../BearerHttpFilterAuthenticationTest.groovy | 4 +- .../web/filter/authc/LogoutFilterTest.groovy | 8 +- .../mgt/DefaultFilterChainManagerTest.groovy | 8 +- .../NoSessionCreationFilterTest.groovy | 4 +- ...faultWebSessionStorageEvaluatorTest.groovy | 4 +- .../servlet/AbstractShiroFilterTest.groovy | 4 +- .../web/servlet/IniShiroFilterTest.groovy | 6 +- .../shiro/web/servlet/ShiroFilterTest.groovy | 4 +- .../ShiroHttpServletResponseTest.groovy | 6 +- .../mgt/DefaultWebSessionManagerTest.groovy | 6 +- .../ServletContainerSessionManagerTest.groovy | 6 +- .../shiro/web/util/SavedRequestTest.groovy | 2 +- .../apache/shiro/web/util/WebUtilsTest.groovy | 2 +- .../java/org/apache/shiro/web/WebTest.java | 4 +- .../WebIniSecurityManagerFactoryTest.java | 2 +- .../web/env/EnvironmentLoaderServiceTest.java | 2 +- .../org/apache/shiro/web/env/FilterStub.java | 12 +- .../shiro/web/env/WebEnvironmentStub.java | 2 +- .../PathMatchingFilterParameterizedTest.java | 6 +- .../web/filter/PathMatchingFilterTest.java | 6 +- .../BasicHttpFilterAuthenticationTest.java | 4 +- .../filter/authz/AuthorizationFilterTest.java | 8 +- .../shiro/web/filter/authz/IpFilterTest.java | 2 +- .../web/filter/authz/PortFilterTest.java | 4 +- .../shiro/web/filter/authz/SslFilterTest.java | 4 +- .../PathMatchingFilterChainResolverTest.java | 12 +- .../filter/mgt/SimpleNamedFilterListTest.java | 4 +- .../web/mgt/CookieRememberMeManagerTest.java | 6 +- .../mgt/DefaultWebSecurityManagerTest.java | 10 +- .../web/servlet/OncePerRequestFilterTest.java | 8 +- .../servlet/ShiroHttpServletRequestTest.java | 4 +- .../shiro/web/servlet/SimpleCookieTest.java | 10 +- .../web/session/HttpServletSessionTest.java | 2 +- web/src/test/resources/log4j2-test.xml | 2 +- 438 files changed, 1902 insertions(+), 3302 deletions(-) rename integration-tests/{guice4 => guice}/pom.xml (73%) rename integration-tests/{guice3 => guice}/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java (94%) rename integration-tests/{guice4 => guice}/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java (98%) rename integration-tests/{guice4 => guice}/src/main/resources/log4j2.xml (94%) rename integration-tests/{guice3 => guice}/src/main/webapp/WEB-INF/shiro.ini (100%) rename integration-tests/{guice4 => guice}/src/main/webapp/WEB-INF/web.xml (88%) rename integration-tests/{guice3 => guice}/src/main/webapp/account/index.jsp (100%) rename integration-tests/{guice3 => guice}/src/main/webapp/home.jsp (100%) rename integration-tests/{guice3 => guice}/src/main/webapp/include.jsp (100%) rename integration-tests/{guice3 => guice}/src/main/webapp/index.jsp (100%) rename integration-tests/{guice3 => guice}/src/main/webapp/login.jsp (100%) rename integration-tests/{guice3 => guice}/src/main/webapp/style.css (100%) rename integration-tests/{guice3 => guice}/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java (100%) delete mode 100644 integration-tests/guice3/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java delete mode 100644 integration-tests/guice3/src/main/resources/log4j2.xml delete mode 100644 integration-tests/guice3/src/main/webapp/WEB-INF/web.xml delete mode 100644 integration-tests/guice4/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java delete mode 100644 integration-tests/guice4/src/main/webapp/WEB-INF/shiro.ini delete mode 100644 integration-tests/guice4/src/main/webapp/account/index.jsp delete mode 100644 integration-tests/guice4/src/main/webapp/home.jsp delete mode 100644 integration-tests/guice4/src/main/webapp/include.jsp delete mode 100644 integration-tests/guice4/src/main/webapp/index.jsp delete mode 100644 integration-tests/guice4/src/main/webapp/login.jsp delete mode 100644 integration-tests/guice4/src/main/webapp/style.css delete mode 100644 integration-tests/guice4/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java delete mode 100644 samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/RemotingServletConfig.java rename support/cdi/src/main/resources/META-INF/services/{javax.enterprise.inject.spi.Extension => jakarta.enterprise.inject.spi.Extension} (100%) delete mode 100644 support/jakarta-ee/src/main/java/org/apache/shiro/ee/util/JakartaTransformer.java rename support/jakarta-ee/src/main/resources/META-INF/services/{javax.enterprise.inject.spi.Extension => jakarta.enterprise.inject.spi.Extension} (100%) delete mode 100644 support/spring/src/main/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationExecutor.java delete mode 100644 support/spring/src/main/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactory.java delete mode 100644 support/spring/src/main/java/org/apache/shiro/spring/remoting/package-info.java diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index da25c00e21..9ef70c6cb9 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -38,7 +38,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 # v4.3.0 with: - java-version: 11 + java-version: 17 distribution: temurin - name: License Check diff --git a/bom/pom.xml b/bom/pom.xml index 8fe8e3ea33..6385b66325 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -36,13 +36,11 @@ org.apache.shiro shiro-core - jakarta ${project.version} org.apache.shiro shiro-web - jakarta ${project.version} @@ -54,7 +52,6 @@ org.apache.shiro shiro-jakarta-ee - jakarta ${project.version} @@ -66,7 +63,6 @@ org.apache.shiro shiro-cdi - jakarta ${project.version} @@ -78,7 +74,6 @@ org.apache.shiro shiro-jaxrs - jakarta ${project.version} @@ -90,7 +85,6 @@ org.apache.shiro shiro-spring - jakarta ${project.version} @@ -102,7 +96,6 @@ org.apache.shiro shiro-spring-boot-web-starter - jakarta ${project.version} @@ -114,7 +107,6 @@ org.apache.shiro shiro-spring-boot-starter - jakarta ${project.version} diff --git a/config/core/src/main/java/org/apache/shiro/config/Ini.java b/config/core/src/main/java/org/apache/shiro/config/Ini.java index b854c5e7b4..bc1a897ced 100644 --- a/config/core/src/main/java/org/apache/shiro/config/Ini.java +++ b/config/core/src/main/java/org/apache/shiro/config/Ini.java @@ -446,8 +446,7 @@ protected static String getSectionName(String line) { } public boolean equals(Object obj) { - if (obj instanceof Ini) { - Ini ini = (Ini) obj; + if (obj instanceof Ini ini) { return this.sections.equals(ini.sections); } return false; @@ -710,8 +709,7 @@ public String toString() { @Override public boolean equals(Object obj) { - if (obj instanceof Section) { - Section other = (Section) obj; + if (obj instanceof Section other) { return getName().equals(other.getName()) && this.props.equals(other.props); } return false; diff --git a/config/ogdl/src/main/java/org/apache/shiro/config/ogdl/ReflectionBuilder.java b/config/ogdl/src/main/java/org/apache/shiro/config/ogdl/ReflectionBuilder.java index f33163952a..f5a9168ba8 100644 --- a/config/ogdl/src/main/java/org/apache/shiro/config/ogdl/ReflectionBuilder.java +++ b/config/ogdl/src/main/java/org/apache/shiro/config/ogdl/ReflectionBuilder.java @@ -232,14 +232,14 @@ protected EventBus findEventBus(Map objects) { //prefer a named object first: Object value = objects.get(EVENT_BUS_NAME); - if (value instanceof EventBus) { - return (EventBus) value; + if (value instanceof EventBus bus) { + return bus; } //couldn't find a named 'eventBus' EventBus object. Try to find the first typed value we can: for (Object v : objects.values()) { - if (v instanceof EventBus) { - return (EventBus) v; + if (v instanceof EventBus bus) { + return bus; } } @@ -247,8 +247,8 @@ protected EventBus findEventBus(Map objects) { } private boolean applyEventBusIfNecessary(Object value) { - if (value instanceof EventBusAware) { - ((EventBusAware) value).setEventBus(this.eventBus); + if (value instanceof EventBusAware aware) { + aware.setEventBus(this.eventBus); return true; } return false; @@ -357,8 +357,8 @@ protected void createNewInstance(Map objects, String name, Strin Object instance; try { instance = ClassUtils.newInstance(value); - if (instance instanceof Nameable) { - ((Nameable) instance).setName(name); + if (instance instanceof Nameable nameable) { + nameable.setName(name); } } catch (Exception e) { instance = alternateObjectSupplier.apply(value); @@ -455,8 +455,8 @@ protected Object resolveReference(String reference) { String id = getId(reference); LOGGER.debug("Encountered object reference '{}'. Looking up object with id '{}'", reference, id); final Object referencedObject = getReferencedObject(id); - if (referencedObject instanceof Factory) { - return ((Factory) referencedObject).getInstance(); + if (referencedObject instanceof Factory factory) { + return factory.getInstance(); } return referencedObject; } @@ -492,8 +492,8 @@ protected Set toSet(String sValue) { //SHIRO-423: check to see if the value is a referenced Set already, and if so, return it immediately: if (tokens.length == 1 && isReference(tokens[0])) { Object reference = resolveReference(tokens[0]); - if (reference instanceof Set) { - return (Set) reference; + if (reference instanceof Set set) { + return set; } } @@ -518,8 +518,8 @@ protected Set toSet(String sValue) { //SHIRO-423: check to see if the value is a referenced Map already, and if so, return it immediately: if (tokens.length == 1 && isReference(tokens[0])) { Object reference = resolveReference(tokens[0]); - if (reference instanceof Map) { - return (Map) reference; + if (reference instanceof Map map) { + return map; } } @@ -556,8 +556,8 @@ protected Collection toCollection(String sValue) { //SHIRO-423: check to see if the value is a referenced Collection already, and if so, return it immediately: if (tokens.length == 1 && isReference(tokens[0])) { Object reference = resolveReference(tokens[0]); - if (reference instanceof Collection) { - return (Collection) reference; + if (reference instanceof Collection collection) { + return collection; } } @@ -579,8 +579,8 @@ protected List toList(String sValue) { //SHIRO-423: check to see if the value is a referenced List already, and if so, return it immediately: if (tokens.length == 1 && isReference(tokens[0])) { Object reference = resolveReference(tokens[0]); - if (reference instanceof List) { - return (List) reference; + if (reference instanceof List list) { + return list; } } @@ -806,8 +806,7 @@ public void add(Statement statement) { //we execute bean configuration statements in the order they are declared. statements.add(statement); - if (statement instanceof InstantiationStatement) { - InstantiationStatement is = (InstantiationStatement) statement; + if (statement instanceof InstantiationStatement is) { beanConfigurations.add(new BeanConfiguration(is)); } else { AssignmentStatement as = (AssignmentStatement) statement; diff --git a/config/pom.xml b/config/pom.xml index 7910247b22..737cdc6ce3 100644 --- a/config/pom.xml +++ b/config/pom.xml @@ -38,4 +38,3 @@ - diff --git a/core/src/main/java/org/apache/shiro/authc/AbstractAuthenticator.java b/core/src/main/java/org/apache/shiro/authc/AbstractAuthenticator.java index 278dae9010..4c78affeeb 100644 --- a/core/src/main/java/org/apache/shiro/authc/AbstractAuthenticator.java +++ b/core/src/main/java/org/apache/shiro/authc/AbstractAuthenticator.java @@ -203,8 +203,8 @@ public final AuthenticationInfo authenticate(AuthenticationToken token) throws A } } catch (Throwable t) { AuthenticationException ae = null; - if (t instanceof AuthenticationException) { - ae = (AuthenticationException) t; + if (t instanceof AuthenticationException exception) { + ae = exception; } if (ae == null) { //Exception thrown was not an expected AuthenticationException. Therefore it is probably a little more diff --git a/core/src/main/java/org/apache/shiro/authc/SimpleAccount.java b/core/src/main/java/org/apache/shiro/authc/SimpleAccount.java index 310522d67f..3dfacf5610 100644 --- a/core/src/main/java/org/apache/shiro/authc/SimpleAccount.java +++ b/core/src/main/java/org/apache/shiro/authc/SimpleAccount.java @@ -99,7 +99,7 @@ public SimpleAccount(Object principal, Object credentials, String realmName) { * @since 1.1 */ public SimpleAccount(Object principal, Object hashedCredentials, ByteSource credentialsSalt, String realmName) { - this(principal instanceof PrincipalCollection ? (PrincipalCollection) principal + this(principal instanceof PrincipalCollection pc ? pc : ImmutablePrincipalCollection.ofSinglePrincipal(principal, realmName), hashedCredentials, credentialsSalt); } @@ -448,8 +448,7 @@ public void merge(AuthenticationInfo info) { authcInfo.merge(info); // Merge SimpleAccount specific info - if (info instanceof SimpleAccount) { - SimpleAccount otherAccount = (SimpleAccount) info; + if (info instanceof SimpleAccount otherAccount) { if (otherAccount.isLocked()) { setLocked(true); } @@ -482,8 +481,7 @@ public boolean equals(Object o) { if (o == this) { return true; } - if (o instanceof SimpleAccount) { - SimpleAccount sa = (SimpleAccount) o; + if (o instanceof SimpleAccount sa) { //principal should be unique across the application, so only check this for equality: return (getPrincipals() != null ? getPrincipals().equals(sa.getPrincipals()) : sa.getPrincipals() == null); } diff --git a/core/src/main/java/org/apache/shiro/authc/SimpleAuthenticationInfo.java b/core/src/main/java/org/apache/shiro/authc/SimpleAuthenticationInfo.java index 2ecae7d5eb..254936b84b 100644 --- a/core/src/main/java/org/apache/shiro/authc/SimpleAuthenticationInfo.java +++ b/core/src/main/java/org/apache/shiro/authc/SimpleAuthenticationInfo.java @@ -23,6 +23,7 @@ import org.apache.shiro.subject.ImmutablePrincipalCollection; import org.apache.shiro.subject.PrincipalCollection; +import java.io.Serial; import java.util.Collection; import java.util.HashSet; import java.util.Objects; @@ -38,6 +39,7 @@ */ public class SimpleAuthenticationInfo implements MergableAuthenticationInfo, SaltedAuthenticationInfo { + @Serial private static final long serialVersionUID = 5390456512469696779L; /** * The principals identifying the account associated with this AuthenticationInfo instance. @@ -220,8 +222,8 @@ public void merge(AuthenticationInfo info) { //is null, then it can't hurt to pull in a non-null value if one exists. // //since 1.1: - if (this.credentialsSalt == null && info instanceof SaltedAuthenticationInfo) { - this.credentialsSalt = ((SaltedAuthenticationInfo) info).getCredentialsSalt(); + if (this.credentialsSalt == null && info instanceof SaltedAuthenticationInfo authenticationInfo) { + this.credentialsSalt = authenticationInfo.getCredentialsSalt(); } Object thisCredentials = getCredentials(); @@ -243,12 +245,9 @@ public void merge(AuthenticationInfo info) { } // At this point, the credentials should be a collection - @SuppressWarnings("unchecked") - Collection credentialCollection = (Collection) getCredentials(); - if (otherCredentials instanceof Collection) { - @SuppressWarnings("unchecked") - Collection otherCredentialsCollection = (Collection) otherCredentials; - credentialCollection.addAll(otherCredentialsCollection); + Collection credentialCollection = (Collection) getCredentials(); + if (otherCredentials instanceof Collection collection) { + credentialCollection.addAll(collection); } else { credentialCollection.add(otherCredentials); } diff --git a/core/src/main/java/org/apache/shiro/authc/credential/DefaultPasswordService.java b/core/src/main/java/org/apache/shiro/authc/credential/DefaultPasswordService.java index 8ec5d9fe35..e7a89a884a 100644 --- a/core/src/main/java/org/apache/shiro/authc/credential/DefaultPasswordService.java +++ b/core/src/main/java/org/apache/shiro/authc/credential/DefaultPasswordService.java @@ -169,9 +169,7 @@ public boolean passwordsMatch(Object submittedPlaintext, String saved) { //configuration changes. HashFormat discoveredFormat = this.hashFormatFactory.getInstance(saved); - if (discoveredFormat instanceof ParsableHashFormat) { - - ParsableHashFormat parsableHashFormat = (ParsableHashFormat) discoveredFormat; + if (discoveredFormat instanceof ParsableHashFormat parsableHashFormat) { Hash savedHash = parsableHashFormat.parse(saved); return passwordsMatch(submittedPlaintext, savedHash); diff --git a/core/src/main/java/org/apache/shiro/authc/credential/HashedCredentialsMatcher.java b/core/src/main/java/org/apache/shiro/authc/credential/HashedCredentialsMatcher.java index f735f9ad2f..f9ae7dd799 100644 --- a/core/src/main/java/org/apache/shiro/authc/credential/HashedCredentialsMatcher.java +++ b/core/src/main/java/org/apache/shiro/authc/credential/HashedCredentialsMatcher.java @@ -403,8 +403,8 @@ public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo */ protected Object hashProvidedCredentials(AuthenticationToken token, AuthenticationInfo info) { final Object salt; - if (info instanceof SaltedAuthenticationInfo) { - salt = ((SaltedAuthenticationInfo) info).getCredentialsSalt(); + if (info instanceof SaltedAuthenticationInfo authenticationInfo) { + salt = authenticationInfo.getCredentialsSalt(); } else if (isHashSalted()) { //retain 1.0 backwards compatibility: salt = getSalt(token); diff --git a/core/src/main/java/org/apache/shiro/authc/credential/PasswordMatcher.java b/core/src/main/java/org/apache/shiro/authc/credential/PasswordMatcher.java index 240fc0eac8..fc936fc374 100644 --- a/core/src/main/java/org/apache/shiro/authc/credential/PasswordMatcher.java +++ b/core/src/main/java/org/apache/shiro/authc/credential/PasswordMatcher.java @@ -49,8 +49,7 @@ public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo Object storedCredentials = getStoredPassword(info); assertStoredCredentialsType(storedCredentials); - if (storedCredentials instanceof Hash) { - Hash hashedPassword = (Hash) storedCredentials; + if (storedCredentials instanceof Hash hashedPassword) { return hashedPassword.matchesPassword(ByteSource.Util.bytes(submittedPassword)); } //otherwise they are a String (asserted in the 'assertStoredCredentialsType' method call above): @@ -84,8 +83,8 @@ private void assertStoredCredentialsType(Object credentials) { protected Object getStoredPassword(AuthenticationInfo storedAccountInfo) { Object stored = storedAccountInfo != null ? storedAccountInfo.getCredentials() : null; //fix for https://issues.apache.org/jira/browse/SHIRO-363 - if (stored instanceof char[]) { - stored = new String((char[]) stored); + if (stored instanceof char[] chars) { + stored = new String(chars); } return stored; } diff --git a/core/src/main/java/org/apache/shiro/authc/pam/AbstractAuthenticationStrategy.java b/core/src/main/java/org/apache/shiro/authc/pam/AbstractAuthenticationStrategy.java index 718578f954..f8cb026fa3 100644 --- a/core/src/main/java/org/apache/shiro/authc/pam/AbstractAuthenticationStrategy.java +++ b/core/src/main/java/org/apache/shiro/authc/pam/AbstractAuthenticationStrategy.java @@ -87,8 +87,8 @@ public AuthenticationInfo afterAttempt(Realm realm, AuthenticationToken token, * {@link org.apache.shiro.authc.MergableAuthenticationInfo MergableAuthenticationInfo} is not desired for some reason. */ protected AuthenticationInfo merge(AuthenticationInfo info, AuthenticationInfo aggregate) { - if (aggregate instanceof MergableAuthenticationInfo) { - ((MergableAuthenticationInfo) aggregate).merge(info); + if (aggregate instanceof MergableAuthenticationInfo authenticationInfo) { + authenticationInfo.merge(info); return aggregate; } else { throw new IllegalArgumentException("Attempt to merge authentication info from multiple realms, but aggregate " diff --git a/core/src/main/java/org/apache/shiro/authc/pam/AllSuccessfulStrategy.java b/core/src/main/java/org/apache/shiro/authc/pam/AllSuccessfulStrategy.java index 8d200a85dc..31cb56ab1f 100644 --- a/core/src/main/java/org/apache/shiro/authc/pam/AllSuccessfulStrategy.java +++ b/core/src/main/java/org/apache/shiro/authc/pam/AllSuccessfulStrategy.java @@ -80,9 +80,9 @@ public AuthenticationInfo afterAttempt(Realm realm, AuthenticationToken token, AuthenticationInfo info, AuthenticationInfo aggregate, Throwable t) throws AuthenticationException { if (t != null) { - if (t instanceof AuthenticationException) { + if (t instanceof AuthenticationException exception) { //propagate: - throw ((AuthenticationException) t); + throw exception; } else { String msg = "Unable to acquire account data from realm [" + realm + "]. The [" + getClass().getName() + " implementation requires all configured realm(s) to operate successfully " diff --git a/core/src/main/java/org/apache/shiro/authc/pam/ModularRealmAuthenticator.java b/core/src/main/java/org/apache/shiro/authc/pam/ModularRealmAuthenticator.java index c59ea6d2c7..596588130e 100644 --- a/core/src/main/java/org/apache/shiro/authc/pam/ModularRealmAuthenticator.java +++ b/core/src/main/java/org/apache/shiro/authc/pam/ModularRealmAuthenticator.java @@ -294,8 +294,8 @@ public void onLogout(PrincipalCollection principals) { Collection realms = getRealms(); if (!CollectionUtils.isEmpty(realms)) { for (Realm realm : realms) { - if (realm instanceof LogoutAware) { - ((LogoutAware) realm).onLogout(principals); + if (realm instanceof LogoutAware aware) { + aware.onLogout(principals); } } } diff --git a/core/src/main/java/org/apache/shiro/authz/ModularRealmAuthorizer.java b/core/src/main/java/org/apache/shiro/authz/ModularRealmAuthorizer.java index a038a230ba..a924331b23 100644 --- a/core/src/main/java/org/apache/shiro/authz/ModularRealmAuthorizer.java +++ b/core/src/main/java/org/apache/shiro/authz/ModularRealmAuthorizer.java @@ -137,8 +137,8 @@ protected void applyPermissionResolverToRealms() { Collection realms = getRealms(); if (resolver != null && realms != null && !realms.isEmpty()) { for (Realm realm : realms) { - if (realm instanceof PermissionResolverAware) { - ((PermissionResolverAware) realm).setPermissionResolver(resolver); + if (realm instanceof PermissionResolverAware aware) { + aware.setPermissionResolver(resolver); } } } @@ -193,8 +193,8 @@ protected void applyRolePermissionResolverToRealms() { Collection realms = getRealms(); if (resolver != null && realms != null && !realms.isEmpty()) { for (Realm realm : realms) { - if (realm instanceof RolePermissionResolverAware) { - ((RolePermissionResolverAware) realm).setRolePermissionResolver(resolver); + if (realm instanceof RolePermissionResolverAware aware) { + aware.setRolePermissionResolver(resolver); } } } diff --git a/core/src/main/java/org/apache/shiro/authz/SimpleRole.java b/core/src/main/java/org/apache/shiro/authz/SimpleRole.java index 8dcdd876bc..addeccb739 100644 --- a/core/src/main/java/org/apache/shiro/authz/SimpleRole.java +++ b/core/src/main/java/org/apache/shiro/authz/SimpleRole.java @@ -102,8 +102,7 @@ public boolean equals(Object o) { if (o == this) { return true; } - if (o instanceof SimpleRole) { - SimpleRole sr = (SimpleRole) o; + if (o instanceof SimpleRole sr) { //only check name, since role names should be unique across an entire application: return (getName() != null ? getName().equals(sr.getName()) : sr.getName() == null); } diff --git a/core/src/main/java/org/apache/shiro/authz/aop/DenyAllAnnotationHandler.java b/core/src/main/java/org/apache/shiro/authz/aop/DenyAllAnnotationHandler.java index 73e087a601..3366951843 100644 --- a/core/src/main/java/org/apache/shiro/authz/aop/DenyAllAnnotationHandler.java +++ b/core/src/main/java/org/apache/shiro/authz/aop/DenyAllAnnotationHandler.java @@ -21,7 +21,7 @@ import org.apache.shiro.authz.UnauthenticatedException; import org.apache.shiro.authz.UnauthorizedException; -import javax.annotation.security.DenyAll; +import jakarta.annotation.security.DenyAll; import java.lang.annotation.Annotation; /** diff --git a/core/src/main/java/org/apache/shiro/authz/aop/PermitAllAnnotationHandler.java b/core/src/main/java/org/apache/shiro/authz/aop/PermitAllAnnotationHandler.java index ca51e9a4e7..2d2059e12d 100644 --- a/core/src/main/java/org/apache/shiro/authz/aop/PermitAllAnnotationHandler.java +++ b/core/src/main/java/org/apache/shiro/authz/aop/PermitAllAnnotationHandler.java @@ -18,13 +18,13 @@ */ package org.apache.shiro.authz.aop; -import javax.annotation.security.PermitAll; +import jakarta.annotation.security.PermitAll; import java.lang.annotation.Annotation; /** * This {@link org.apache.shiro.aop.AnnotationHandler AnnotationHandler} allows access from any subject * (anonymous or logged in user). It is largely a no-op or for documentation. However, this annotation WILL override - * a {@link javax.annotation.security.DenyAll DenyAll} or {@link javax.annotation.security.RolesAllowed RolesAllowed} + * a {@link jakarta.annotation.security.DenyAll DenyAll} or {@link jakarta.annotation.security.RolesAllowed RolesAllowed} * annotation if those annotations are placed at the class level and {@link PermitAll} is placed on a method. * * @since 2.0 diff --git a/core/src/main/java/org/apache/shiro/authz/aop/RolesAllowedAnnotationHandler.java b/core/src/main/java/org/apache/shiro/authz/aop/RolesAllowedAnnotationHandler.java index 8ab9327760..1359e8ed87 100644 --- a/core/src/main/java/org/apache/shiro/authz/aop/RolesAllowedAnnotationHandler.java +++ b/core/src/main/java/org/apache/shiro/authz/aop/RolesAllowedAnnotationHandler.java @@ -20,7 +20,7 @@ import org.apache.shiro.authz.AuthorizationException; -import javax.annotation.security.RolesAllowed; +import jakarta.annotation.security.RolesAllowed; import java.lang.annotation.Annotation; /** diff --git a/core/src/main/java/org/apache/shiro/authz/permission/DomainPermission.java b/core/src/main/java/org/apache/shiro/authz/permission/DomainPermission.java index 154b511b99..765468e5f7 100644 --- a/core/src/main/java/org/apache/shiro/authz/permission/DomainPermission.java +++ b/core/src/main/java/org/apache/shiro/authz/permission/DomainPermission.java @@ -20,6 +20,7 @@ import org.apache.shiro.lang.util.StringUtils; +import java.io.Serial; import java.util.Set; /** @@ -32,6 +33,7 @@ */ public class DomainPermission extends WildcardPermission { + @Serial private static final long serialVersionUID = 1L; private String domain; diff --git a/core/src/main/java/org/apache/shiro/authz/permission/WildcardPermission.java b/core/src/main/java/org/apache/shiro/authz/permission/WildcardPermission.java index dd8f1c5011..0f80e77b13 100644 --- a/core/src/main/java/org/apache/shiro/authz/permission/WildcardPermission.java +++ b/core/src/main/java/org/apache/shiro/authz/permission/WildcardPermission.java @@ -252,8 +252,7 @@ public String toString() { } public boolean equals(Object o) { - if (o instanceof WildcardPermission) { - WildcardPermission wp = (WildcardPermission) o; + if (o instanceof WildcardPermission wp) { return parts.equals(wp.parts); } return false; diff --git a/core/src/main/java/org/apache/shiro/ini/IniSecurityManagerFactory.java b/core/src/main/java/org/apache/shiro/ini/IniSecurityManagerFactory.java index 328dce68bc..a248837536 100644 --- a/core/src/main/java/org/apache/shiro/ini/IniSecurityManagerFactory.java +++ b/core/src/main/java/org/apache/shiro/ini/IniSecurityManagerFactory.java @@ -132,9 +132,7 @@ private Ini.Section getConfigSection(Ini ini) { protected boolean isAutoApplyRealms(SecurityManager securityManager) { boolean autoApply = true; - if (securityManager instanceof RealmSecurityManager) { - //only apply realms if they haven't been explicitly set by the user: - RealmSecurityManager realmSecurityManager = (RealmSecurityManager) securityManager; + if (securityManager instanceof RealmSecurityManager realmSecurityManager) { Collection realms = realmSecurityManager.getRealms(); if (!CollectionUtils.isEmpty(realms)) { LOGGER.info("Realms have been explicitly set on the SecurityManager instance - auto-setting of " @@ -215,15 +213,14 @@ private Collection getRealms(Map instances) { String name = entry.getKey(); Object value = entry.getValue(); - if (value instanceof RealmFactory) { - addToRealms(realms, (RealmFactory) value); - } else if (value instanceof Realm) { - Realm realm = (Realm) value; + if (value instanceof RealmFactory factory) { + addToRealms(realms, factory); + } else if (value instanceof Realm realm) { //set the name if null: String existingName = realm.getName(); if (existingName == null || existingName.startsWith(realm.getClass().getName())) { - if (realm instanceof Nameable) { - ((Nameable) realm).setName(name); + if (realm instanceof Nameable nameable) { + nameable.setName(name); LOGGER.debug("Applied name '{}' to Nameable realm instance {}", name, realm); } else { LOGGER.info("Realm does not implement the {} interface. Configured name will not be applied.", diff --git a/core/src/main/java/org/apache/shiro/mgt/AbstractRememberMeManager.java b/core/src/main/java/org/apache/shiro/mgt/AbstractRememberMeManager.java index c67ee8bbc1..53f00947e7 100644 --- a/core/src/main/java/org/apache/shiro/mgt/AbstractRememberMeManager.java +++ b/core/src/main/java/org/apache/shiro/mgt/AbstractRememberMeManager.java @@ -275,7 +275,7 @@ public void setCipherKey(byte[] cipherKey) { * @return true if remember me services should be performed as a result of the successful authentication attempt. */ protected boolean isRememberMe(AuthenticationToken token) { - return token instanceof RememberMeAuthenticationToken && ((RememberMeAuthenticationToken) token).isRememberMe(); + return token instanceof RememberMeAuthenticationToken rmat && rmat.isRememberMe(); } /** diff --git a/core/src/main/java/org/apache/shiro/mgt/AuthenticatingSecurityManager.java b/core/src/main/java/org/apache/shiro/mgt/AuthenticatingSecurityManager.java index a455e0898d..8696a21588 100644 --- a/core/src/main/java/org/apache/shiro/mgt/AuthenticatingSecurityManager.java +++ b/core/src/main/java/org/apache/shiro/mgt/AuthenticatingSecurityManager.java @@ -94,8 +94,8 @@ public void setAuthenticator(Authenticator authenticator) throws IllegalArgument */ protected void afterRealmsSet() { super.afterRealmsSet(); - if (this.authenticator instanceof ModularRealmAuthenticator) { - ((ModularRealmAuthenticator) this.authenticator).setRealms(getRealms()); + if (this.authenticator instanceof ModularRealmAuthenticator realmAuthenticator) { + realmAuthenticator.setRealms(getRealms()); } } diff --git a/core/src/main/java/org/apache/shiro/mgt/AuthorizingSecurityManager.java b/core/src/main/java/org/apache/shiro/mgt/AuthorizingSecurityManager.java index 0cbea9dc02..9152d0182b 100644 --- a/core/src/main/java/org/apache/shiro/mgt/AuthorizingSecurityManager.java +++ b/core/src/main/java/org/apache/shiro/mgt/AuthorizingSecurityManager.java @@ -98,8 +98,8 @@ public void setAuthorizer(Authorizer authorizer) { */ protected void afterRealmsSet() { super.afterRealmsSet(); - if (this.authorizer instanceof ModularRealmAuthorizer) { - ((ModularRealmAuthorizer) this.authorizer).setRealms(getRealms()); + if (this.authorizer instanceof ModularRealmAuthorizer realmAuthorizer) { + realmAuthorizer.setRealms(getRealms()); } } diff --git a/core/src/main/java/org/apache/shiro/mgt/CachingSecurityManager.java b/core/src/main/java/org/apache/shiro/mgt/CachingSecurityManager.java index d83f971fc8..52eb434d50 100644 --- a/core/src/main/java/org/apache/shiro/mgt/CachingSecurityManager.java +++ b/core/src/main/java/org/apache/shiro/mgt/CachingSecurityManager.java @@ -124,8 +124,8 @@ public void setEventBus(EventBus eventBus) { * @since 1.3 */ protected void applyEventBusToCacheManager() { - if (this.eventBus != null && this.cacheManager != null && this.cacheManager instanceof EventBusAware) { - ((EventBusAware) this.cacheManager).setEventBus(this.eventBus); + if (this.eventBus != null && this.cacheManager != null && this.cacheManager instanceof EventBusAware aware) { + aware.setEventBus(this.eventBus); } } diff --git a/core/src/main/java/org/apache/shiro/mgt/DefaultSecurityManager.java b/core/src/main/java/org/apache/shiro/mgt/DefaultSecurityManager.java index 4739971942..73fdfe505b 100644 --- a/core/src/main/java/org/apache/shiro/mgt/DefaultSecurityManager.java +++ b/core/src/main/java/org/apache/shiro/mgt/DefaultSecurityManager.java @@ -564,8 +564,8 @@ public void logout(Subject subject) { LOGGER.debug("Logging out subject with primary principal {}", principals.getPrimaryPrincipal()); } Authenticator authc = getAuthenticator(); - if (authc instanceof LogoutAware) { - ((LogoutAware) authc).onLogout(principals); + if (authc instanceof LogoutAware aware) { + aware.onLogout(principals); } } diff --git a/core/src/main/java/org/apache/shiro/mgt/RealmSecurityManager.java b/core/src/main/java/org/apache/shiro/mgt/RealmSecurityManager.java index 748ddd169a..b7323d2477 100644 --- a/core/src/main/java/org/apache/shiro/mgt/RealmSecurityManager.java +++ b/core/src/main/java/org/apache/shiro/mgt/RealmSecurityManager.java @@ -114,8 +114,8 @@ protected void applyCacheManagerToRealms() { Collection realms = getRealms(); if (cacheManager != null && realms != null && !realms.isEmpty()) { for (Realm realm : realms) { - if (realm instanceof CacheManagerAware) { - ((CacheManagerAware) realm).setCacheManager(cacheManager); + if (realm instanceof CacheManagerAware aware) { + aware.setCacheManager(cacheManager); } } } @@ -140,8 +140,8 @@ protected void applyEventBusToRealms() { Collection realms = getRealms(); if (eventBus != null && realms != null && !realms.isEmpty()) { for (Realm realm : realms) { - if (realm instanceof EventBusAware) { - ((EventBusAware) realm).setEventBus(eventBus); + if (realm instanceof EventBusAware aware) { + aware.setEventBus(eventBus); } } } diff --git a/core/src/main/java/org/apache/shiro/mgt/SessionsSecurityManager.java b/core/src/main/java/org/apache/shiro/mgt/SessionsSecurityManager.java index e2180888e8..277f0edf7b 100644 --- a/core/src/main/java/org/apache/shiro/mgt/SessionsSecurityManager.java +++ b/core/src/main/java/org/apache/shiro/mgt/SessionsSecurityManager.java @@ -127,8 +127,8 @@ protected void afterEventBusSet() { * instance implements the {@link CacheManagerAware CacheManagerAware} interface. */ protected void applyCacheManagerToSessionManager() { - if (this.sessionManager instanceof CacheManagerAware) { - ((CacheManagerAware) this.sessionManager).setCacheManager(getCacheManager()); + if (this.sessionManager instanceof CacheManagerAware aware) { + aware.setCacheManager(getCacheManager()); } } @@ -143,8 +143,8 @@ protected void applyCacheManagerToSessionManager() { */ protected void applyEventBusToSessionManager() { EventBus eventBus = getEventBus(); - if (eventBus != null && this.sessionManager instanceof EventBusAware) { - ((EventBusAware) this.sessionManager).setEventBus(eventBus); + if (eventBus != null && this.sessionManager instanceof EventBusAware aware) { + aware.setEventBus(eventBus); } } diff --git a/core/src/main/java/org/apache/shiro/realm/ldap/DefaultLdapRealm.java b/core/src/main/java/org/apache/shiro/realm/ldap/DefaultLdapRealm.java index d742f7bf30..7f52f2b18c 100644 --- a/core/src/main/java/org/apache/shiro/realm/ldap/DefaultLdapRealm.java +++ b/core/src/main/java/org/apache/shiro/realm/ldap/DefaultLdapRealm.java @@ -336,8 +336,7 @@ protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal */ protected Object getLdapPrincipal(AuthenticationToken token) { Object principal = token.getPrincipal(); - if (principal instanceof String) { - String sPrincipal = (String) principal; + if (principal instanceof String sPrincipal) { return getUserDn(sPrincipal); } return principal; diff --git a/core/src/main/java/org/apache/shiro/realm/ldap/JndiLdapContextFactory.java b/core/src/main/java/org/apache/shiro/realm/ldap/JndiLdapContextFactory.java index 9b25b81d75..a7806a7245 100644 --- a/core/src/main/java/org/apache/shiro/realm/ldap/JndiLdapContextFactory.java +++ b/core/src/main/java/org/apache/shiro/realm/ldap/JndiLdapContextFactory.java @@ -518,8 +518,8 @@ protected void validateAuthenticationInfo(Hashtable environment) // from the FAQ, we need to check for empty credentials: // http://docs.oracle.com/javase/tutorial/jndi/ldap/faq.html if (credentials == null - || (credentials instanceof byte[] && ((byte[]) credentials).length <= 0) - || (credentials instanceof char[] && ((char[]) credentials).length <= 0) + || (credentials instanceof byte[] bytes && bytes.length <= 0) + || (credentials instanceof char[] chars && chars.length <= 0) || (String.class.isInstance(credentials) && !StringUtils.hasText(String.valueOf(credentials)))) { throw new javax.naming.AuthenticationException("LDAP Simple authentication requires both a " diff --git a/core/src/main/java/org/apache/shiro/session/Session.java b/core/src/main/java/org/apache/shiro/session/Session.java index 109dc69129..5a929e4658 100644 --- a/core/src/main/java/org/apache/shiro/session/Session.java +++ b/core/src/main/java/org/apache/shiro/session/Session.java @@ -29,7 +29,7 @@ * A {@code Session} is intended to be managed by the business tier and accessible via other * tiers without being tied to any given client technology. This is a great benefit to Java * systems, since until now, the only viable session mechanisms were the - * {@code javax.servlet.http.HttpSession} or Stateful Session EJB's, which many times + * {@code jakarta.servlet.http.HttpSession} or Stateful Session EJB's, which many times * unnecessarily coupled applications to web or ejb technologies. * * @since 0.1 diff --git a/core/src/main/java/org/apache/shiro/session/mgt/AbstractValidatingSessionManager.java b/core/src/main/java/org/apache/shiro/session/mgt/AbstractValidatingSessionManager.java index 45e57f3bac..c0a724026c 100644 --- a/core/src/main/java/org/apache/shiro/session/mgt/AbstractValidatingSessionManager.java +++ b/core/src/main/java/org/apache/shiro/session/mgt/AbstractValidatingSessionManager.java @@ -166,8 +166,8 @@ protected void afterExpired(Session session) { } protected void onInvalidation(Session s, InvalidSessionException ise, SessionKey key) { - if (ise instanceof ExpiredSessionException) { - onExpiration(s, (ExpiredSessionException) ise, key); + if (ise instanceof ExpiredSessionException exception) { + onExpiration(s, exception, key); return; } LOGGER.trace("Session with id [{}] is invalid.", s.getId()); @@ -180,8 +180,8 @@ protected void onInvalidation(Session s, InvalidSessionException ise, SessionKey } protected void doValidate(Session session) throws InvalidSessionException { - if (session instanceof ValidatingSession) { - ((ValidatingSession) session).validate(); + if (session instanceof ValidatingSession validatingSession) { + validatingSession.validate(); } else { String msg = "The " + getClass().getName() + " implementation only supports validating " + "Session implementations of the " + ValidatingSession.class.getName() + " interface. " diff --git a/core/src/main/java/org/apache/shiro/session/mgt/DefaultSessionContext.java b/core/src/main/java/org/apache/shiro/session/mgt/DefaultSessionContext.java index 2f08b2dc83..702148dbc8 100644 --- a/core/src/main/java/org/apache/shiro/session/mgt/DefaultSessionContext.java +++ b/core/src/main/java/org/apache/shiro/session/mgt/DefaultSessionContext.java @@ -21,6 +21,7 @@ import org.apache.shiro.util.MapContext; import org.apache.shiro.lang.util.StringUtils; +import java.io.Serial; import java.io.Serializable; import java.util.Map; @@ -32,6 +33,7 @@ */ public class DefaultSessionContext extends MapContext implements SessionContext { + @Serial private static final long serialVersionUID = -1424160751361252966L; private static final String HOST = DefaultSessionContext.class.getName() + ".HOST"; diff --git a/core/src/main/java/org/apache/shiro/session/mgt/DefaultSessionManager.java b/core/src/main/java/org/apache/shiro/session/mgt/DefaultSessionManager.java index 604a9de425..07c62cdea7 100644 --- a/core/src/main/java/org/apache/shiro/session/mgt/DefaultSessionManager.java +++ b/core/src/main/java/org/apache/shiro/session/mgt/DefaultSessionManager.java @@ -145,8 +145,8 @@ public void setCacheManager(CacheManager cacheManager) { * @since 1.0 */ private void applyCacheManagerToSessionDAO() { - if (this.cacheManager != null && this.sessionDAO != null && this.sessionDAO instanceof CacheManagerAware) { - ((CacheManagerAware) this.sessionDAO).setCacheManager(this.cacheManager); + if (this.cacheManager != null && this.sessionDAO != null && this.sessionDAO instanceof CacheManagerAware aware) { + aware.setCacheManager(this.cacheManager); } } @@ -179,8 +179,7 @@ protected void create(Session session) { @Override protected void onStop(Session session) { - if (session instanceof SimpleSession) { - SimpleSession ss = (SimpleSession) session; + if (session instanceof SimpleSession ss) { Date stopTs = ss.getStopTimestamp(); ss.setLastAccessTime(stopTs); } @@ -195,8 +194,8 @@ protected void afterStopped(Session session) { } protected void onExpiration(Session session) { - if (session instanceof SimpleSession) { - ((SimpleSession) session).setExpired(true); + if (session instanceof SimpleSession simpleSession) { + simpleSession.setExpired(true); } onChange(session); } diff --git a/core/src/main/java/org/apache/shiro/session/mgt/SessionContext.java b/core/src/main/java/org/apache/shiro/session/mgt/SessionContext.java index 36471ed57f..fb9950d3da 100644 --- a/core/src/main/java/org/apache/shiro/session/mgt/SessionContext.java +++ b/core/src/main/java/org/apache/shiro/session/mgt/SessionContext.java @@ -46,7 +46,7 @@ public interface SessionContext extends Map { * {@code Session}. *

* In web-based systems, this host can be inferred from the incoming request, e.g. - * {@code javax.servlet.ServletRequest#getRemoteAddr()} or {@code javax.servlet.ServletRequest#getRemoteHost()} + * {@code jakarta.servlet.ServletRequest#getRemoteAddr()} or {@code jakarta.servlet.ServletRequest#getRemoteHost()} * methods, or in socket-based systems, it can be obtained via inspecting the socket * initiator's host IP. *

diff --git a/core/src/main/java/org/apache/shiro/session/mgt/SimpleSession.java b/core/src/main/java/org/apache/shiro/session/mgt/SimpleSession.java index 8b125a3184..fbe8df02a1 100644 --- a/core/src/main/java/org/apache/shiro/session/mgt/SimpleSession.java +++ b/core/src/main/java/org/apache/shiro/session/mgt/SimpleSession.java @@ -28,6 +28,7 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.Serial; import java.io.Serializable; import java.text.DateFormat; import java.util.Collection; @@ -58,6 +59,7 @@ public class SimpleSession implements ValidatingSession, Serializable { // that is NOT serialization backwards compatible. Serialization-compatible // changes do not require a change to this number. If you need to generate // a new number in this case, use the JDK's 'serialver' program to generate it. + @Serial private static final long serialVersionUID = -7125642695178165650L; private static final Logger LOGGER = LoggerFactory.getLogger(SimpleSession.class); @@ -357,8 +359,7 @@ public boolean equals(Object obj) { if (this == obj) { return true; } - if (obj instanceof SimpleSession) { - SimpleSession other = (SimpleSession) obj; + if (obj instanceof SimpleSession other) { Serializable thisId = getId(); Serializable otherId = other.getId(); if (thisId != null && otherId != null) { diff --git a/core/src/main/java/org/apache/shiro/session/mgt/eis/CachingSessionDAO.java b/core/src/main/java/org/apache/shiro/session/mgt/eis/CachingSessionDAO.java index 6ed409c187..211d0f6e94 100644 --- a/core/src/main/java/org/apache/shiro/session/mgt/eis/CachingSessionDAO.java +++ b/core/src/main/java/org/apache/shiro/session/mgt/eis/CachingSessionDAO.java @@ -275,8 +275,8 @@ public Session readSession(Serializable sessionId) throws UnknownSessionExceptio */ public void update(Session session) throws UnknownSessionException { doUpdate(session); - if (session instanceof ValidatingSession) { - if (((ValidatingSession) session).isValid()) { + if (session instanceof ValidatingSession validatingSession) { + if (validatingSession.isValid()) { cache(session, session.getId()); } else { uncache(session); diff --git a/core/src/main/java/org/apache/shiro/subject/SimplePrincipalCollection.java b/core/src/main/java/org/apache/shiro/subject/SimplePrincipalCollection.java index ea1bdbe6d6..b488480480 100644 --- a/core/src/main/java/org/apache/shiro/subject/SimplePrincipalCollection.java +++ b/core/src/main/java/org/apache/shiro/subject/SimplePrincipalCollection.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.Serial; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -57,6 +58,7 @@ public class SimplePrincipalCollection implements MutablePrincipalCollection { // that is NOT serialization backwards compatible. Serialization-compatible // changes do not require a change to this number. If you need to generate // a new number in this case, use the JDK's 'serialver' program to generate it. + @Serial private static final long serialVersionUID = -6305224034025797558L; //TODO - complete JavaDoc @@ -69,8 +71,8 @@ public SimplePrincipalCollection() { } public SimplePrincipalCollection(Object principal, String realmName) { - if (principal instanceof Collection) { - addAll((Collection) principal, realmName); + if (principal instanceof Collection collection) { + addAll(collection, realmName); } else { add(principal, realmName); } @@ -243,8 +245,7 @@ public boolean equals(Object o) { if (o == this) { return true; } - if (o instanceof SimplePrincipalCollection) { - SimplePrincipalCollection other = (SimplePrincipalCollection) o; + if (o instanceof SimplePrincipalCollection other) { return Objects.equals(this.realmPrincipals, other.realmPrincipals); } return false; diff --git a/core/src/main/java/org/apache/shiro/subject/support/DefaultSubjectContext.java b/core/src/main/java/org/apache/shiro/subject/support/DefaultSubjectContext.java index b2d9d99986..54cb73e4dc 100644 --- a/core/src/main/java/org/apache/shiro/subject/support/DefaultSubjectContext.java +++ b/core/src/main/java/org/apache/shiro/subject/support/DefaultSubjectContext.java @@ -265,8 +265,8 @@ public String resolveHost() { if (host == null) { //check to see if there is an AuthenticationToken from which to retrieve it: AuthenticationToken token = getAuthenticationToken(); - if (token instanceof HostAuthenticationToken) { - host = ((HostAuthenticationToken) token).getHost(); + if (token instanceof HostAuthenticationToken authenticationToken) { + host = authenticationToken.getHost(); } } diff --git a/core/src/main/java/org/apache/shiro/subject/support/DelegatingSubject.java b/core/src/main/java/org/apache/shiro/subject/support/DelegatingSubject.java index d5c19c440d..5c68e8808d 100644 --- a/core/src/main/java/org/apache/shiro/subject/support/DelegatingSubject.java +++ b/core/src/main/java/org/apache/shiro/subject/support/DelegatingSubject.java @@ -265,8 +265,7 @@ public void login(AuthenticationToken token) throws AuthenticationException { String host = null; - if (subject instanceof DelegatingSubject) { - DelegatingSubject delegating = (DelegatingSubject) subject; + if (subject instanceof DelegatingSubject delegating) { //we have to do this in case there are assumed identities - we don't want to lose the 'real' principals: principals = delegating.principals; host = delegating.host; @@ -281,8 +280,8 @@ public void login(AuthenticationToken token) throws AuthenticationException { } this.principals = principals; this.authenticated = true; - if (token instanceof HostAuthenticationToken) { - host = ((HostAuthenticationToken) token).getHost(); + if (token instanceof HostAuthenticationToken authenticationToken) { + host = authenticationToken.getHost(); } if (host != null) { this.host = host; diff --git a/core/src/main/java/org/apache/shiro/subject/support/SubjectThreadState.java b/core/src/main/java/org/apache/shiro/subject/support/SubjectThreadState.java index 50a9c043d0..43d47259a2 100644 --- a/core/src/main/java/org/apache/shiro/subject/support/SubjectThreadState.java +++ b/core/src/main/java/org/apache/shiro/subject/support/SubjectThreadState.java @@ -59,8 +59,8 @@ public SubjectThreadState(Subject subject) { this.subject = subject; SecurityManager securityManager = null; - if (subject instanceof DelegatingSubject) { - securityManager = ((DelegatingSubject) subject).getSecurityManager(); + if (subject instanceof DelegatingSubject delegatingSubject) { + securityManager = delegatingSubject.getSecurityManager(); } if (securityManager == null) { securityManager = ThreadContext.getSecurityManager(); diff --git a/core/src/main/java/org/apache/shiro/util/MapContext.java b/core/src/main/java/org/apache/shiro/util/MapContext.java index 9adbc4d91a..c379d8a25e 100644 --- a/core/src/main/java/org/apache/shiro/util/MapContext.java +++ b/core/src/main/java/org/apache/shiro/util/MapContext.java @@ -18,6 +18,7 @@ */ package org.apache.shiro.util; +import java.io.Serial; import java.io.Serializable; import java.util.Collection; import java.util.Collections; @@ -35,6 +36,7 @@ */ public class MapContext implements Map, Serializable { + @Serial private static final long serialVersionUID = 5373399119017820322L; private final Map backingMap; diff --git a/core/src/test/java/org/apache/shiro/authz/aop/DenyAllAnnotationHandlerTest.java b/core/src/test/java/org/apache/shiro/authz/aop/DenyAllAnnotationHandlerTest.java index 7b40088185..907ad8bfbb 100644 --- a/core/src/test/java/org/apache/shiro/authz/aop/DenyAllAnnotationHandlerTest.java +++ b/core/src/test/java/org/apache/shiro/authz/aop/DenyAllAnnotationHandlerTest.java @@ -23,7 +23,7 @@ import org.apache.shiro.test.SecurityManagerTestSupport; import org.junit.jupiter.api.Test; -import javax.annotation.security.DenyAll; +import jakarta.annotation.security.DenyAll; import java.lang.annotation.Annotation; import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; diff --git a/core/src/test/java/org/apache/shiro/authz/aop/PermitAllAnnotationHandlerTest.java b/core/src/test/java/org/apache/shiro/authz/aop/PermitAllAnnotationHandlerTest.java index cf28a64559..dd26bf9172 100644 --- a/core/src/test/java/org/apache/shiro/authz/aop/PermitAllAnnotationHandlerTest.java +++ b/core/src/test/java/org/apache/shiro/authz/aop/PermitAllAnnotationHandlerTest.java @@ -21,7 +21,7 @@ import org.apache.shiro.test.SecurityManagerTestSupport; import org.junit.jupiter.api.Test; -import javax.annotation.security.PermitAll; +import jakarta.annotation.security.PermitAll; import java.lang.annotation.Annotation; /** diff --git a/core/src/test/java/org/apache/shiro/authz/aop/RolesAllowedAnnotationHandlerTest.java b/core/src/test/java/org/apache/shiro/authz/aop/RolesAllowedAnnotationHandlerTest.java index 27364cebf6..af9926ecb9 100644 --- a/core/src/test/java/org/apache/shiro/authz/aop/RolesAllowedAnnotationHandlerTest.java +++ b/core/src/test/java/org/apache/shiro/authz/aop/RolesAllowedAnnotationHandlerTest.java @@ -23,7 +23,7 @@ import org.apache.shiro.test.SecurityManagerTestSupport; import org.junit.jupiter.api.Test; -import javax.annotation.security.RolesAllowed; +import jakarta.annotation.security.RolesAllowed; import java.lang.annotation.Annotation; import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; diff --git a/core/src/test/java/org/apache/shiro/realm/text/TextConfigurationRealmTest.java b/core/src/test/java/org/apache/shiro/realm/text/TextConfigurationRealmTest.java index 98f37fb3d7..4384a6fa44 100644 --- a/core/src/test/java/org/apache/shiro/realm/text/TextConfigurationRealmTest.java +++ b/core/src/test/java/org/apache/shiro/realm/text/TextConfigurationRealmTest.java @@ -46,7 +46,7 @@ private void setRoles() { private void setUsers() { StringBuilder userDefinitions = new StringBuilder(); for (int i = 1; i < 3; i++) { - userDefinitions.append(String.format("user%1$d = user%1$d_password, role1, role2%n", i)); + userDefinitions.append("user%1$d = user%1$d_password, role1, role2%n".formatted(i)); } realm.setUserDefinitions(userDefinitions.toString()); } diff --git a/core/src/test/java/org/apache/shiro/session/mgt/DefaultSessionManagerTest.java b/core/src/test/java/org/apache/shiro/session/mgt/DefaultSessionManagerTest.java index fe57038985..247c67144a 100644 --- a/core/src/test/java/org/apache/shiro/session/mgt/DefaultSessionManagerTest.java +++ b/core/src/test/java/org/apache/shiro/session/mgt/DefaultSessionManagerTest.java @@ -252,7 +252,7 @@ public void appendTo(StringBuffer buffer) { } public boolean matches(Object o) { - return o instanceof Session && ((Session) o).getTimeout() == this.timeout; + return o instanceof Session s && s.getTimeout() == this.timeout; } } } diff --git a/core/src/test/resources/log4j2-list.xml b/core/src/test/resources/log4j2-list.xml index fcba6549d2..4b7d36a058 100644 --- a/core/src/test/resources/log4j2-list.xml +++ b/core/src/test/resources/log4j2-list.xml @@ -30,7 +30,7 @@ - + diff --git a/core/src/test/resources/log4j2-test.xml b/core/src/test/resources/log4j2-test.xml index 6238801f34..a045f754ca 100644 --- a/core/src/test/resources/log4j2-test.xml +++ b/core/src/test/resources/log4j2-test.xml @@ -30,7 +30,7 @@ - + diff --git a/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/AbstractCryptHash.java b/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/AbstractCryptHash.java index 631505b8d9..9d13435b62 100644 --- a/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/AbstractCryptHash.java +++ b/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/AbstractCryptHash.java @@ -23,6 +23,7 @@ import org.apache.shiro.lang.codec.Hex; import org.apache.shiro.lang.util.ByteSource; +import java.io.Serial; import java.io.Serializable; import java.nio.charset.StandardCharsets; import java.util.Arrays; @@ -49,6 +50,7 @@ public abstract class AbstractCryptHash implements Hash, Serializable { protected static final Pattern DELIMITER = Pattern.compile("\\$"); + @Serial private static final long serialVersionUID = 2483214646921027859L; private final String algorithmName; @@ -215,8 +217,7 @@ public String toBase64() { */ @Override public boolean equals(final Object other) { - if (other instanceof AbstractCryptHash) { - final AbstractCryptHash that = (AbstractCryptHash) other; + if (other instanceof AbstractCryptHash that) { return this.formatToCryptString().equals(that.formatToCryptString()); } return false; diff --git a/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/AbstractHash.java b/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/AbstractHash.java index 5c84a8799c..ef96babab7 100644 --- a/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/AbstractHash.java +++ b/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/AbstractHash.java @@ -24,6 +24,7 @@ import org.apache.shiro.lang.codec.CodecSupport; import org.apache.shiro.lang.codec.Hex; +import java.io.Serial; import java.io.Serializable; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -46,6 +47,7 @@ @Deprecated public abstract class AbstractHash extends CodecSupport implements Hash, Serializable { + @Serial private static final long serialVersionUID = -4723044219611288405L; /** * The hashed data @@ -283,8 +285,7 @@ public String toString() { */ @Override public boolean equals(Object o) { - if (o instanceof Hash) { - Hash other = (Hash) o; + if (o instanceof Hash other) { return MessageDigest.isEqual(getBytes(), other.getBytes()); } return false; diff --git a/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/SimpleHash.java b/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/SimpleHash.java index 8764117b78..4cba0f304d 100644 --- a/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/SimpleHash.java +++ b/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/SimpleHash.java @@ -29,6 +29,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.Serial; import java.io.Serializable; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -50,6 +51,7 @@ public class SimpleHash extends CodecSupport implements Hash, Serializable { private static final int DEFAULT_ITERATIONS = 1; + @Serial private static final long serialVersionUID = -6689895264902387303L; private static final Logger LOG = LoggerFactory.getLogger(SimpleHash.class); @@ -245,8 +247,8 @@ protected ByteSource convertSaltToBytes(Object salt) { * @since 1.2 */ protected ByteSource toByteSource(Object object) { - if (object instanceof ByteSource) { - return (ByteSource) object; + if (object instanceof ByteSource source) { + return source; } byte[] bytes = toBytes(object); return ByteSource.Util.bytes(bytes); @@ -460,8 +462,7 @@ public String toString() { */ @Override public boolean equals(Object o) { - if (o instanceof Hash) { - Hash other = (Hash) o; + if (o instanceof Hash other) { return MessageDigest.isEqual(getBytes(), other.getBytes()); } return false; diff --git a/crypto/pom.xml b/crypto/pom.xml index 9071d72db8..0d697f091e 100644 --- a/crypto/pom.xml +++ b/crypto/pom.xml @@ -40,4 +40,3 @@ - diff --git a/crypto/support/hashes/argon2/src/main/java/org/apache/shiro/crypto/support/hashes/argon2/Argon2Hash.java b/crypto/support/hashes/argon2/src/main/java/org/apache/shiro/crypto/support/hashes/argon2/Argon2Hash.java index 67d2d8ba33..eba3d3c922 100644 --- a/crypto/support/hashes/argon2/src/main/java/org/apache/shiro/crypto/support/hashes/argon2/Argon2Hash.java +++ b/crypto/support/hashes/argon2/src/main/java/org/apache/shiro/crypto/support/hashes/argon2/Argon2Hash.java @@ -28,6 +28,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.Serial; import java.security.SecureRandom; import java.util.Arrays; import java.util.Base64.Encoder; @@ -86,6 +87,7 @@ class Argon2Hash extends AbstractCryptHash { */ public static final int DEFAULT_MEMORY_KIB = 64 * 1024; + @Serial private static final long serialVersionUID = 2647354947284558921L; private static final Logger LOG = LoggerFactory.getLogger(Argon2Hash.class); diff --git a/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/BCryptHash.java b/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/BCryptHash.java index c77c7c1175..1ce0548667 100644 --- a/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/BCryptHash.java +++ b/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/BCryptHash.java @@ -26,6 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.Serial; import java.nio.charset.StandardCharsets; import java.security.SecureRandom; import java.util.Arrays; @@ -47,6 +48,7 @@ class BCryptHash extends AbstractCryptHash { public static final int SALT_LENGTH = 16; + @Serial private static final long serialVersionUID = 6957869292324606101L; private static final Logger LOG = LoggerFactory.getLogger(AbstractCryptHash.class); diff --git a/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/BCryptProvider.java b/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/BCryptProvider.java index 6a31c432d8..3b87b62401 100644 --- a/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/BCryptProvider.java +++ b/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/BCryptProvider.java @@ -90,7 +90,7 @@ private int getCost(HashRequest hashRequest) { final Optional optCostStr = Optional.ofNullable(parameters.get(Parameters.PARAMETER_COST)) .map(obj -> (String) obj); - if (!optCostStr.isPresent()) { + if (optCostStr.isEmpty()) { return BCryptHash.DEFAULT_COST; } @@ -117,7 +117,7 @@ private ByteSource getSalt(HashRequest hashRequest) { final Optional optSaltBase64 = Optional.ofNullable(parameters.get(Parameters.PARAMETER_SALT)) .map(obj -> (String) obj); - if (!optSaltBase64.isPresent()) { + if (optSaltBase64.isEmpty()) { return BCryptHash.createSalt(random); } diff --git a/event/src/main/java/org/apache/shiro/event/support/DefaultEventBus.java b/event/src/main/java/org/apache/shiro/event/support/DefaultEventBus.java index b4f62459bf..4a7e6c66f7 100644 --- a/event/src/main/java/org/apache/shiro/event/support/DefaultEventBus.java +++ b/event/src/main/java/org/apache/shiro/event/support/DefaultEventBus.java @@ -201,8 +201,7 @@ public void onEvent(Object event) { for (EventListener listener : this.listeners) { Object target = listener; - if (listener instanceof SingleArgumentMethodEventListener) { - SingleArgumentMethodEventListener singleArgListener = (SingleArgumentMethodEventListener) listener; + if (listener instanceof SingleArgumentMethodEventListener singleArgListener) { target = singleArgListener.getTarget(); } if (listener.accepts(event) && !delivered.contains(target)) { diff --git a/event/src/main/java/org/apache/shiro/event/support/EventListenerComparator.java b/event/src/main/java/org/apache/shiro/event/support/EventListenerComparator.java index 06e15ddaee..a9a5c616a2 100644 --- a/event/src/main/java/org/apache/shiro/event/support/EventListenerComparator.java +++ b/event/src/main/java/org/apache/shiro/event/support/EventListenerComparator.java @@ -51,10 +51,8 @@ public int compare(EventListener a, EventListener b) { } else if (a == b || a.equals(b)) { return 0; } else { - if (a instanceof TypedEventListener) { - TypedEventListener ta = (TypedEventListener) a; - if (b instanceof TypedEventListener) { - TypedEventListener tb = (TypedEventListener) b; + if (a instanceof TypedEventListener ta) { + if (b instanceof TypedEventListener tb) { return EVENT_CLASS_COMPARATOR.compare(ta.getEventType(), tb.getEventType()); } else { //TypedEventListeners are 'less than' (higher priority) than non typed diff --git a/integration-tests/guice4/pom.xml b/integration-tests/guice/pom.xml similarity index 73% rename from integration-tests/guice4/pom.xml rename to integration-tests/guice/pom.xml index 94f93549cc..1a5a1f24ac 100644 --- a/integration-tests/guice4/pom.xml +++ b/integration-tests/guice/pom.xml @@ -27,8 +27,8 @@ 3.0.0-SNAPSHOT - shiro-its-guice4 - Apache Shiro :: ITs :: Guice 4 + shiro-its-guice + Apache Shiro :: ITs :: Guice war @@ -38,8 +38,8 @@ - org.eclipse.jetty - jetty-maven-plugin + org.eclipse.jetty.ee10 + jetty-ee10-maven-plugin org.apache.maven.plugins @@ -65,8 +65,8 @@ compile - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided @@ -115,18 +115,18 @@ test - org.eclipse.jetty - apache-jsp + org.eclipse.jetty.ee10 + jetty-ee10-apache-jsp ${jetty.version} test - - org.eclipse.jetty - apache-jstl - ${jetty.version} - pom - test - + + + + + + + org.apache.shiro.integrationtests shiro-its-support @@ -134,28 +134,4 @@ - - - jdk16 - - [16,) - - - - --illegal-access=permit - --illegal-access=permit - - - - jdk17 - - [17,) - - - - --add-opens java.base/java.lang=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - diff --git a/integration-tests/guice3/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java b/integration-tests/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java similarity index 94% rename from integration-tests/guice3/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java rename to integration-tests/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java index ea9926f074..f884aefc06 100644 --- a/integration-tests/guice3/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java +++ b/integration-tests/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java @@ -23,8 +23,8 @@ import com.google.inject.servlet.GuiceServletContextListener; import org.apache.shiro.guice.web.ShiroWebModule; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; public class SampleShiroGuiceBootstrap extends GuiceServletContextListener { diff --git a/integration-tests/guice4/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java b/integration-tests/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java similarity index 98% rename from integration-tests/guice4/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java rename to integration-tests/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java index 48c714fb8a..5b6dca73fa 100644 --- a/integration-tests/guice4/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java +++ b/integration-tests/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java @@ -30,8 +30,8 @@ import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.apache.shiro.web.mgt.WebSecurityManager; -import javax.inject.Singleton; -import javax.servlet.ServletContext; +import jakarta.inject.Singleton; +import jakarta.servlet.ServletContext; import java.net.MalformedURLException; import java.net.URL; diff --git a/integration-tests/guice4/src/main/resources/log4j2.xml b/integration-tests/guice/src/main/resources/log4j2.xml similarity index 94% rename from integration-tests/guice4/src/main/resources/log4j2.xml rename to integration-tests/guice/src/main/resources/log4j2.xml index e0b3288f58..433cf5e095 100644 --- a/integration-tests/guice4/src/main/resources/log4j2.xml +++ b/integration-tests/guice/src/main/resources/log4j2.xml @@ -49,7 +49,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/integration-tests/guice3/src/main/webapp/WEB-INF/shiro.ini b/integration-tests/guice/src/main/webapp/WEB-INF/shiro.ini similarity index 100% rename from integration-tests/guice3/src/main/webapp/WEB-INF/shiro.ini rename to integration-tests/guice/src/main/webapp/WEB-INF/shiro.ini diff --git a/integration-tests/guice4/src/main/webapp/WEB-INF/web.xml b/integration-tests/guice/src/main/webapp/WEB-INF/web.xml similarity index 88% rename from integration-tests/guice4/src/main/webapp/WEB-INF/web.xml rename to integration-tests/guice/src/main/webapp/WEB-INF/web.xml index b158ae40fa..64681aec7d 100644 --- a/integration-tests/guice4/src/main/webapp/WEB-INF/web.xml +++ b/integration-tests/guice/src/main/webapp/WEB-INF/web.xml @@ -17,10 +17,10 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" + version="6.0"> org.apache.shiro.samples.guice.SampleShiroGuiceBootstrap diff --git a/integration-tests/guice3/src/main/webapp/account/index.jsp b/integration-tests/guice/src/main/webapp/account/index.jsp similarity index 100% rename from integration-tests/guice3/src/main/webapp/account/index.jsp rename to integration-tests/guice/src/main/webapp/account/index.jsp diff --git a/integration-tests/guice3/src/main/webapp/home.jsp b/integration-tests/guice/src/main/webapp/home.jsp similarity index 100% rename from integration-tests/guice3/src/main/webapp/home.jsp rename to integration-tests/guice/src/main/webapp/home.jsp diff --git a/integration-tests/guice3/src/main/webapp/include.jsp b/integration-tests/guice/src/main/webapp/include.jsp similarity index 100% rename from integration-tests/guice3/src/main/webapp/include.jsp rename to integration-tests/guice/src/main/webapp/include.jsp diff --git a/integration-tests/guice3/src/main/webapp/index.jsp b/integration-tests/guice/src/main/webapp/index.jsp similarity index 100% rename from integration-tests/guice3/src/main/webapp/index.jsp rename to integration-tests/guice/src/main/webapp/index.jsp diff --git a/integration-tests/guice3/src/main/webapp/login.jsp b/integration-tests/guice/src/main/webapp/login.jsp similarity index 100% rename from integration-tests/guice3/src/main/webapp/login.jsp rename to integration-tests/guice/src/main/webapp/login.jsp diff --git a/integration-tests/guice3/src/main/webapp/style.css b/integration-tests/guice/src/main/webapp/style.css similarity index 100% rename from integration-tests/guice3/src/main/webapp/style.css rename to integration-tests/guice/src/main/webapp/style.css diff --git a/integration-tests/guice3/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java b/integration-tests/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java similarity index 100% rename from integration-tests/guice3/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java rename to integration-tests/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java diff --git a/integration-tests/guice3/pom.xml b/integration-tests/guice3/pom.xml index 92a6bc5496..e69de29bb2 100644 --- a/integration-tests/guice3/pom.xml +++ b/integration-tests/guice3/pom.xml @@ -1,152 +0,0 @@ - - - - 4.0.0 - - - org.apache.shiro.integrationtests - shiro-integration-tests - 3.0.0-SNAPSHOT - - - shiro-its-guice3 - Apache Shiro :: ITs :: Guice 3 - war - - - 3.0 - - - - - - org.eclipse.jetty - jetty-maven-plugin - - - - - - - org.apache.taglibs - taglibs-standard-spec - compile - - - org.apache.taglibs - taglibs-standard-impl - compile - - - javax.servlet - javax.servlet-api - provided - - - org.apache.logging.log4j - log4j-slf4j2-impl - runtime - - - org.apache.logging.log4j - log4j-core - runtime - - - org.apache.shiro - shiro-core - - - org.apache.shiro - shiro-web - - - org.apache.shiro - shiro-guice - - - com.google.inject.extensions - guice-servlet - - - org.slf4j - jcl-over-slf4j - runtime - - - - org.apache.shiro - shiro-guice - ${project.version} - tests - test-jar - test - - - org.htmlunit - htmlunit - test - - - org.eclipse.jetty - apache-jsp - ${jetty.version} - test - - - org.eclipse.jetty - apache-jstl - ${jetty.version} - pom - test - - - org.apache.shiro.integrationtests - shiro-its-support - test - - - - - - jdk16 - - [16,) - - - - --illegal-access=permit - --illegal-access=permit - - - - jdk17 - - [17,) - - - - --add-opens java.base/java.lang=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - - - - diff --git a/integration-tests/guice3/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java b/integration-tests/guice3/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java deleted file mode 100644 index 2003537de1..0000000000 --- a/integration-tests/guice3/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java +++ /dev/null @@ -1,89 +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.samples.guice; - -import com.google.inject.Provides; -import com.google.inject.binder.AnnotatedBindingBuilder; -import com.google.inject.name.Names; -import org.apache.shiro.lang.codec.Base64; -import org.apache.shiro.config.ConfigurationException; -import org.apache.shiro.config.Ini; -import org.apache.shiro.guice.web.ShiroWebModule; -import org.apache.shiro.realm.text.IniRealm; -import org.apache.shiro.web.mgt.CookieRememberMeManager; -import org.apache.shiro.web.mgt.DefaultWebSecurityManager; -import org.apache.shiro.web.mgt.WebSecurityManager; - -import javax.inject.Singleton; -import javax.servlet.ServletContext; -import java.net.MalformedURLException; -import java.net.URL; - -public class SampleShiroServletModule extends ShiroWebModule { - private final ServletContext servletContext; - - public SampleShiroServletModule(ServletContext servletContext) { - super(servletContext); - - this.servletContext = servletContext; - } - - @Override - @SuppressWarnings({"unchecked", "deprecation"}) - protected void configureShiroWeb() { - bindConstant().annotatedWith(Names.named("shiro.loginUrl")).to("/login.jsp"); - try { - this.bindRealm().toConstructor(IniRealm.class.getConstructor(Ini.class)); - } catch (NoSuchMethodException e) { - addError("Could not locate proper constructor for IniRealm.", e); - } - - this.addFilterChain("/login.jsp", AUTHC); - this.addFilterChain("/logout", LOGOUT); - this.addFilterChain("/account/**", AUTHC); - - this.addFilterChain("/remoting/**", AUTHC, config(ROLES, "b2bClient"), config(PERMS, "remote:invoke:lan,wan")); - } - - @Provides - @Singleton - Ini loadShiroIni() throws MalformedURLException { - URL iniUrl = servletContext.getResource("/WEB-INF/shiro.ini"); - return Ini.fromResourcePath("url:" + iniUrl.toExternalForm()); - } - - @Override - protected void bindWebSecurityManager(AnnotatedBindingBuilder bind) { - try { - String cipherKey = loadShiroIni().getSectionProperty("main", "securityManager.rememberMeManager.cipherKey"); - - DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); - CookieRememberMeManager rememberMeManager = new CookieRememberMeManager(); - rememberMeManager.setCipherKey(Base64.decode(cipherKey)); - securityManager.setRememberMeManager(rememberMeManager); - bind.toInstance(securityManager); - } catch (MalformedURLException e) { - // for now just throw, you could just call - // super.bindWebSecurityManager(bind) if you do not need rememberMe functionality - throw new ConfigurationException("securityManager.rememberMeManager.cipherKey must be set in shiro.ini."); - } - - - } -} diff --git a/integration-tests/guice3/src/main/resources/log4j2.xml b/integration-tests/guice3/src/main/resources/log4j2.xml deleted file mode 100644 index 46fb635c9c..0000000000 --- a/integration-tests/guice3/src/main/resources/log4j2.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/integration-tests/guice3/src/main/webapp/WEB-INF/web.xml b/integration-tests/guice3/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index b158ae40fa..0000000000 --- a/integration-tests/guice3/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - org.apache.shiro.samples.guice.SampleShiroGuiceBootstrap - - - - GuiceFilter - com.google.inject.servlet.GuiceFilter - - - - GuiceFilter - /* - - - - index.jsp - - - diff --git a/integration-tests/guice4/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java b/integration-tests/guice4/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java deleted file mode 100644 index ea9926f074..0000000000 --- a/integration-tests/guice4/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java +++ /dev/null @@ -1,43 +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.samples.guice; - -import com.google.inject.Guice; -import com.google.inject.Injector; -import com.google.inject.servlet.GuiceServletContextListener; -import org.apache.shiro.guice.web.ShiroWebModule; - -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; - -public class SampleShiroGuiceBootstrap extends GuiceServletContextListener { - - private ServletContext servletContext; - - @Override - public void contextInitialized(final ServletContextEvent servletContextEvent) { - this.servletContext = servletContextEvent.getServletContext(); - super.contextInitialized(servletContextEvent); - } - - @Override - protected Injector getInjector() { - return Guice.createInjector(new SampleShiroServletModule(servletContext), ShiroWebModule.guiceFilterModule()); - } -} diff --git a/integration-tests/guice4/src/main/webapp/WEB-INF/shiro.ini b/integration-tests/guice4/src/main/webapp/WEB-INF/shiro.ini deleted file mode 100644 index db453e74b6..0000000000 --- a/integration-tests/guice4/src/main/webapp/WEB-INF/shiro.ini +++ /dev/null @@ -1,53 +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. -# - -# INI configuration is very powerful and flexible, while still remaining succinct. -# Please http://shiro.apache.org/configuration.html and -# http://shiro.apache.org/web.html for more. - -[main] -shiro.loginUrl = /login.jsp - -# We need to set the cipherKey, if you want the rememberMe cookie to work after restarting or on multiple nodes. -# YOU MUST SET THIS TO A UNIQUE STRING -securityManager.rememberMeManager.cipherKey = kPH+bIxk5D2deZiIxcaaaA== - -[users] -# format: username = password, role1, role2, ..., roleN -root = secret,admin -guest = guest,guest -presidentskroob = 12345,president -darkhelmet = ludicrousspeed,darklord,schwartz -lonestarr = vespa,goodguy,schwartz - -[roles] -# format: roleName = permission1, permission2, ..., permissionN -admin = * -schwartz = lightsaber:* -goodguy = winnebago:drive:eagle5 - -[urls] -# The /login.jsp is not restricted to authenticated users (otherwise no one could log in!), but -# the 'authc' filter must still be specified for it so it can process that url's -# login submissions. It is 'smart' enough to allow those requests through as specified by the -# shiro.loginUrl above. -/login.jsp = authc -/logout = logout -/account/** = authc -/remoting/** = authc, roles[b2bClient], perms["remote:invoke:lan,wan"] \ No newline at end of file diff --git a/integration-tests/guice4/src/main/webapp/account/index.jsp b/integration-tests/guice4/src/main/webapp/account/index.jsp deleted file mode 100644 index 4f6c9d84c7..0000000000 --- a/integration-tests/guice4/src/main/webapp/account/index.jsp +++ /dev/null @@ -1,36 +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. - --%> -<%@ include file="../include.jsp" %> - - - - "/> - - - -

Users only

- -

You are currently logged in.

- -

">Return to the home page.

- -

">Log out.

- - - \ No newline at end of file diff --git a/integration-tests/guice4/src/main/webapp/home.jsp b/integration-tests/guice4/src/main/webapp/home.jsp deleted file mode 100644 index 61dee2552a..0000000000 --- a/integration-tests/guice4/src/main/webapp/home.jsp +++ /dev/null @@ -1,69 +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. - --%> -<%@ include file="include.jsp" %> - - - - "/> - Apache Shiro Quickstart - - - -

Apache Shiro Quickstart

- -

Hi Guest! - ( ">Log out - ">Log in (sample accounts provided) ) -

- -

Welcome to the Apache Shiro Quickstart sample application. - This page represents the home page of any web application.

- -

Visit your ">account page.

-

If you want to access the user-only ">account page, - you will need to log-in first.

- -

Roles

- -

To show some taglibs, here are the roles you have and don't have. Log out and log back in under different user - accounts to see different roles.

- -

Roles you have

- -

- admin
- president
- darklord
- goodguy
- schwartz
-

- -

Roles you DON'T have

- -

- admin
- president
- darklord
- goodguy
- schwartz
-

- - - - diff --git a/integration-tests/guice4/src/main/webapp/include.jsp b/integration-tests/guice4/src/main/webapp/include.jsp deleted file mode 100644 index fddd2393a8..0000000000 --- a/integration-tests/guice4/src/main/webapp/include.jsp +++ /dev/null @@ -1,22 +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. - --%> -<%@ page import="org.apache.shiro.SecurityUtils" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> \ No newline at end of file diff --git a/integration-tests/guice4/src/main/webapp/index.jsp b/integration-tests/guice4/src/main/webapp/index.jsp deleted file mode 100644 index 9dedd19c1e..0000000000 --- a/integration-tests/guice4/src/main/webapp/index.jsp +++ /dev/null @@ -1,21 +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. - --%> - -<%-- Forward the user to the home page --%> - \ No newline at end of file diff --git a/integration-tests/guice4/src/main/webapp/login.jsp b/integration-tests/guice4/src/main/webapp/login.jsp deleted file mode 100644 index c80ee54c8a..0000000000 --- a/integration-tests/guice4/src/main/webapp/login.jsp +++ /dev/null @@ -1,110 +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. - --%> -<%@ include file="include.jsp" %> - - - - "/> - - - -

Please Log in

- - -

Here are a few sample accounts to play with in the default text-based Realm (used for this - demo and test installs only). Do you remember the movie these names came from? ;)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
UsernamePassword
rootsecret
presidentskroob12345
darkhelmetludicrousspeed
lonestarrvespa
-

-
- -
- - - - - - - - - - - - - - - -
Username:
Password:
Remember Me
-
- - - diff --git a/integration-tests/guice4/src/main/webapp/style.css b/integration-tests/guice4/src/main/webapp/style.css deleted file mode 100644 index 1308e3f5a7..0000000000 --- a/integration-tests/guice4/src/main/webapp/style.css +++ /dev/null @@ -1,47 +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. - */ -body { - margin: 15px 0 0 15px; - padding: 1px; /*background: #2370cf;*/ - font: 12px 'Lucida Grande', Geneva, Verdana, Arial, sans-serif; - color: #000; -} - -table, td { - font: 12px 'Lucida Grande', Geneva, Verdana, Arial, sans-serif; - color: #000; -} - -h1 { - font: 24px; -} - -img { - border: thin black solid; -} - -#contentBox { - text-align: center; - width: 50%; - margin: auto; - margin-top: 50px; - color: black; - background: #eee; - border: thick black solid; -} \ No newline at end of file diff --git a/integration-tests/guice4/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java b/integration-tests/guice4/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java deleted file mode 100644 index 550b9e2298..0000000000 --- a/integration-tests/guice4/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java +++ /dev/null @@ -1,79 +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.samples.guice; - -import org.apache.shiro.testing.web.AbstractContainerIT; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.htmlunit.ElementNotFoundException; -import org.htmlunit.FailingHttpStatusCodeException; -import org.htmlunit.WebAssert; -import org.htmlunit.html.HtmlCheckBoxInput; -import org.htmlunit.html.HtmlForm; -import org.htmlunit.html.HtmlPage; - -import java.io.IOException; -import java.net.MalformedURLException; - -public class ContainerIntegrationIT extends AbstractContainerIT { - - @BeforeEach - public void logOut() throws IOException { - // Make sure we are logged out - final HtmlPage homePage = webClient.getPage(getBaseUri()); - try { - homePage.getAnchorByHref("/logout").click(); - } catch (ElementNotFoundException e) { - //Ignore - } - } - - @Test - void logIn() throws FailingHttpStatusCodeException, MalformedURLException, IOException, InterruptedException { - - HtmlPage page = webClient.getPage(getBaseUri() + "login.jsp"); - HtmlForm form = page.getFormByName("loginform"); - form.getInputByName("username").setValueAttribute("root"); - form.getInputByName("password").setValueAttribute("secret"); - page = form.getInputByName("submit").click(); - // This'll throw an exception if not logged in - page.getAnchorByHref("/logout"); - } - - @Test - void logInAndRememberMe() throws Exception { - HtmlPage page = webClient.getPage(getBaseUri() + "login.jsp"); - HtmlForm form = page.getFormByName("loginform"); - form.getInputByName("username").setValueAttribute("root"); - form.getInputByName("password").setValueAttribute("secret"); - HtmlCheckBoxInput checkbox = form.getInputByName("rememberMe"); - checkbox.setChecked(true); - page = form.getInputByName("submit").click(); - jetty.stop(); - jetty.start(); - page = webClient.getPage(getBaseUri()); - // page.getAnchorByHref("/logout"); - WebAssert.assertLinkPresentWithText(page, "Log out"); - page = page.getAnchorByHref("/account").click(); - // login page should be shown again - user remembered but not authenticated - WebAssert.assertFormPresent(page, "loginform"); - } - -} diff --git a/integration-tests/jakarta-ee/pom.xml b/integration-tests/jakarta-ee/pom.xml index 052b115bc5..2b67827756 100644 --- a/integration-tests/jakarta-ee/pom.xml +++ b/integration-tests/jakarta-ee/pom.xml @@ -64,7 +64,7 @@ org.omnifaces omnifaces - 3.14.6 + 3.14.7 org.projectlombok @@ -76,19 +76,19 @@ jakarta.platform jakarta.jakartaee-api - 8.0.0 + 10.0.0 provided jakarta.activation jakarta.activation-api - 1.2.2 + 2.1.3 provided jakarta.xml.bind jakarta.xml.bind-api - 2.3.3 + 4.0.2 provided @@ -145,7 +145,7 @@ com.flowlogix flowlogix-jee - 5.5.4 + 5.5.6 @@ -216,7 +216,7 @@ com.google.inject guice - 6.0.0 + ${guice.version} test diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/cdi/CipherKeyGenerator.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/cdi/CipherKeyGenerator.java index a818d4744c..79c70f52ac 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/cdi/CipherKeyGenerator.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/cdi/CipherKeyGenerator.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.testing.cdi; -import javax.enterprise.context.ApplicationScoped; +import jakarta.enterprise.context.ApplicationScoped; import org.apache.shiro.cdi.annotations.CipherKeySupplier; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/cdi/ComponentInjectionBean.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/cdi/ComponentInjectionBean.java index b7d0144079..26662edf32 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/cdi/ComponentInjectionBean.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/cdi/ComponentInjectionBean.java @@ -13,8 +13,8 @@ */ package org.apache.shiro.testing.cdi; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import lombok.Getter; import org.apache.shiro.cdi.annotations.NoSessionCreation; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/FormBean.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/FormBean.java index 7af3ae0180..3edd79648c 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/FormBean.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/FormBean.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.testing.jakarta.ee; -import javax.enterprise.inject.Model; +import jakarta.enterprise.inject.Model; import lombok.Getter; import lombok.Setter; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/PropertyPrincipal.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/PropertyPrincipal.java index 44563c4a34..1cbc047d7c 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/PropertyPrincipal.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/PropertyPrincipal.java @@ -13,8 +13,9 @@ */ package org.apache.shiro.testing.jakarta.ee; +import java.io.Serial; import java.io.Serializable; -import javax.enterprise.inject.Vetoed; +import jakarta.enterprise.inject.Vetoed; import lombok.AllArgsConstructor; import lombok.Getter; @@ -23,6 +24,7 @@ @AllArgsConstructor @Vetoed public class PropertyPrincipal implements Serializable { + @Serial private static final long serialVersionUID = 1L; private final String userName; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/PropertyRealm.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/PropertyRealm.java index a2adcec11b..179d510f15 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/PropertyRealm.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/PropertyRealm.java @@ -14,8 +14,8 @@ package org.apache.shiro.testing.jakarta.ee; import java.util.Map; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Named; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Named; import lombok.Getter; import lombok.Setter; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedFacesViewScopedBean.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedFacesViewScopedBean.java index b424e38949..82bf1838f4 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedFacesViewScopedBean.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedFacesViewScopedBean.java @@ -15,13 +15,14 @@ import static org.apache.shiro.testing.jakarta.ee.StatisticsResource.increment; +import java.io.Serial; import java.io.Serializable; import java.util.concurrent.atomic.AtomicInteger; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.faces.context.FacesContext; -import javax.faces.view.ViewScoped; -import javax.inject.Named; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.faces.context.FacesContext; +import jakarta.faces.view.ViewScoped; +import jakarta.inject.Named; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresUser; @@ -34,6 +35,7 @@ @RequiresUser @Slf4j public class ProtectedFacesViewScopedBean implements Serializable { + @Serial private static final long serialVersionUID = 1L; private static final AtomicInteger INSTANCE_COUNT = new AtomicInteger(); @@ -50,7 +52,7 @@ void preDestroy() { } public String hello() { - return String.format("Hello from FacesViewScoped %s - %s", count, + return "Hello from FacesViewScoped %s - %s".formatted(count, FacesContext.class.getPackage().getImplementationVersion()); } } diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedOmniViewScopedBean.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedOmniViewScopedBean.java index 87daa8d1ad..c8720a1f5b 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedOmniViewScopedBean.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedOmniViewScopedBean.java @@ -15,12 +15,13 @@ import static org.apache.shiro.testing.jakarta.ee.StatisticsResource.increment; +import java.io.Serial; import java.io.Serializable; import java.util.concurrent.atomic.AtomicInteger; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.faces.context.FacesContext; -import javax.inject.Named; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.faces.context.FacesContext; +import jakarta.inject.Named; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresUser; @@ -34,6 +35,7 @@ @RequiresUser @Slf4j public class ProtectedOmniViewScopedBean implements Serializable { + @Serial private static final long serialVersionUID = 1L; private static final AtomicInteger INSTANCE_COUNT = new AtomicInteger(); @@ -50,7 +52,7 @@ void preDestroy() { } public String hello() { - return String.format("Hello from OmniViewScoped %s - %s", count, + return "Hello from OmniViewScoped %s - %s".formatted(count, FacesContext.class.getPackage().getImplementationVersion()); } } diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedOneMethod.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedOneMethod.java index d12624edc7..0cf0ea6b8b 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedOneMethod.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedOneMethod.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.testing.jakarta.ee; -import javax.enterprise.context.RequestScoped; +import jakarta.enterprise.context.RequestScoped; import org.apache.shiro.authz.annotation.RequiresUser; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedSessionScopedBean.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedSessionScopedBean.java index 44715c6264..d35df25b73 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedSessionScopedBean.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedSessionScopedBean.java @@ -15,12 +15,13 @@ import static org.apache.shiro.testing.jakarta.ee.StatisticsResource.increment; +import java.io.Serial; import java.io.Serializable; import java.util.concurrent.atomic.AtomicInteger; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.enterprise.context.SessionScoped; -import javax.inject.Named; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.enterprise.context.SessionScoped; +import jakarta.inject.Named; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresUser; @@ -33,6 +34,7 @@ @RequiresUser @Slf4j public class ProtectedSessionScopedBean implements Serializable { + @Serial private static final long serialVersionUID = 1L; private static final AtomicInteger INSTANCE_COUNT = new AtomicInteger(); @@ -49,6 +51,6 @@ void preDestroy() { } public String hello() { - return String.format("Hello from SessionScoped %s", count); + return "Hello from SessionScoped %s".formatted(count); } } diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedStatelessBean.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedStatelessBean.java index 1359005088..41106165bc 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedStatelessBean.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/ProtectedStatelessBean.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.testing.jakarta.ee; -import javax.ejb.Stateless; +import jakarta.ejb.Stateless; import org.apache.shiro.authz.annotation.RequiresUser; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/StatisticsResource.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/StatisticsResource.java index bd25d688a2..2ffe17578b 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/StatisticsResource.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/StatisticsResource.java @@ -16,12 +16,12 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; -import javax.ws.rs.Produces; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import lombok.AccessLevel; import lombok.Getter; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/UnprotectedFacade.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/UnprotectedFacade.java index d9cfe3bcca..9c489997e9 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/UnprotectedFacade.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/UnprotectedFacade.java @@ -18,9 +18,9 @@ import org.apache.shiro.ee.filters.Forms; import java.util.Map; -import javax.ejb.EJBException; -import javax.enterprise.inject.Model; -import javax.inject.Inject; +import jakarta.ejb.EJBException; +import jakarta.enterprise.inject.Model; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/UseFallback.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/UseFallback.java index 5e438da4ea..fd1a8a52c9 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/UseFallback.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/UseFallback.java @@ -13,12 +13,12 @@ */ package org.apache.shiro.testing.jakarta.ee; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Named; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Named; import org.apache.shiro.ee.filters.Forms.FallbackPredicate; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * Fallback if we are an auth page diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/ExceptionServlet.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/ExceptionServlet.java index 6e391b7948..77476b6d49 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/ExceptionServlet.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/ExceptionServlet.java @@ -17,21 +17,23 @@ import java.io.IOException; import java.io.PrintWriter; +import java.io.Serial; import java.nio.charset.StandardCharsets; import java.util.logging.LogRecord; -import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; -import static javax.ws.rs.core.MediaType.TEXT_PLAIN; +import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN; /** * Log Capture servlet */ @WebServlet("/lastException") public class ExceptionServlet extends HttpServlet { + @Serial private static final long serialVersionUID = 1L; @Override diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/InvalidateSessionServlet.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/InvalidateSessionServlet.java index ac455ffbf4..2a8879cddb 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/InvalidateSessionServlet.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/InvalidateSessionServlet.java @@ -14,17 +14,20 @@ package org.apache.shiro.testing.jakarta.ee.servlets; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import java.io.Serial; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * Invalidate session entry point */ @WebServlet("/invalidatesession") public class InvalidateSessionServlet extends HttpServlet { + @Serial private static final long serialVersionUID = 1L; @Override diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/LogoutServlet.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/LogoutServlet.java index cdce25d705..4949665339 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/LogoutServlet.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/LogoutServlet.java @@ -14,11 +14,13 @@ package org.apache.shiro.testing.jakarta.ee.servlets; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import java.io.Serial; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.SecurityUtils; @@ -27,6 +29,7 @@ */ @WebServlet("/logoutservlet") public class LogoutServlet extends HttpServlet { + @Serial private static final long serialVersionUID = 1L; @Override diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/RestConfig.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/RestConfig.java index fbd4171c6a..224c1a7016 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/RestConfig.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jakarta/ee/servlets/RestConfig.java @@ -13,8 +13,8 @@ */ package org.apache.shiro.testing.jakarta.ee.servlets; -import javax.ws.rs.ApplicationPath; -import javax.ws.rs.core.Application; +import jakarta.ws.rs.ApplicationPath; +import jakarta.ws.rs.core.Application; /** * Rest API entry point diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/JsonPojo.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/JsonPojo.java index d68df31408..aa46f9afdf 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/JsonPojo.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/JsonPojo.java @@ -13,6 +13,7 @@ */ package org.apache.shiro.testing.jaxrs; +import java.io.Serial; import java.io.Serializable; import lombok.AllArgsConstructor; @@ -27,6 +28,7 @@ @NoArgsConstructor @AllArgsConstructor public class JsonPojo implements Serializable { + @Serial private static final long serialVersionUID = 1L; private String userId; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/RolesAllowedBean.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/RolesAllowedBean.java index 4c0b4ec60c..18971f9450 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/RolesAllowedBean.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/RolesAllowedBean.java @@ -13,11 +13,11 @@ */ package org.apache.shiro.testing.jaxrs; -import javax.annotation.security.DenyAll; -import javax.annotation.security.PermitAll; -import javax.annotation.security.RolesAllowed; -import javax.enterprise.context.ApplicationScoped; -import javax.ws.rs.core.Response; +import jakarta.annotation.security.DenyAll; +import jakarta.annotation.security.PermitAll; +import jakarta.annotation.security.RolesAllowed; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.ws.rs.core.Response; @ApplicationScoped public class RolesAllowedBean { diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/TestApplication.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/TestApplication.java index de6c4bce03..1105911dad 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/TestApplication.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/TestApplication.java @@ -14,12 +14,12 @@ package org.apache.shiro.testing.jaxrs; import java.util.List; -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.context.Destroyed; -import javax.enterprise.context.Initialized; -import javax.enterprise.event.Observes; -import javax.ws.rs.ApplicationPath; -import javax.ws.rs.core.Application; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.context.Destroyed; +import jakarta.enterprise.context.Initialized; +import jakarta.enterprise.event.Observes; +import jakarta.ws.rs.ApplicationPath; +import jakarta.ws.rs.core.Application; import lombok.Getter; import org.apache.shiro.authc.SimpleAccount; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/WhoamiBean.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/WhoamiBean.java index 3e934058e5..60ac2c6e45 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/WhoamiBean.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/WhoamiBean.java @@ -13,8 +13,8 @@ */ package org.apache.shiro.testing.jaxrs; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; import org.apache.shiro.authz.annotation.RequiresUser; import org.apache.shiro.subject.Subject; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/WhoamiResource.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/WhoamiResource.java index 995450b4bf..567a4b077d 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/WhoamiResource.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/jaxrs/WhoamiResource.java @@ -14,16 +14,16 @@ package org.apache.shiro.testing.jaxrs; import java.util.function.Supplier; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; -import static javax.ws.rs.core.MediaType.APPLICATION_JSON; +import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; diff --git a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/logcapture/LogCaptureSingleton.java b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/logcapture/LogCaptureSingleton.java index bb2e4e7d3e..301d1c240a 100644 --- a/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/logcapture/LogCaptureSingleton.java +++ b/integration-tests/jakarta-ee/src/main/java/org/apache/shiro/testing/logcapture/LogCaptureSingleton.java @@ -13,10 +13,10 @@ */ package org.apache.shiro.testing.logcapture; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.ejb.Singleton; -import javax.ejb.Startup; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.ejb.Singleton; +import jakarta.ejb.Startup; /** * Entry point for capturing logs and exceptions via servlet diff --git a/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/errorpages/invalidErrorPage.xhtml b/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/errorpages/invalidErrorPage.xhtml index a324ab4e00..28ac96e1fe 100644 --- a/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/errorpages/invalidErrorPage.xhtml +++ b/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/errorpages/invalidErrorPage.xhtml @@ -31,14 +31,14 @@
  • Date/time: #{of:formatDate(now, 'yyyy-MM-dd HH:mm:ss')}
  • User agent: #{header['user-agent']}
  • User IP: #{request.remoteAddr}
  • -
  • Request URI: #{requestScope['javax.servlet.error.request_uri']}
  • +
  • Request URI: #{requestScope['jakarta.servlet.error.request_uri']}
  • Ajax request: #{facesContext.partialViewContext.ajaxRequest ? 'Yes' : 'No'}
  • -
  • Status code: #{requestScope['javax.servlet.error.status_code']}
  • -
  • Exception type: #{requestScope['javax.servlet.error.exception_type']}
  • -
  • Exception message: #{requestScope['javax.servlet.error.message']}
  • +
  • Status code: #{requestScope['jakarta.servlet.error.status_code']}
  • +
  • Exception type: #{requestScope['jakarta.servlet.error.exception_type']}
  • +
  • Exception message: #{requestScope['jakarta.servlet.error.message']}
  • Exception UUID: #{requestScope['org.omnifaces.exception_uuid']}
  • Stack trace: -
    #{of:printStackTrace(requestScope['javax.servlet.error.exception'])}
    +
    #{of:printStackTrace(requestScope['jakarta.servlet.error.exception'])}
  • diff --git a/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/faces-config.xml b/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/faces-config.xml index e66c141a19..e3dc4db858 100644 --- a/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/faces-config.xml +++ b/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/faces-config.xml @@ -19,10 +19,10 @@ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_4_0.xsd"> org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory diff --git a/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/web.xml b/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/web.xml index 0e1c1ab45c..2a49bf5b31 100644 --- a/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/web.xml +++ b/integration-tests/jakarta-ee/src/main/webapp/WEB-INF/web.xml @@ -17,16 +17,16 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" + version="6.0"> index.xhtml - javax.faces.application.ViewExpiredException + jakarta.faces.application.ViewExpiredException /WEB-INF/errorpages/invalidErrorPage.xhtml @@ -35,7 +35,7 @@ org.omnifaces.EXCEPTION_TYPES_TO_IGNORE_IN_LOGGING - javax.faces.application.ViewExpiredException, java.nio.channels.ClosedByInterruptException, java.sql.SQLException + jakarta.faces.application.ViewExpiredException, java.nio.channels.ClosedByInterruptException, java.sql.SQLException @@ -47,11 +47,11 @@ #{environmentInfo.version} - javax.faces.STATE_SAVING_METHOD + jakarta.faces.STATE_SAVING_METHOD server - javax.faces.PROJECT_STAGE + jakarta.faces.PROJECT_STAGE Development @@ -75,6 +75,6 @@ ShiroFilter - + /* diff --git a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/cdi/ComponentInjectionIT.java b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/cdi/ComponentInjectionIT.java index f84d47fb9e..7b0d8a0acb 100644 --- a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/cdi/ComponentInjectionIT.java +++ b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/cdi/ComponentInjectionIT.java @@ -13,13 +13,12 @@ */ package org.apache.shiro.testing.cdi; -import javax.inject.Inject; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; -import static org.apache.shiro.ee.util.JakartaTransformer.jakartify; import static org.assertj.core.api.Assertions.assertThat; import org.apache.shiro.testing.jakarta.ee.PropertyPrincipal; @@ -119,7 +118,7 @@ public static WebArchive createDeployment(String archive) { var webArchive = ShrinkWrap.create(WebArchive.class, archive) .addAsResource("META-INF/beans.xml") .addAsResource(new StringAsset("org.apache.shiro.cdi.ShiroSecurityExtension"), - jakartify("META-INF/services/javax.enterprise.inject.spi.Extension")) + "META-INF/services/jakarta.enterprise.inject.spi.Extension") .addAsResource("META-INF/services/org.slf4j.spi.SLF4JServiceProvider") .addAsWebInfResource(new StringAsset( ""), diff --git a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/Deployments.java b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/Deployments.java index 913c905c04..ddb69fb2dc 100644 --- a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/Deployments.java +++ b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/Deployments.java @@ -20,7 +20,6 @@ import org.apache.shiro.testing.cdi.ComponentInjectionIT; -import static org.apache.shiro.ee.util.JakartaTransformer.jakartify; import static org.apache.shiro.testing.cdi.ComponentInjectionIT.TESTABLE_MODE; import static org.apache.shiro.testing.jakarta.ee.ShiroAuthFormsIT.DEPLOYMENT_DEV_MODE; import static org.apache.shiro.testing.jakarta.ee.ShiroAuthFormsIT.DEPLOYMENT_PROD_MODE; @@ -68,7 +67,7 @@ public static WebArchive createNonUIDeployment() { private static List initializeStandardActions() { switch (System.getProperty(INTEGRATION_TEST_MODE_PROPERTY, "none")) { case CLIENT_STATE_SAVING: - return List.of(new Action(getContextParamValue(jakartify("javax.faces.STATE_SAVING_METHOD")), + return List.of(new Action(getContextParamValue("jakarta.faces.STATE_SAVING_METHOD"), node -> node.setTextContent("client"))); case SHIRO_NATIVE_SESSIONS: return List.of(new Action(getContextParamValue("shiroConfigLocations"), diff --git a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroAuthFormsIT.java b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroAuthFormsIT.java index 0f312b3e75..a8e9c63cbd 100644 --- a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroAuthFormsIT.java +++ b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroAuthFormsIT.java @@ -26,7 +26,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.apache.shiro.ee.util.JakartaTransformer.jakartify; import static org.apache.shiro.web.servlet.ShiroHttpSession.DEFAULT_SESSION_ID_NAME; import static org.assertj.core.api.Assertions.assertThat; @@ -373,7 +372,7 @@ static WebArchive createDeploymentProd(String archiveName) { .as(WebArchive.class) .deletePackage("org.apache.shiro.testing.jaxrs"); var productionList = List.of(new Action( - getContextParamValue(jakartify("javax.faces.PROJECT_STAGE")), + getContextParamValue("jakarta.faces.PROJECT_STAGE"), node -> node.setTextContent("Production"))); new ShrinkWrapManipulator().webXmlXPath(archive, Stream.concat(productionList.stream(), standardActions.stream()).collect(Collectors.toList())); diff --git a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroBeansIT.java b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroBeansIT.java index ddb7114fa2..766304f7cd 100644 --- a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroBeansIT.java +++ b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroBeansIT.java @@ -15,8 +15,6 @@ import java.net.URL; -import static org.apache.shiro.ee.util.JakartaTransformer.isJakarta; -import static org.apache.shiro.ee.util.JakartaTransformer.jakartify; import static org.apache.shiro.testing.jakarta.ee.ShiroAuthFormsIT.DEPLOYMENT_DEV_MODE; import static org.assertj.core.api.Assertions.assertThat; @@ -116,7 +114,8 @@ void checkDontCallWhenNotAuth() { webDriver.get(baseURL + "lastException"); String exceptionText = webDriver.findElement(By.tagName("body")).getText(); assertThat(exceptionText).startsWith( - jakartify("WARNING: javax.ejb.EJBException: Attempting to perform a user-only operation")); + "WARNING: jakarta.ejb.EJBException: Attempting to perform a user-only operation" + + String.format("capturing correct warning from the server: %s", exceptionText)); } @Test @@ -141,13 +140,12 @@ void checkCallWhenAuth() { @Test @OperateOnDeployment(DEPLOYMENT_DEV_MODE) void beanDestroyCalled() { - exersizeViewAndSessionScoped(facesViewScoped, "api/statistics/pc_fv", "api/statistics/pd_fv", !isJakarta()); + exersizeViewAndSessionScoped(facesViewScoped, "api/statistics/pc_fv", "api/statistics/pd_fv"); webDriver.get(baseURL + "api/statistics/clear"); - exersizeViewAndSessionScoped(omniViewScoped, "api/statistics/pc_ofv", "api/statistics/pd_ofv", false); + exersizeViewAndSessionScoped(omniViewScoped, "api/statistics/pc_ofv", "api/statistics/pd_ofv"); } - private void exersizeViewAndSessionScoped(WebElement elem, String createStatistic, String destroyStatistic, - boolean isBrokenDestructor) { + private void exersizeViewAndSessionScoped(WebElement elem, String createStatistic, String destroyStatistic) { webDriver.get(baseURL + "shiro/auth/loginform"); login(); @@ -164,7 +162,7 @@ private void exersizeViewAndSessionScoped(WebElement elem, String createStatisti webDriver.get(baseURL + createStatistic); assertThat(webDriver.findElement(By.tagName("body")).getText()).isEqualTo("2"); webDriver.get(baseURL + destroyStatistic); - assertThat(webDriver.findElement(By.tagName("body")).getText()).isEqualTo(isBrokenDestructor && webSessions ? "1" : "2"); + assertThat(webDriver.findElement(By.tagName("body")).getText()).isEqualTo("2"); webDriver.get(baseURL + "api/statistics/pc_ss"); assertThat(webDriver.findElement(By.tagName("body")).getText()).isEqualTo("1"); webDriver.get(baseURL + "api/statistics/pd_ss"); diff --git a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jaxrs/NoIniJaxRsIT.java b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jaxrs/NoIniJaxRsIT.java index 55e8875518..7d93b110bb 100644 --- a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jaxrs/NoIniJaxRsIT.java +++ b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jaxrs/NoIniJaxRsIT.java @@ -16,11 +16,11 @@ import java.net.MalformedURLException; import java.net.URI; import java.net.URL; -import javax.json.bind.JsonbException; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriBuilder; +import jakarta.json.bind.JsonbException; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriBuilder; import lombok.Builder; import lombok.SneakyThrows; diff --git a/integration-tests/jaxrs/app/pom.xml b/integration-tests/jaxrs/app/pom.xml index dc0b6a8d71..2cb54a47ce 100644 --- a/integration-tests/jaxrs/app/pom.xml +++ b/integration-tests/jaxrs/app/pom.xml @@ -36,7 +36,7 @@ false - 2.1.1 + 3.1.0 @@ -66,27 +66,26 @@
    - javax.ws.rs - javax.ws.rs-api + jakarta.ws.rs + jakarta.ws.rs-api ${jaxrs.api.version} provided - javax.servlet - javax.servlet-api - 4.0.1 + jakarta.servlet + jakarta.servlet-api provided - javax.enterprise - cdi-api - 2.0 + jakarta.enterprise + jakarta.enterprise.cdi-api + 4.0.1 provided - javax.json.bind - javax.json.bind-api - 1.0 + jakarta.json.bind + jakarta.json.bind-api + 3.0.1 provided diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/JaxRsApplication.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/JaxRsApplication.java index 4319cfdc81..f7fa1f7cde 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/JaxRsApplication.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/JaxRsApplication.java @@ -19,9 +19,9 @@ package org.apache.shiro.testing.jaxrs.app; -import javax.enterprise.context.Dependent; -import javax.ws.rs.ApplicationPath; -import javax.ws.rs.core.Application; +import jakarta.enterprise.context.Dependent; +import jakarta.ws.rs.ApplicationPath; +import jakarta.ws.rs.core.Application; /** * Simple JAX-RS {@link Application} that is implementation agnostic. diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/JaxRsShiroFeature.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/JaxRsShiroFeature.java index be98da5a74..134bed69c3 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/JaxRsShiroFeature.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/JaxRsShiroFeature.java @@ -21,9 +21,9 @@ import org.apache.shiro.web.jaxrs.ShiroFeature; -import javax.enterprise.context.Dependent; -import javax.ws.rs.core.FeatureContext; -import javax.ws.rs.ext.Provider; +import jakarta.enterprise.context.Dependent; +import jakarta.ws.rs.core.FeatureContext; +import jakarta.ws.rs.ext.Provider; @Dependent @Provider diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/ShiroListener.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/ShiroListener.java index feab2b2c67..844f79bfc0 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/ShiroListener.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/ShiroListener.java @@ -21,8 +21,8 @@ import org.apache.shiro.web.env.EnvironmentLoaderListener; -import javax.enterprise.context.Dependent; -import javax.servlet.annotation.WebListener; +import jakarta.enterprise.context.Dependent; +import jakarta.servlet.annotation.WebListener; @Dependent @WebListener diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/ShiroServletFilter.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/ShiroServletFilter.java index 43f1a4c3c2..b6e3ef6592 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/ShiroServletFilter.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/config/ShiroServletFilter.java @@ -19,9 +19,9 @@ package org.apache.shiro.testing.jaxrs.app.config; -import javax.enterprise.context.Dependent; -import javax.servlet.DispatcherType; -import javax.servlet.annotation.WebFilter; +import jakarta.enterprise.context.Dependent; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.annotation.WebFilter; @Dependent @WebFilter( diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/dao/InMemoryStormtrooperDao.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/dao/InMemoryStormtrooperDao.java index e24161e546..a5dd8cffc0 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/dao/InMemoryStormtrooperDao.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/dao/InMemoryStormtrooperDao.java @@ -27,8 +27,8 @@ import org.apache.shiro.testing.jaxrs.app.model.StormtrooperId; import org.apache.shiro.testing.jaxrs.app.model.StormtrooperTemplate; -import javax.enterprise.context.Dependent; -import javax.enterprise.inject.Default; +import jakarta.enterprise.context.Dependent; +import jakarta.enterprise.inject.Default; import java.time.Instant; import java.util.Collection; import java.util.Locale; diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/json/JsonbConfigProvider.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/json/JsonbConfigProvider.java index 5195dbcbba..672792aa8f 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/json/JsonbConfigProvider.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/json/JsonbConfigProvider.java @@ -19,13 +19,13 @@ package org.apache.shiro.testing.jaxrs.app.json; -import javax.enterprise.context.Dependent; -import javax.json.bind.Jsonb; -import javax.json.bind.JsonbBuilder; -import javax.json.bind.JsonbConfig; -import javax.json.bind.config.PropertyNamingStrategy; -import javax.ws.rs.ext.ContextResolver; -import javax.ws.rs.ext.Provider; +import jakarta.enterprise.context.Dependent; +import jakarta.json.bind.Jsonb; +import jakarta.json.bind.JsonbBuilder; +import jakarta.json.bind.JsonbConfig; +import jakarta.json.bind.config.PropertyNamingStrategy; +import jakarta.ws.rs.ext.ContextResolver; +import jakarta.ws.rs.ext.Provider; @Dependent @Provider diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/json/StormtrooperIdConverter.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/json/StormtrooperIdConverter.java index d519b09d50..5630333a09 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/json/StormtrooperIdConverter.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/json/StormtrooperIdConverter.java @@ -21,9 +21,9 @@ import org.apache.shiro.testing.jaxrs.app.model.StormtrooperId; -import javax.enterprise.context.Dependent; -import javax.json.bind.adapter.JsonbAdapter; -import javax.ws.rs.ext.Provider; +import jakarta.enterprise.context.Dependent; +import jakarta.json.bind.adapter.JsonbAdapter; +import jakarta.ws.rs.ext.Provider; @Dependent @Provider diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/model/Stormtrooper.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/model/Stormtrooper.java index 90d6eb5117..0449e62b26 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/model/Stormtrooper.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/model/Stormtrooper.java @@ -19,8 +19,8 @@ package org.apache.shiro.testing.jaxrs.app.model; -import javax.json.bind.annotation.JsonbCreator; -import javax.json.bind.annotation.JsonbProperty; +import jakarta.json.bind.annotation.JsonbCreator; +import jakarta.json.bind.annotation.JsonbProperty; import java.time.Instant; import static java.util.Objects.requireNonNull; diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/model/StormtrooperTemplate.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/model/StormtrooperTemplate.java index 3871f7d3a5..e30ce5f9f1 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/model/StormtrooperTemplate.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/model/StormtrooperTemplate.java @@ -19,8 +19,8 @@ package org.apache.shiro.testing.jaxrs.app.model; -import javax.json.bind.annotation.JsonbCreator; -import javax.json.bind.annotation.JsonbProperty; +import jakarta.json.bind.annotation.JsonbCreator; +import jakarta.json.bind.annotation.JsonbProperty; import static java.util.Objects.requireNonNull; diff --git a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/resources/StormtrooperResource.java b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/resources/StormtrooperResource.java index 7ff0a7d287..2600381758 100644 --- a/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/resources/StormtrooperResource.java +++ b/integration-tests/jaxrs/app/src/main/java/org/apache/shiro/testing/jaxrs/app/resources/StormtrooperResource.java @@ -26,16 +26,16 @@ import org.apache.shiro.testing.jaxrs.app.model.StormtrooperId; import org.apache.shiro.testing.jaxrs.app.model.StormtrooperTemplate; -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.inject.Default; -import javax.inject.Inject; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Default; +import jakarta.inject.Inject; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.NotFoundException; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; import java.util.Collection; import java.util.Optional; diff --git a/integration-tests/jaxrs/app/src/main/resources/META-INF/beans.xml b/integration-tests/jaxrs/app/src/main/resources/META-INF/beans.xml index e052c65014..c8fca83948 100644 --- a/integration-tests/jaxrs/app/src/main/resources/META-INF/beans.xml +++ b/integration-tests/jaxrs/app/src/main/resources/META-INF/beans.xml @@ -19,9 +19,8 @@ --> diff --git a/integration-tests/jaxrs/app/src/main/webapp/WEB-INF/beans.xml b/integration-tests/jaxrs/app/src/main/webapp/WEB-INF/beans.xml index e052c65014..dd0857dadd 100644 --- a/integration-tests/jaxrs/app/src/main/webapp/WEB-INF/beans.xml +++ b/integration-tests/jaxrs/app/src/main/webapp/WEB-INF/beans.xml @@ -19,9 +19,9 @@ --> diff --git a/integration-tests/jaxrs/meecrowave/pom.xml b/integration-tests/jaxrs/meecrowave/pom.xml index b5b43f72ad..ca469d5e2a 100644 --- a/integration-tests/jaxrs/meecrowave/pom.xml +++ b/integration-tests/jaxrs/meecrowave/pom.xml @@ -33,6 +33,7 @@ Apache Shiro :: ITs :: JAX-RS :: Meecrowave its.jaxrs.meecrowave + true diff --git a/integration-tests/jaxrs/openliberty/pom.xml b/integration-tests/jaxrs/openliberty/pom.xml index dfb6ed3299..1ca65d9a68 100644 --- a/integration-tests/jaxrs/openliberty/pom.xml +++ b/integration-tests/jaxrs/openliberty/pom.xml @@ -65,10 +65,10 @@ shiro-its-jaxrs-openliberty true - jaxrs-2.1 - servlet-4.0 - cdi-2.0 - jsonb-1.0 + restfulWS-3.1 + cdi-4.0 + servlet-6.0 + jsonb-3.0 dependencies false diff --git a/integration-tests/jaxrs/openliberty/src/main/liberty/config/server.xml b/integration-tests/jaxrs/openliberty/src/main/liberty/config/server.xml index 7bf5ef9e49..c012e3aa22 100644 --- a/integration-tests/jaxrs/openliberty/src/main/liberty/config/server.xml +++ b/integration-tests/jaxrs/openliberty/src/main/liberty/config/server.xml @@ -22,10 +22,10 @@ - jaxrs-2.1 - cdi-2.0 - servlet-4.0 - jsonb-1.0 + restfulWS-3.1 + cdi-4.0 + servlet-6.0 + jsonb-3.0 diff --git a/integration-tests/jaxrs/tests/pom.xml b/integration-tests/jaxrs/tests/pom.xml index 92bf09c5ae..1186540792 100644 --- a/integration-tests/jaxrs/tests/pom.xml +++ b/integration-tests/jaxrs/tests/pom.xml @@ -34,8 +34,8 @@ its.jaxrs.tests - 2.1.1 - 1.2.21 + 3.1.0 + 2.0.1 @@ -46,15 +46,15 @@ compile
    - javax.ws.rs - javax.ws.rs-api + jakarta.ws.rs + jakarta.ws.rs-api ${jaxrs.api.version} provided - javax.json.bind - javax.json.bind-api - 1.0 + jakarta.json.bind + jakarta.json.bind-api + 3.0.1 compile @@ -67,19 +67,19 @@ org.apache.cxf cxf-rt-rs-client - 3.6.4 + 4.0.6 runtime - javax.xml.bind - jaxb-api - 2.3.1 + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.2 provided org.glassfish.jaxb jaxb-runtime - 2.3.9 + 4.0.5 runtime @@ -88,9 +88,9 @@ ${johnzon.version} - javax.json - javax.json-api - 1.1.4 + jakarta.json + jakarta.json-api + 2.1.3 diff --git a/integration-tests/jaxrs/tests/src/main/java/org/apache/shiro/testing/jaxrs/tests/AbstractShiroJaxRsIT.java b/integration-tests/jaxrs/tests/src/main/java/org/apache/shiro/testing/jaxrs/tests/AbstractShiroJaxRsIT.java index 7ffd1498a0..f64e996e0d 100644 --- a/integration-tests/jaxrs/tests/src/main/java/org/apache/shiro/testing/jaxrs/tests/AbstractShiroJaxRsIT.java +++ b/integration-tests/jaxrs/tests/src/main/java/org/apache/shiro/testing/jaxrs/tests/AbstractShiroJaxRsIT.java @@ -25,12 +25,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.Arrays; diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index e63643fabb..fe5a2b1552 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -43,8 +43,7 @@ support - guice3 - guice4 + guice meecrowave-support jaxrs jakarta-ee-support diff --git a/integration-tests/support/pom.xml b/integration-tests/support/pom.xml index 21c52d0c56..06a7144279 100644 --- a/integration-tests/support/pom.xml +++ b/integration-tests/support/pom.xml @@ -45,8 +45,8 @@ compile - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided @@ -76,45 +76,40 @@ ${jetty.version} - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee10 + jetty-ee10-webapp ${jetty.version} - org.eclipse.jetty - apache-jsp + org.eclipse.jetty.ee10 + jetty-ee10-apache-jsp ${jetty.version} - - org.eclipse.jetty - apache-jstl - ${jetty.version} - pom - + + + + + + com.github.mjeanroy - junit-servers-jetty-9 - + junit-servers-jetty-12 org.eclipse.jetty jetty-server - org.eclipse.jetty - jetty-jndi - - - org.eclipse.jetty - jetty-continuation + org.eclipse.jetty.ee10 + jetty-ee10-jndi - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee10 + jetty-ee10-webapp - org.eclipse.jetty.websocket - websocket-server + org.eclipse.jetty.ee10.websocket + jetty-ee10-websocket-jakarta-server @@ -132,15 +127,6 @@ compile - - - org.apache.shiro - shiro-core - - diff --git a/integration-tests/support/src/main/java/org/apache/shiro/testing/web/AbstractContainerIT.java b/integration-tests/support/src/main/java/org/apache/shiro/testing/web/AbstractContainerIT.java index 9b77a88822..c9fe76efce 100644 --- a/integration-tests/support/src/main/java/org/apache/shiro/testing/web/AbstractContainerIT.java +++ b/integration-tests/support/src/main/java/org/apache/shiro/testing/web/AbstractContainerIT.java @@ -18,11 +18,11 @@ */ package org.apache.shiro.testing.web; -import org.apache.shiro.lang.codec.Base64; +import java.nio.charset.StandardCharsets; -import com.github.mjeanroy.junit.servers.jetty9.EmbeddedJetty; +import com.github.mjeanroy.junit.servers.jetty12.EmbeddedJetty; import com.github.mjeanroy.junit.servers.jetty.EmbeddedJettyConfiguration; -import org.eclipse.jetty.annotations.AnnotationConfiguration; +import java.util.Base64; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; @@ -30,15 +30,7 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.SslConnectionFactory; -import org.eclipse.jetty.util.resource.PathResource; import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.eclipse.jetty.webapp.Configuration; -import org.eclipse.jetty.webapp.FragmentConfiguration; -import org.eclipse.jetty.webapp.JettyWebXmlConfiguration; -import org.eclipse.jetty.webapp.MetaInfConfiguration; -import org.eclipse.jetty.webapp.WebAppContext; -import org.eclipse.jetty.webapp.WebInfConfiguration; -import org.eclipse.jetty.webapp.WebXmlConfiguration; import org.htmlunit.WebClient; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -47,14 +39,12 @@ import java.io.File; import java.io.FilenameFilter; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.net.ServerSocket; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; -import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.assertj.core.api.Assertions.assertThat; @SuppressWarnings("checkstyle:ClassDataAbstractionCoupling") @@ -77,64 +67,14 @@ public static void startContainer() throws Exception { .withWebapp(getWarDir()) .build(); - jetty = new EmbeddedJetty(config) { - - /** - * Overriding with contents of this pull request, to make fragment scanning work. - * - */ - @SuppressWarnings("checkstyle:LineLength") - protected WebAppContext createdWebAppContext() throws Exception { - final String path = configuration.getPath(); - final String webapp = configuration.getWebapp(); - final String classpath = configuration.getClasspath(); - - WebAppContext ctx = new WebAppContext(); - ctx.setClassLoader(Thread.currentThread().getContextClassLoader()); - ctx.setContextPath(path); - - // Useful for WebXmlConfiguration - ctx.setBaseResource(newResource(ctx, webapp)); - - ctx.setConfigurations(new Configuration[] { - new WebInfConfiguration(), - new WebXmlConfiguration(), - new AnnotationConfiguration(), - new JettyWebXmlConfiguration(), - new MetaInfConfiguration(), - new FragmentConfiguration(), - }); - - if (isNotBlank(classpath)) { - // Fix to scan Spring WebApplicationInitializer - // This will add compiled classes to jetty classpath - // See: http://stackoverflow.com/questions/13222071/spring-3-1-webapplicationinitializer-embedded-jetty-8-annotationconfiguration - // And more precisely: http://stackoverflow.com/a/18449506/1215828 - File classes = new File(classpath); - var containerResources = new PathResource(classes.toURI()); - ctx.getMetaData().addContainerResource(containerResources); - } - - Server server = getDelegate(); - - // web app - ctx.setParentLoaderPriority(true); - ctx.setWar(webapp); - ctx.setServer(server); - - // Add server context - server.setHandler(ctx); - - return ctx; - } - }; + jetty = new EmbeddedJetty(config); Server server = jetty.getDelegate(); // TLS tlsPort = getFreePort(); - final SslContextFactory sslContextFactory = new SslContextFactory.Server(); + final SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); sslContextFactory.setKeyStorePath(TEST_KEYSTORE_PATH.getAbsolutePath()); sslContextFactory.setKeyStorePassword(TEST_KEYSTORE_PASSWORD); sslContextFactory.setKeyManagerPassword(TEST_KEYSTORE_PASSWORD); @@ -178,12 +118,11 @@ public boolean accept(File dir, String name) { return warFiles[0].getAbsolutePath().replaceFirst("\\.war$", ""); } - protected static String getBasicAuthorizationHeaderValue(String username, String password) - throws UnsupportedEncodingException { + protected static String getBasicAuthorizationHeaderValue(String username, String password) { String authorizationHeader = username + ":" + password; byte[] valueBytes; - valueBytes = authorizationHeader.getBytes("UTF-8"); - authorizationHeader = new String(Base64.encode(valueBytes)); + valueBytes = authorizationHeader.getBytes(StandardCharsets.UTF_8); + authorizationHeader = new String(Base64.getEncoder().encode(valueBytes)); return "Basic " + authorizationHeader; } diff --git a/lang/pom.xml b/lang/pom.xml index 339608e204..621c91a18a 100644 --- a/lang/pom.xml +++ b/lang/pom.xml @@ -57,8 +57,8 @@ test - javax.servlet.jsp - jsp-api + jakarta.servlet.jsp + jakarta.servlet.jsp-api true @@ -73,9 +73,9 @@ org.apache.shiro.lang org.apache.shiro.lang.*;version=${project.version} - + - javax.servlet.jsp*;resolution:=optional, + jakarta.servlet.jsp*;resolution:=optional, * <_removeheaders>Bnd-LastModified diff --git a/lang/src/main/java/org/apache/shiro/lang/codec/CodecSupport.java b/lang/src/main/java/org/apache/shiro/lang/codec/CodecSupport.java index becf3ce9c0..31c9c6de78 100644 --- a/lang/src/main/java/org/apache/shiro/lang/codec/CodecSupport.java +++ b/lang/src/main/java/org/apache/shiro/lang/codec/CodecSupport.java @@ -204,18 +204,18 @@ protected byte[] toBytes(Object object) { String msg = "Argument for byte conversion cannot be null."; throw new IllegalArgumentException(msg); } - if (object instanceof byte[]) { - return (byte[]) object; - } else if (object instanceof ByteSource) { - return ((ByteSource) object).getBytes(); - } else if (object instanceof char[]) { - return toBytes((char[]) object); - } else if (object instanceof String) { - return toBytes((String) object); - } else if (object instanceof File) { - return toBytes((File) object); - } else if (object instanceof InputStream) { - return toBytes((InputStream) object); + if (object instanceof byte[] bytes) { + return bytes; + } else if (object instanceof ByteSource source) { + return source.getBytes(); + } else if (object instanceof char[] chars) { + return toBytes(chars); + } else if (object instanceof String string) { + return toBytes(string); + } else if (object instanceof File file) { + return toBytes(file); + } else if (object instanceof InputStream stream) { + return toBytes(stream); } else { return objectToBytes(object); } @@ -238,12 +238,12 @@ protected String toString(Object o) { String msg = "Argument for String conversion cannot be null."; throw new IllegalArgumentException(msg); } - if (o instanceof byte[]) { - return toString((byte[]) o); - } else if (o instanceof char[]) { - return new String((char[]) o); - } else if (o instanceof String) { - return (String) o; + if (o instanceof byte[] bytes) { + return toString(bytes); + } else if (o instanceof char[] chars) { + return new String(chars); + } else if (o instanceof String string) { + return string; } else { return objectToString(o); } diff --git a/lang/src/main/java/org/apache/shiro/lang/io/ResourceUtils.java b/lang/src/main/java/org/apache/shiro/lang/io/ResourceUtils.java index 85937e5a4f..472cf6ee4e 100644 --- a/lang/src/main/java/org/apache/shiro/lang/io/ResourceUtils.java +++ b/lang/src/main/java/org/apache/shiro/lang/io/ResourceUtils.java @@ -18,6 +18,7 @@ */ package org.apache.shiro.lang.io; +import java.net.URI; import org.apache.shiro.lang.util.ClassUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -120,25 +121,45 @@ public static boolean resourceExists(String resourcePath) { */ public static InputStream getInputStreamForPath(String resourcePath) throws IOException { - InputStream is; - if (resourcePath.startsWith(CLASSPATH_PREFIX)) { - is = loadFromClassPath(stripPrefix(resourcePath)); + URL url = getURLForPath(resourcePath); + if (url == null) { + throw new IOException("Resource [" + resourcePath + "] could not be found."); + } - } else if (resourcePath.startsWith(URL_PREFIX)) { - is = loadFromUrl(stripPrefix(resourcePath)); + return url.openStream(); + } - } else if (resourcePath.startsWith(FILE_PREFIX)) { - is = loadFromFile(stripPrefix(resourcePath)); + /** + * Returns the URL for the resource represented by the specified path, supporting scheme + * prefixes that direct how to acquire the input stream + * ({@link #CLASSPATH_PREFIX CLASSPATH_PREFIX}, + * {@link #URL_PREFIX URL_PREFIX}, or {@link #FILE_PREFIX FILE_PREFIX}). If the path is not prefixed by one + * of these schemes, the path is assumed to be a file-based path that can be loaded with a + * call to {@link URI#create(String)}. + * + * @param resourcePath the String path representing the resource to obtain. + * @return the URL for the specified resource. + * @throws IOException if there is a problem acquiring the resource at the specified path. + */ + public static URL getURLForPath(String resourcePath) throws IOException { + URL url; + if (resourcePath.startsWith(CLASSPATH_PREFIX)) { + url = ClassUtils.getResource(stripPrefix(resourcePath)); + } else if (resourcePath.startsWith(URL_PREFIX)) { + url = URI.create(stripPrefix(resourcePath)).toURL(); } else { - is = loadFromFile(resourcePath); + url = URI.create(resourcePath).toURL(); } - if (is == null) { - throw new IOException("Resource [" + resourcePath + "] could not be found."); + if (url == null) { + return null; } - return is; + // throw early if resource cannot be acquired + try (InputStream ignored = url.openStream()) { + return url; + } } private static InputStream loadFromFile(String path) throws IOException { diff --git a/lang/src/main/java/org/apache/shiro/lang/util/ByteSource.java b/lang/src/main/java/org/apache/shiro/lang/util/ByteSource.java index c75d074bee..12aabb491d 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/ByteSource.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/ByteSource.java @@ -173,18 +173,18 @@ public static ByteSource bytes(Object source) throws IllegalArgumentException { + "want to write your own ByteSource implementation to extract its bytes explicitly."; throw new IllegalArgumentException(msg); } - if (source instanceof byte[]) { - return bytes((byte[]) source); - } else if (source instanceof ByteSource) { - return (ByteSource) source; - } else if (source instanceof char[]) { - return bytes((char[]) source); - } else if (source instanceof String) { - return bytes((String) source); - } else if (source instanceof File) { - return bytes((File) source); - } else if (source instanceof InputStream) { - return bytes((InputStream) source); + if (source instanceof byte[] bytes) { + return bytes(bytes); + } else if (source instanceof ByteSource byteSource) { + return byteSource; + } else if (source instanceof char[] chars) { + return bytes(chars); + } else if (source instanceof String string) { + return bytes(string); + } else if (source instanceof File file) { + return bytes(file); + } else if (source instanceof InputStream stream) { + return bytes(stream); } else { throw new IllegalStateException("Encountered unexpected byte source. This is a bug - please notify " + "the Shiro developer list asap (the isCompatible implementation does not reflect this " diff --git a/lang/src/main/java/org/apache/shiro/lang/util/ByteSourceWrapper.java b/lang/src/main/java/org/apache/shiro/lang/util/ByteSourceWrapper.java index bd9270e296..2e41d413a9 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/ByteSourceWrapper.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/ByteSourceWrapper.java @@ -37,12 +37,10 @@ private ByteSourceWrapper(byte[] bytes) { * This method generically accepts byte array or ByteSource instance. */ public static ByteSourceWrapper wrap(Object value) { - if (value instanceof byte[]) { - byte[] bytes = (byte[]) value; - return new ByteSourceWrapper(bytes); - } else if (value instanceof ByteSource) { - byte[] bytes = ((ByteSource) value).getBytes(); + if (value instanceof byte[] bytes) { return new ByteSourceWrapper(bytes); + } else if (value instanceof ByteSource source) { + return new ByteSourceWrapper(source.getBytes()); } throw new IllegalArgumentException(); } diff --git a/lang/src/main/java/org/apache/shiro/lang/util/ByteUtils.java b/lang/src/main/java/org/apache/shiro/lang/util/ByteUtils.java index 97bc594c65..ff0558e3f9 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/ByteUtils.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/ByteUtils.java @@ -30,11 +30,9 @@ private ByteUtils() { * @param value An array holding sensitive data */ public static void wipe(Object value) { - if (value instanceof byte[]) { - byte[] array = (byte[]) value; + if (value instanceof byte[] array) { Arrays.fill(array, (byte) 0); - } else if (value instanceof char[]) { - char[] array = (char[]) value; + } else if (value instanceof char[] array) { Arrays.fill(array, '\u0000'); } } diff --git a/lang/src/main/java/org/apache/shiro/lang/util/ClassUtils.java b/lang/src/main/java/org/apache/shiro/lang/util/ClassUtils.java index dafbf7e8cb..dc71794d51 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/ClassUtils.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/ClassUtils.java @@ -18,6 +18,8 @@ */ package org.apache.shiro.lang.util; +import java.io.IOException; +import java.net.URL; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -106,34 +108,58 @@ private ClassUtils() { * @param name the name of the resource to acquire from the classloader(s). * @return the InputStream of the resource found, or null if the resource cannot be found from any * of the three mentioned ClassLoaders. + * @see #getResource(String) * @since 0.9 */ public static InputStream getResourceAsStream(String name) { + URL url = getResource(name); + if (url == null) { + return null; + } - InputStream is = THREAD_CL_ACCESSOR.getResourceStream(name); + try { + return url.openStream(); + } catch (IOException e) { + return null; + } + } - if (is == null) { + /** + * Returns the specified resource by checking the current thread's + * {@link Thread#getContextClassLoader() context class loader}, then the + * current ClassLoader (ClassUtils.class.getClassLoader()), then the system/application + * ClassLoader (ClassLoader.getSystemClassLoader(), in that order, using + * {@link ClassLoader#getResource(String) getResource(name)}. + * + * @param name the name of the resource to acquire from the classloader(s). + * @return the URL of the resource found, or null if the resource cannot be found from any + * of the three mentioned ClassLoaders. + * @since 3.0 + */ + public static URL getResource(String name) { + URL url = THREAD_CL_ACCESSOR.getResource(name); + if (url == null) { if (LOGGER.isTraceEnabled()) { LOGGER.trace("Resource [" + name + "] was not found via the thread context ClassLoader. Trying the " + "current ClassLoader..."); } - is = CLASS_CL_ACCESSOR.getResourceStream(name); + url = CLASS_CL_ACCESSOR.getResource(name); } - if (is == null) { + if (url == null) { if (LOGGER.isTraceEnabled()) { LOGGER.trace("Resource [" + name + "] was not found via the current class loader. Trying the " + "system/application ClassLoader..."); } - is = SYSTEM_CL_ACCESSOR.getResourceStream(name); + url = SYSTEM_CL_ACCESSOR.getResource(name); } - if (is == null && LOGGER.isTraceEnabled()) { + if (url == null && LOGGER.isTraceEnabled()) { LOGGER.trace("Resource [" + name + "] was not found via the thread context, current, or " + "system/application ClassLoaders. All heuristics have been exhausted. Returning null."); } - return is; + return url; } /** @@ -266,6 +292,8 @@ private interface ClassLoaderAccessor { Class loadClass(String fqcn); InputStream getResourceStream(String name); + + URL getResource(String name); } /** @@ -298,6 +326,15 @@ public InputStream getResourceStream(String name) { return is; } + public URL getResource(String name) { + URL url = null; + ClassLoader cl = getClassLoader(); + if (cl != null) { + url = cl.getResource(name); + } + return url; + } + protected final ClassLoader getClassLoader() { try { return doGetClassLoader(); diff --git a/lang/src/main/java/org/apache/shiro/lang/util/JspEngineDependency.java b/lang/src/main/java/org/apache/shiro/lang/util/JspEngineDependency.java index 92b7fc94a4..d17d1489c0 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/JspEngineDependency.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/JspEngineDependency.java @@ -18,7 +18,7 @@ */ package org.apache.shiro.lang.util; -import javax.servlet.jsp.JspEngineInfo; +import jakarta.servlet.jsp.JspEngineInfo; /** * This only exists so bundle plugin doesn't complain about redundant dependencies diff --git a/lang/src/main/java/org/apache/shiro/lang/util/LifecycleUtils.java b/lang/src/main/java/org/apache/shiro/lang/util/LifecycleUtils.java index 2a57e32735..d1dde1eebb 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/LifecycleUtils.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/LifecycleUtils.java @@ -36,8 +36,8 @@ public abstract class LifecycleUtils { private static final Logger LOGGER = LoggerFactory.getLogger(LifecycleUtils.class); public static void init(Object o) throws ShiroException { - if (o instanceof Initializable) { - init((Initializable) o); + if (o instanceof Initializable initializable) { + init(initializable); } } @@ -63,10 +63,10 @@ public static void init(Collection c) throws ShiroException { } public static void destroy(Object o) { - if (o instanceof Destroyable) { - destroy((Destroyable) o); - } else if (o instanceof Collection) { - destroy((Collection) o); + if (o instanceof Destroyable destroyable) { + destroy(destroyable); + } else if (o instanceof Collection collection) { + destroy(collection); } } diff --git a/lang/src/main/java/org/apache/shiro/lang/util/SimpleByteSource.java b/lang/src/main/java/org/apache/shiro/lang/util/SimpleByteSource.java index e7351d074e..7b84406c1e 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/SimpleByteSource.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/SimpleByteSource.java @@ -179,8 +179,7 @@ public boolean equals(Object o) { if (o == this) { return true; } - if (o instanceof ByteSource) { - ByteSource bs = (ByteSource) o; + if (o instanceof ByteSource bs) { return Arrays.equals(getBytes(), bs.getBytes()); } return false; diff --git a/pom.xml b/pom.xml index 0a17e4f94d..4b111399cb 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ nexus-staging - [2, 3) + [3, 4) [1.1,2) @@ -97,14 +97,13 @@ 1.8 - 2.6.11 + 3.10.8 5.3.8 2.7.3 - 1.3.2 1.1.1 - 11 - 9.4.56.v20240826 + 17 + 12.0.6 1.3.1 @@ -112,24 +111,24 @@ 2.3.0 2.0.16 2.24.0 - 5.3.39 - 2.7.18 - 4.2.3 - 2.1.6 + 6.2.3 + 3.4.3 + 7.0.0 + 3.1.0 4.4.0 1.78.1 5.4.0 - 5.13.0 + 5.15.2 1.15.1 3.0.2 4.0.23 5.11.0 3.3.0 - 5.6.15.Final + 6.6.9.Final 1.2.5 - 1.3.5 + 2.1.1 1.18.34 ${jdk.version} @@ -414,16 +413,18 @@ - org.eclipse.jetty - jetty-maven-plugin + org.eclipse.jetty.ee10 + jetty-ee10-maven-plugin ${jetty.version} - / + + / + 9080 60000 - + ./target/yyyy_mm_dd.request.log 90 true @@ -488,76 +489,6 @@ - - org.apache.maven.plugins - maven-shade-plugin - - - jakarta - package - - shade - - - false - true - jakarta - false - - - - - - - ${project.groupId}:${project.artifactId} - - - - - javax.annotation - jakarta.annotation - - javax.annotation.processing.** - - - - javax.enterprise - jakarta.enterprise - - javax.enterprise.deploy.** - - - - javax.inject - jakarta.inject - - - javax.json - jakarta.json - - - javax.servlet.http.HttpSessionContext - org.apache.shiro.web.servlet.HttpSessionContext - - - javax.servlet - jakarta.servlet - - - javax.websocket - jakarta.websocket - - - javax.ws.rs - jakarta.ws.rs - - - - - - org.apache.maven.plugins maven-checkstyle-plugin @@ -1123,11 +1054,6 @@ commons-cli ${commons.cli.version} - - javax.annotation - javax.annotation-api - ${javax.annotation.api.version} - org.aspectj aspectjrt @@ -1248,9 +1174,9 @@ true - javax.servlet.jsp - jsp-api - 2.2 + jakarta.servlet.jsp + jakarta.servlet.jsp-api + 3.1.1 provided @@ -1266,9 +1192,9 @@ provided - javax.servlet - javax.servlet-api - 4.0.1 + jakarta.servlet + jakarta.servlet-api + 6.0.0 provided @@ -1277,19 +1203,16 @@ ${groovy.version} - net.sf.ehcache - ehcache-core + org.ehcache + ehcache ${ehcache.version} + jakarta true commons-logging commons-logging - - net.sf.ehcache - sizeof-agent - @@ -1304,7 +1227,7 @@ - org.hibernate + org.hibernate.orm hibernate-core ${hibernate.version} true @@ -1334,38 +1257,21 @@ jacc - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api jboss jboss-cache - - net.sf.ehcache - ehcache - asm asm-attrs - - javax.transaction - jta - - - - org.apache.geronimo.specs - geronimo-jta_1.1_spec - 1.1.1 - runtime - true - org.springframework spring-context @@ -1445,11 +1351,6 @@ guice ${guice.version} - - com.google.inject.extensions - guice-multibindings - ${guice.version} - com.google.inject.extensions guice-servlet @@ -1463,7 +1364,7 @@ com.github.mjeanroy - junit-servers-jetty-9 + junit-servers-jetty-12 ${junit.server.jetty.version} diff --git a/samples/guice/pom.xml b/samples/guice/pom.xml index 1a62b580b6..9929d6298d 100644 --- a/samples/guice/pom.xml +++ b/samples/guice/pom.xml @@ -33,8 +33,8 @@ - org.eclipse.jetty - jetty-maven-plugin + org.eclipse.jetty.ee10 + jetty-ee10-maven-plugin @@ -51,8 +51,8 @@ compile - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided @@ -93,18 +93,11 @@ test - org.eclipse.jetty - apache-jsp + org.eclipse.jetty.ee10 + jetty-ee10-apache-jsp ${jetty.version} test - - org.eclipse.jetty - apache-jstl - ${jetty.version} - pom - test - org.apache.shiro.integrationtests diff --git a/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java b/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java index c74ff9c7ca..f38e80e27e 100644 --- a/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java +++ b/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroGuiceBootstrap.java @@ -22,8 +22,8 @@ import com.google.inject.Injector; import com.google.inject.servlet.GuiceServletContextListener; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; import static org.apache.shiro.guice.web.ShiroWebModule.guiceFilterModule; diff --git a/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroNativeSessionsServletModule.java b/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroNativeSessionsServletModule.java index 00425eb2b9..f72f5de418 100644 --- a/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroNativeSessionsServletModule.java +++ b/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroNativeSessionsServletModule.java @@ -34,8 +34,8 @@ import org.apache.shiro.web.servlet.SimpleCookie; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; -import javax.inject.Singleton; -import javax.servlet.ServletContext; +import jakarta.inject.Singleton; +import jakarta.servlet.ServletContext; import java.net.MalformedURLException; import java.net.URL; diff --git a/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java b/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java index 21589161a4..6325560313 100644 --- a/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java +++ b/samples/guice/src/main/java/org/apache/shiro/samples/guice/SampleShiroServletModule.java @@ -30,8 +30,8 @@ import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.apache.shiro.web.mgt.WebSecurityManager; -import javax.inject.Singleton; -import javax.servlet.ServletContext; +import jakarta.inject.Singleton; +import jakarta.servlet.ServletContext; import java.net.MalformedURLException; import java.net.URL; diff --git a/samples/guice/src/main/resources/log4j2.xml b/samples/guice/src/main/resources/log4j2.xml index 2fe38a9ec5..14974bd936 100644 --- a/samples/guice/src/main/resources/log4j2.xml +++ b/samples/guice/src/main/resources/log4j2.xml @@ -49,7 +49,7 @@ - + diff --git a/samples/guice/src/main/webapp/WEB-INF/web.xml b/samples/guice/src/main/webapp/WEB-INF/web.xml index b158ae40fa..64681aec7d 100644 --- a/samples/guice/src/main/webapp/WEB-INF/web.xml +++ b/samples/guice/src/main/webapp/WEB-INF/web.xml @@ -17,10 +17,10 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" + version="6.0"> org.apache.shiro.samples.guice.SampleShiroGuiceBootstrap diff --git a/samples/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java b/samples/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java index 7963a6a801..17cc17c61b 100644 --- a/samples/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java +++ b/samples/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java @@ -18,6 +18,7 @@ */ package org.apache.shiro.samples.guice; +import com.github.mjeanroy.junit.servers.jetty12.EmbeddedJetty; import org.apache.shiro.testing.web.AbstractContainerIT; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -57,7 +58,7 @@ void logIn() throws FailingHttpStatusCodeException, MalformedURLException, IOExc } @Test - void logInAndRememberMe() throws Exception { + void logInAndRememberMe(EmbeddedJetty jetty) throws Exception { HtmlPage page = webClient.getPage(getBaseUri() + "login.jsp"); HtmlForm form = page.getFormByName("loginform"); form.getInputByName("username").setValueAttribute("root"); diff --git a/samples/quickstart-guice/src/main/resources/log4j2.xml b/samples/quickstart-guice/src/main/resources/log4j2.xml index e0b3288f58..9c12bb7722 100644 --- a/samples/quickstart-guice/src/main/resources/log4j2.xml +++ b/samples/quickstart-guice/src/main/resources/log4j2.xml @@ -49,7 +49,7 @@ - + diff --git a/samples/quickstart/src/main/resources/log4j2.xml b/samples/quickstart/src/main/resources/log4j2.xml index 59d525504d..10fc2f385e 100644 --- a/samples/quickstart/src/main/resources/log4j2.xml +++ b/samples/quickstart/src/main/resources/log4j2.xml @@ -49,7 +49,7 @@ - + diff --git a/samples/servlet-plugin/pom.xml b/samples/servlet-plugin/pom.xml index 2e9eeffbc4..05a6c5ed8d 100644 --- a/samples/servlet-plugin/pom.xml +++ b/samples/servlet-plugin/pom.xml @@ -35,16 +35,18 @@ - org.eclipse.jetty - jetty-maven-plugin + org.eclipse.jetty.ee10 + jetty-ee10-maven-plugin ${jetty.version} - / + + / + 9080 60000 - + ./target/yyyy_mm_dd.request.log 90 true @@ -96,8 +98,8 @@ runtime - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided @@ -117,18 +119,18 @@ test - org.eclipse.jetty - apache-jsp + org.eclipse.jetty.ee10 + jetty-ee10-apache-jsp ${jetty.version} test - - org.eclipse.jetty - apache-jstl - ${jetty.version} - pom - test - + + + + + + + org.apache.shiro.integrationtests shiro-its-support diff --git a/samples/servlet-plugin/src/main/resources/log4j2.xml b/samples/servlet-plugin/src/main/resources/log4j2.xml index 74de9adf9a..445015ee16 100644 --- a/samples/servlet-plugin/src/main/resources/log4j2.xml +++ b/samples/servlet-plugin/src/main/resources/log4j2.xml @@ -49,7 +49,7 @@ - + diff --git a/samples/servlet-plugin/src/main/webapp/WEB-INF/web.xml b/samples/servlet-plugin/src/main/webapp/WEB-INF/web.xml index 368fd606f9..3615b6c119 100644 --- a/samples/servlet-plugin/src/main/webapp/WEB-INF/web.xml +++ b/samples/servlet-plugin/src/main/webapp/WEB-INF/web.xml @@ -17,10 +17,10 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartae/web-app_6_0.xsd" + version="6.0"> index.jsp diff --git a/samples/spring-boot-3-web/pom.xml b/samples/spring-boot-3-web/pom.xml index dcbf00b062..c8b8949c20 100644 --- a/samples/spring-boot-3-web/pom.xml +++ b/samples/spring-boot-3-web/pom.xml @@ -35,37 +35,32 @@ samples.spring.boot3.web - 3.3.4 + 3.4.3 - 6.1.13 + 6.2.3 org.apache.shiro shiro-core - jakarta org.apache.shiro shiro-web - jakarta org.apache.shiro shiro-spring-boot-web-starter - jakarta org.apache.shiro shiro-spring-boot-starter - jakarta org.apache.shiro shiro-spring - jakarta @@ -79,12 +74,6 @@ true - - - jakarta.servlet - jakarta.servlet-api - provided - diff --git a/samples/spring-boot-web/pom.xml b/samples/spring-boot-web/pom.xml index 6d01482447..30403a4b86 100644 --- a/samples/spring-boot-web/pom.xml +++ b/samples/spring-boot-web/pom.xml @@ -46,13 +46,11 @@ org.springframework.boot spring-boot-starter-thymeleaf - ${spring-boot.version} - javax.servlet - javax.servlet-api - 4.0.1 + jakarta.servlet + jakarta.servlet-api provided diff --git a/samples/spring-boot-web/src/main/java/org/apache/shiro/samples/HelloController.java b/samples/spring-boot-web/src/main/java/org/apache/shiro/samples/HelloController.java index 61fe77bf1c..213a79ead9 100644 --- a/samples/spring-boot-web/src/main/java/org/apache/shiro/samples/HelloController.java +++ b/samples/spring-boot-web/src/main/java/org/apache/shiro/samples/HelloController.java @@ -26,7 +26,7 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.Collection; import java.util.Map; diff --git a/samples/spring-boot-web/src/main/java/org/apache/shiro/samples/RestrictedErrorController.java b/samples/spring-boot-web/src/main/java/org/apache/shiro/samples/RestrictedErrorController.java index de4ed6c079..198a7ef28b 100644 --- a/samples/spring-boot-web/src/main/java/org/apache/shiro/samples/RestrictedErrorController.java +++ b/samples/spring-boot-web/src/main/java/org/apache/shiro/samples/RestrictedErrorController.java @@ -27,7 +27,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.context.request.ServletWebRequest; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.Map; /** diff --git a/samples/spring-boot/pom.xml b/samples/spring-boot/pom.xml index 83ab0a2e1a..6f734d6803 100644 --- a/samples/spring-boot/pom.xml +++ b/samples/spring-boot/pom.xml @@ -53,8 +53,8 @@ true - javax.annotation - javax.annotation-api + jakarta.annotation + jakarta.annotation-api diff --git a/samples/spring-boot/src/main/java/org/apache/shiro/samples/QuickStart.java b/samples/spring-boot/src/main/java/org/apache/shiro/samples/QuickStart.java index 817f4aa13c..9ca4f9eb76 100644 --- a/samples/spring-boot/src/main/java/org/apache/shiro/samples/QuickStart.java +++ b/samples/spring-boot/src/main/java/org/apache/shiro/samples/QuickStart.java @@ -29,7 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; /** * Simple Bean used to demonstrate subject usage. diff --git a/samples/spring-hibernate/pom.xml b/samples/spring-hibernate/pom.xml index a64b38f3e6..e4683e4657 100644 --- a/samples/spring-hibernate/pom.xml +++ b/samples/spring-hibernate/pom.xml @@ -61,35 +61,36 @@ runtime - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided - org.hibernate + org.hibernate.orm hibernate-core compile false - - - org.apache.geronimo.specs - geronimo-jta_1.1_spec - org.hsqldb hsqldb - net.sf.ehcache - ehcache-core - runtime + org.glassfish.jaxb + jaxb-runtime + 4.0.5 - org.hibernate - hibernate-ehcache - ${hibernate.version} + org.ehcache + ehcache + jakarta runtime + + + org.glassfish.jaxb + jaxb-runtime + + org.springframework @@ -114,8 +115,8 @@ test - org.eclipse.jetty - apache-jsp + org.eclipse.jetty.ee10 + jetty-ee10-apache-jsp ${jetty.version} test @@ -129,13 +130,13 @@ taglibs-standard-impl runtime - - org.eclipse.jetty - apache-jstl - ${jetty.version} - pom - test - + + + + + + + org.apache.shiro.integrationtests diff --git a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/dao/HibernateUserDAO.java b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/dao/HibernateUserDAO.java index 4d9b927e3f..28a5bd16ec 100644 --- a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/dao/HibernateUserDAO.java +++ b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/dao/HibernateUserDAO.java @@ -25,7 +25,6 @@ import java.util.List; @Repository("userDAO") -@SuppressWarnings("unchecked") public class HibernateUserDAO extends HibernateDao implements UserDAO { public User getUser(Long userId) { @@ -35,27 +34,26 @@ public User getUser(Long userId) { public User findUser(String username) { Assert.hasText(username); String query = "from User u where u.username = :username"; - return (User) getSession().createQuery(query).setParameter("username", username).uniqueResult(); + return getSession().createQuery(query, User.class).setParameter("username", username).uniqueResult(); } public void createUser(User user) { - getSession().save(user); + getSession().persist(user); } public List getAllUsers() { - return getSession().createQuery("from User order by username").list(); + return getSession().createQuery("from User order by username", User.class).list(); } public void deleteUser(Long userId) { User user = getUser(userId); if (user != null) { - getSession().delete(user); + getSession().remove(user); } } public void updateUser(User user) { - getSession().update(user); + getSession().merge(user); } } - diff --git a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/model/Role.java b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/model/Role.java index bb87f7f9a9..b1f51de8aa 100644 --- a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/model/Role.java +++ b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/model/Role.java @@ -21,15 +21,15 @@ import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Index; -import javax.persistence.JoinTable; -import javax.persistence.Table; +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Index; +import jakarta.persistence.JoinTable; +import jakarta.persistence.Table; import java.util.Set; /** diff --git a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/model/User.java b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/model/User.java index 1bd70928cd..f9990586e8 100644 --- a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/model/User.java +++ b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/model/User.java @@ -21,16 +21,16 @@ import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Index; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.Table; +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Index; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; import java.util.HashSet; import java.util.Set; diff --git a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/CurrentUserInterceptor.java b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/CurrentUserInterceptor.java index 0cd64e1f10..44fff7f07e 100644 --- a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/CurrentUserInterceptor.java +++ b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/CurrentUserInterceptor.java @@ -25,8 +25,8 @@ import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * A Spring MVC interceptor that adds the currentUser into the request as a request attribute diff --git a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/ManageUsersController.java b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/ManageUsersController.java index 80c9a16f02..1615d99ad6 100644 --- a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/ManageUsersController.java +++ b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/ManageUsersController.java @@ -26,9 +26,10 @@ import org.springframework.ui.Model; import org.springframework.util.Assert; import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; /** @@ -52,7 +53,7 @@ public void manageUsers(Model model) { model.addAttribute("users", userService.getAllUsers()); } - @RequestMapping(value = "/editUser", method = RequestMethod.GET) + @GetMapping("/editUser") @RequiresPermissions("user:edit") public String showEditUserForm(Model model, @RequestParam Long userId, @ModelAttribute EditUserCommand command) { @@ -63,7 +64,7 @@ public String showEditUserForm(Model model, @RequestParam Long userId, @ModelAtt return "editUser"; } - @RequestMapping(value = "/editUser", method = RequestMethod.POST) + @PostMapping("/editUser") @RequiresPermissions("user:edit") public String editUser(Model model, @RequestParam Long userId, @ModelAttribute EditUserCommand command, BindingResult errors) { diff --git a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/SecurityController.java b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/SecurityController.java index 640ffbf736..2a097b4054 100644 --- a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/SecurityController.java +++ b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/SecurityController.java @@ -24,9 +24,10 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; /** * Web MVC controller that handles security-related web requests, such as login and logout. @@ -36,12 +37,12 @@ public class SecurityController { private LoginValidator loginValidator = new LoginValidator(); - @RequestMapping(value = "/login", method = RequestMethod.GET) + @GetMapping("/login") public String showLoginForm(Model model, @ModelAttribute LoginCommand command) { return "login"; } - @RequestMapping(value = "/login", method = RequestMethod.POST) + @PostMapping("/login") public String login(Model model, @ModelAttribute LoginCommand command, BindingResult errors) { loginValidator.validate(command, errors); diff --git a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/SignupController.java b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/SignupController.java index 463c8bb24b..0624be07fd 100644 --- a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/SignupController.java +++ b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/web/SignupController.java @@ -25,9 +25,9 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.PostMapping; /** * Web MVC controller that handles signup requests. @@ -44,12 +44,12 @@ public void setUserService(UserService userService) { this.userService = userService; } - @RequestMapping(value = "/signup", method = RequestMethod.GET) + @GetMapping("/signup") public String showSignupForm(Model model, @ModelAttribute SignupCommand command) { return "signup"; } - @RequestMapping(value = "/signup", method = RequestMethod.POST) + @PostMapping("/signup") public String showSignupForm(Model model, @ModelAttribute SignupCommand command, BindingResult errors) { signupValidator.validate(command, errors); diff --git a/samples/spring-hibernate/src/main/resources/ehcache.xml b/samples/spring-hibernate/src/main/resources/ehcache.xml index b6c560d53c..e45450ac3d 100644 --- a/samples/spring-hibernate/src/main/resources/ehcache.xml +++ b/samples/spring-hibernate/src/main/resources/ehcache.xml @@ -16,41 +16,52 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + + - - - - + + java.io.Serializable + java.io.Serializable + + 10 + + + 1000 + 50 + + - - - + + + + + 100 + - + + + + + 100 + - + + + 1 + + 1000 + - \ No newline at end of file + + + 1 + + 1000 + + diff --git a/samples/spring-hibernate/src/main/webapp/WEB-INF/web.xml b/samples/spring-hibernate/src/main/webapp/WEB-INF/web.xml index 84072a7c07..0640430980 100644 --- a/samples/spring-hibernate/src/main/webapp/WEB-INF/web.xml +++ b/samples/spring-hibernate/src/main/webapp/WEB-INF/web.xml @@ -17,10 +17,10 @@ ~ specific language governing permissions and limitations ~ under the License. --> - - org.eclipse.jetty - jetty-maven-plugin + org.eclipse.jetty.ee10 + jetty-ee10-maven-plugin ${jetty.version} @@ -65,13 +65,26 @@ shiro-ehcache - javax.annotation - javax.annotation-api + jakarta.annotation + jakarta.annotation-api + 2.1.1 - net.sf.ehcache - ehcache-core + org.glassfish.jaxb + jaxb-runtime + 4.0.5 + + + org.ehcache + ehcache + jakarta false + + + org.glassfish.jaxb + jaxb-runtime + + org.apache.shiro @@ -82,8 +95,8 @@ shiro-web - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided diff --git a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/BootstrapDataPopulator.java b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/BootstrapDataPopulator.java index a2e014aaae..4f358a0b94 100644 --- a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/BootstrapDataPopulator.java +++ b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/BootstrapDataPopulator.java @@ -34,26 +34,28 @@ */ public class BootstrapDataPopulator implements InitializingBean { - private static final String CREATE_TABLES = "create table users (\n" - + " username varchar(255) primary key,\n" - + " password varchar(255) not null\n" - + ");\n" - + "\n" - + "create table roles (\n" - + " role_name varchar(255) primary key\n" - + ");\n" - + "\n" - + "create table user_roles (\n" - + " username varchar(255) not null,\n" - + " role_name varchar(255) not null,\n" - + " constraint user_roles_uq unique ( username, role_name )\n" - + ");\n" - + "\n" - + "create table roles_permissions (\n" - + " role_name varchar(255) not null,\n" - + " permission varchar(255) not null,\n" - + " primary key (role_name, permission)\n" - + ");"; + private static final String CREATE_TABLES = """ + create table users ( + username varchar(255) primary key, + password varchar(255) not null + ); + + create table roles ( + role_name varchar(255) primary key + ); + + create table user_roles ( + username varchar(255) not null, + role_name varchar(255) not null, + constraint user_roles_uq unique ( username, role_name ) + ); + + create table roles_permissions ( + role_name varchar(255) not null, + permission varchar(255) not null, + primary key (role_name, permission) + );\ + """; private static final Logger LOGGER = LoggerFactory.getLogger(BootstrapDataPopulator.class); 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 04b28b65b9..36c8a8d031 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 @@ -20,18 +20,17 @@ import org.apache.shiro.authc.credential.HashedCredentialsMatcher; import org.apache.shiro.cache.ehcache.EhCacheManager; -import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.samples.spring.BootstrapDataPopulator; import org.apache.shiro.samples.spring.DefaultSampleManager; import org.apache.shiro.samples.spring.realm.SaltAwareJdbcRealm; import org.apache.shiro.spring.config.ShiroAnnotationProcessorConfiguration; import org.apache.shiro.spring.config.ShiroBeanConfiguration; -import org.apache.shiro.spring.remoting.SecureRemoteInvocationExecutor; import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition; import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition; import org.apache.shiro.spring.web.config.ShiroRequestMappingConfig; import org.apache.shiro.spring.web.config.ShiroWebConfiguration; import org.apache.shiro.spring.web.config.ShiroWebFilterConfiguration; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -51,7 +50,6 @@ ShiroWebConfiguration.class, ShiroWebFilterConfiguration.class, JspViewsConfig.class, - RemotingServletConfig.class, ShiroRequestMappingConfig.class}) @ComponentScan("org.apache.shiro.samples.spring") public class ApplicationConfig { @@ -118,23 +116,6 @@ protected EhCacheManager cacheManager() { return ehCacheManager; } - /** - * Secure Spring remoting: Ensure any Spring Remoting method invocations can be associated - * with a Subject for security checks. - * - * @param securityManager - * @return - */ - @Bean - protected SecureRemoteInvocationExecutor secureRemoteInvocationExecutor(SecurityManager securityManager) { - - SecureRemoteInvocationExecutor executor = new SecureRemoteInvocationExecutor(); - executor.setSecurityManager(securityManager); - - return executor; - } - - /** * Simulated business-tier "Manager", not Shiro related, just an example * @@ -174,8 +155,6 @@ public ShiroFilterChainDefinition shiroFilterChainDefinition() { chainDefinition.addPathDefinition("/s/login", "anon"); //allow WebStart to pull the jars for the swing app chainDefinition.addPathDefinition("/*.jar", "anon"); - // protected using SecureRemoteInvocationExecutor - chainDefinition.addPathDefinition("/remoting/**", "anon"); chainDefinition.addPathDefinition("/**", "authc"); diff --git a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/RemotingServletConfig.java b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/RemotingServletConfig.java deleted file mode 100644 index 403f0761b1..0000000000 --- a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/RemotingServletConfig.java +++ /dev/null @@ -1,46 +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.samples.spring.config; - -import org.apache.shiro.samples.spring.SampleManager; -import org.apache.shiro.spring.remoting.SecureRemoteInvocationExecutor; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter; - -/** - * Remoting bean definitions. - */ -@Configuration -@ComponentScan("org.apache.shiro.samples.spring") -public class RemotingServletConfig { - - @Bean(name = "/sampleManager") - @SuppressWarnings("deprecation") - public HttpInvokerServiceExporter accountServiceExporter(SampleManager sampleManager, - SecureRemoteInvocationExecutor secureRemoteInvocationExecutor) { - - HttpInvokerServiceExporter httpInvokerServiceExporter = new HttpInvokerServiceExporter(); - httpInvokerServiceExporter.setService(sampleManager); - httpInvokerServiceExporter.setServiceInterface(SampleManager.class); - httpInvokerServiceExporter.setRemoteInvocationExecutor(secureRemoteInvocationExecutor); - return httpInvokerServiceExporter; - } -} diff --git a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/ServletApplicationInitializer.java b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/ServletApplicationInitializer.java index ad3e77abc1..5d62b00de3 100644 --- a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/ServletApplicationInitializer.java +++ b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/config/ServletApplicationInitializer.java @@ -24,10 +24,10 @@ import org.springframework.web.filter.DelegatingFilterProxy; import org.springframework.web.servlet.DispatcherServlet; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; -import javax.servlet.ServletContext; -import javax.servlet.ServletRegistration; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRegistration; import java.util.EnumSet; /** @@ -49,11 +49,6 @@ public void onStartup(ServletContext container) { shiroFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/*"); - ServletRegistration.Dynamic remotingDispatcher = container.addServlet("remoting", new DispatcherServlet(appContext)); - remotingDispatcher.setLoadOnStartup(1); - remotingDispatcher.addMapping("/remoting/*"); - - ServletRegistration.Dynamic dispatcher = container.addServlet("DispatcherServlet", new DispatcherServlet(appContext)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); diff --git a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/IndexController.java b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/IndexController.java index 5ec0eef9a4..996bdfbae3 100644 --- a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/IndexController.java +++ b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/IndexController.java @@ -25,8 +25,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import java.util.LinkedHashMap; @@ -69,7 +70,7 @@ public void setSampleManager(SampleManager sampleManager) { | M E T H O D S | ============================================*/ - @RequestMapping(method = RequestMethod.GET) + @GetMapping protected String doGet(Model model) { buildModel(model); @@ -98,7 +99,7 @@ protected Model buildModel(Model model) { return model; } - @RequestMapping(method = RequestMethod.POST) + @PostMapping protected String doPost(@RequestParam("value") String newSessionValue, Model model) { sampleManager.setValue(newSessionValue); diff --git a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/JnlpController.java b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/JnlpController.java index 4ae45ff3b2..4b0b73371b 100644 --- a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/JnlpController.java +++ b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/JnlpController.java @@ -22,13 +22,13 @@ import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; @@ -68,7 +68,7 @@ public void setJnlpView(String jnlpView) { ============================================*/ @SuppressWarnings("checkstyle:MagicNumber") - @RequestMapping(method = RequestMethod.GET) + @GetMapping protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { Subject subject = SecurityUtils.getSubject(); diff --git a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/LoginController.java b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/LoginController.java index 22b8ad457f..1747ec2c90 100644 --- a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/LoginController.java +++ b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/LoginController.java @@ -25,8 +25,9 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; /** @@ -42,14 +43,14 @@ public class LoginController { private static String loginview = "login"; - @RequestMapping(method = RequestMethod.GET) + @GetMapping protected String view() { return loginview; } - @RequestMapping(method = RequestMethod.POST) - protected String onSubmit(@RequestParam("username") String username, - @RequestParam("password") String password, + @PostMapping + protected String onSubmit(@RequestParam String username, + @RequestParam String password, Model model) throws Exception { UsernamePasswordToken token = new UsernamePasswordToken(username, password); diff --git a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/LogoutController.java b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/LogoutController.java index d10896541d..a8dfa1a494 100644 --- a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/LogoutController.java +++ b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/LogoutController.java @@ -20,13 +20,13 @@ import org.apache.shiro.SecurityUtils; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * Controller responsible for logging out the current user by invoking @@ -38,7 +38,7 @@ @RequestMapping("/s/logout") public class LogoutController extends AbstractController { - @RequestMapping(method = RequestMethod.GET) + @GetMapping protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { SecurityUtils.getSubject().logout(); return new ModelAndView("redirect:login"); diff --git a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/RootRedirectController.java b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/RootRedirectController.java index 6f64306c30..bfc5b9dbc8 100644 --- a/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/RootRedirectController.java +++ b/samples/spring-mvc/src/main/java/org/apache/shiro/samples/spring/web/RootRedirectController.java @@ -19,8 +19,8 @@ package org.apache.shiro.samples.spring.web; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; /** * Implements the root {@code welcome-file}j as a {@code @RequestMapping}. @@ -29,7 +29,7 @@ @RequestMapping({"/"}) public class RootRedirectController { - @RequestMapping(method = RequestMethod.GET) + @GetMapping public String redirect() { return "redirect:/s/login"; } diff --git a/samples/spring-mvc/src/main/resources/ehcache.xml b/samples/spring-mvc/src/main/resources/ehcache.xml index eb3504d41c..b5c7c9769b 100644 --- a/samples/spring-mvc/src/main/resources/ehcache.xml +++ b/samples/spring-mvc/src/main/resources/ehcache.xml @@ -18,8 +18,9 @@ --> - - + - - + (specified as LFU) --> - + + java.io.Serializable + java.io.Serializable + + 2 + + 10000 + - + + + + + + 10000 + 50 + + - + + org.apache.shiro.authz.AuthorizationInfo + + 10 + + 100 + - + diff --git a/samples/spring/pom.xml b/samples/spring/pom.xml index d4344c4f1d..e4968c99b7 100644 --- a/samples/spring/pom.xml +++ b/samples/spring/pom.xml @@ -47,8 +47,9 @@ spring-context - javax.annotation - javax.annotation-api + jakarta.annotation + jakarta.annotation-api + 2.1.1 org.slf4j diff --git a/samples/spring/src/main/java/org/apache/shiro/samples/spring/QuickStart.java b/samples/spring/src/main/java/org/apache/shiro/samples/spring/QuickStart.java index c2627de894..62fc46333c 100644 --- a/samples/spring/src/main/java/org/apache/shiro/samples/spring/QuickStart.java +++ b/samples/spring/src/main/java/org/apache/shiro/samples/spring/QuickStart.java @@ -29,7 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; /** * Simple Bean used to demonstrate subject usage. diff --git a/samples/web-jakarta/pom.xml b/samples/web-jakarta/pom.xml index e9b257a0ed..a04e58748b 100644 --- a/samples/web-jakarta/pom.xml +++ b/samples/web-jakarta/pom.xml @@ -33,7 +33,7 @@ 1.2.15 - 10.1.30 + 10.1.36 true @@ -53,13 +53,11 @@ org.apache.shiro shiro-core - jakarta ${project.version} org.apache.shiro shiro-web - jakarta org.apache.logging.log4j @@ -132,10 +130,14 @@ runtime + + jakarta.ws.rs + jakarta.ws.rs-api + 3.1.0 + org.apache.meecrowave meecrowave-core - jakarta ${meecrowave.version} test diff --git a/samples/web-jakarta/src/main/resources/log4j2.xml b/samples/web-jakarta/src/main/resources/log4j2.xml index a91b7f33e4..4dea7a8b64 100644 --- a/samples/web-jakarta/src/main/resources/log4j2.xml +++ b/samples/web-jakarta/src/main/resources/log4j2.xml @@ -49,7 +49,7 @@ - + diff --git a/samples/web-jakarta/src/main/webapp/WEB-INF/web.xml b/samples/web-jakarta/src/main/webapp/WEB-INF/web.xml index 65295aa878..2fcc7832c8 100644 --- a/samples/web-jakarta/src/main/webapp/WEB-INF/web.xml +++ b/samples/web-jakarta/src/main/webapp/WEB-INF/web.xml @@ -17,10 +17,10 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartae/web-app_6_0.xsd" + version="6.0"> org.apache.shiro.web.env.EnvironmentLoaderListener diff --git a/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/JakartaAbstractContainerIT.java b/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/JakartaAbstractContainerIT.java index c6abdae9a9..f8ad3cefef 100644 --- a/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/JakartaAbstractContainerIT.java +++ b/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/JakartaAbstractContainerIT.java @@ -24,9 +24,11 @@ import java.io.File; import java.io.FilenameFilter; +import org.junit.jupiter.api.Disabled; import static org.assertj.core.api.Assertions.assertThat; +@Disabled("Needs meecrowave 2.0.0") public abstract class JakartaAbstractContainerIT { protected static Meecrowave meecrowave; diff --git a/samples/web-jakarta/src/test/resources/log4j2.xml b/samples/web-jakarta/src/test/resources/log4j2.xml index 6fa211e03c..2dde25ba47 100644 --- a/samples/web-jakarta/src/test/resources/log4j2.xml +++ b/samples/web-jakarta/src/test/resources/log4j2.xml @@ -30,7 +30,7 @@ - + diff --git a/samples/web/pom.xml b/samples/web/pom.xml index 0352d4dd25..63716b5b99 100644 --- a/samples/web/pom.xml +++ b/samples/web/pom.xml @@ -40,16 +40,18 @@ - org.eclipse.jetty - jetty-maven-plugin + org.eclipse.jetty.ee10 + jetty-ee10-maven-plugin ${jetty.version} - / + + / + 9080 60000 - + ./target/yyyy_mm_dd.request.log 90 true @@ -73,8 +75,8 @@ runtime - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided @@ -115,18 +117,18 @@ runtime - org.eclipse.jetty - apache-jsp + org.eclipse.jetty.ee10 + jetty-ee10-apache-jsp ${jetty.version} test - - org.eclipse.jetty - apache-jstl - ${jetty.version} - pom - test - + + + + + + + org.apache.shiro.integrationtests shiro-its-support diff --git a/samples/web/src/main/resources/log4j2.xml b/samples/web/src/main/resources/log4j2.xml index a91b7f33e4..4dea7a8b64 100644 --- a/samples/web/src/main/resources/log4j2.xml +++ b/samples/web/src/main/resources/log4j2.xml @@ -49,7 +49,7 @@ - + diff --git a/samples/web/src/main/webapp/WEB-INF/web.xml b/samples/web/src/main/webapp/WEB-INF/web.xml index 379b042ef6..2fcc7832c8 100644 --- a/samples/web/src/main/webapp/WEB-INF/web.xml +++ b/samples/web/src/main/webapp/WEB-INF/web.xml @@ -17,10 +17,10 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartae/web-app_6_0.xsd" + version="6.0"> org.apache.shiro.web.env.EnvironmentLoaderListener diff --git a/support/aspectj/pom.xml b/support/aspectj/pom.xml index d32896189a..b83d352ce3 100644 --- a/support/aspectj/pom.xml +++ b/support/aspectj/pom.xml @@ -39,10 +39,6 @@ org.apache.shiro shiro-core - - org.aspectj - aspectjrt - org.aspectj aspectjweaver diff --git a/support/cdi/pom.xml b/support/cdi/pom.xml index 6e2f8a677d..17014c7306 100644 --- a/support/cdi/pom.xml +++ b/support/cdi/pom.xml @@ -38,7 +38,7 @@ jakarta.enterprise jakarta.enterprise.cdi-api - 2.0.2 + 4.0.1 provided true @@ -59,9 +59,16 @@ jakarta.validation jakarta.validation-api - 2.0.2 + 3.0.2 test + + jakarta.ejb + jakarta.ejb-api + 4.0.1 + test + true + org.mockito mockito-junit-jupiter @@ -109,30 +116,6 @@ - - org.apache.maven.plugins - maven-shade-plugin - - - - javax.faces - jakarta.faces - - - javax.el - jakarta.el - - - javax.interceptor - jakarta.interceptor - - - javax.activation - jakarta.activation - - - - org.apache.maven.plugins maven-checkstyle-plugin diff --git a/support/cdi/src/main/java/org/apache/shiro/cdi/AnnotatedTypeWrapper.java b/support/cdi/src/main/java/org/apache/shiro/cdi/AnnotatedTypeWrapper.java index 9cc5c2cb9e..56cab505d4 100644 --- a/support/cdi/src/main/java/org/apache/shiro/cdi/AnnotatedTypeWrapper.java +++ b/support/cdi/src/main/java/org/apache/shiro/cdi/AnnotatedTypeWrapper.java @@ -17,7 +17,7 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.enterprise.inject.spi.AnnotatedType; +import jakarta.enterprise.inject.spi.AnnotatedType; import lombok.Getter; import lombok.experimental.Delegate; diff --git a/support/cdi/src/main/java/org/apache/shiro/cdi/AopHelper.java b/support/cdi/src/main/java/org/apache/shiro/cdi/AopHelper.java index b5e6ab8e52..aaeb22c11a 100644 --- a/support/cdi/src/main/java/org/apache/shiro/cdi/AopHelper.java +++ b/support/cdi/src/main/java/org/apache/shiro/cdi/AopHelper.java @@ -22,9 +22,9 @@ import java.util.List; import java.util.Map; import java.util.concurrent.Callable; -import javax.annotation.security.DenyAll; -import javax.annotation.security.PermitAll; -import javax.annotation.security.RolesAllowed; +import jakarta.annotation.security.DenyAll; +import jakarta.annotation.security.PermitAll; +import jakarta.annotation.security.RolesAllowed; import lombok.AccessLevel; import lombok.Getter; diff --git a/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroComponentProducer.java b/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroComponentProducer.java index a678df86ad..27618360de 100644 --- a/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroComponentProducer.java +++ b/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroComponentProducer.java @@ -17,10 +17,10 @@ import java.lang.reflect.ParameterizedType; import java.util.Optional; import java.util.function.Supplier; -import javax.enterprise.context.Dependent; -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Produces; -import javax.enterprise.inject.spi.InjectionPoint; +import jakarta.enterprise.context.Dependent; +import jakarta.enterprise.context.RequestScoped; +import jakarta.enterprise.inject.Produces; +import jakarta.enterprise.inject.spi.InjectionPoint; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; diff --git a/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecureAnnotation.java b/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecureAnnotation.java index f9066a4133..709cb1f66b 100644 --- a/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecureAnnotation.java +++ b/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecureAnnotation.java @@ -22,7 +22,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Target; -import javax.interceptor.InterceptorBinding; +import jakarta.interceptor.InterceptorBinding; /** * CDI Marker Annotation to use Shiro diff --git a/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecurityExtension.java b/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecurityExtension.java index efc39f55ae..2e0ac0c060 100644 --- a/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecurityExtension.java +++ b/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecurityExtension.java @@ -13,13 +13,13 @@ */ package org.apache.shiro.cdi; -import javax.annotation.security.DenyAll; -import javax.annotation.security.PermitAll; -import javax.annotation.security.RolesAllowed; -import javax.enterprise.event.Observes; -import javax.enterprise.inject.spi.Extension; -import javax.enterprise.inject.spi.ProcessAnnotatedType; -import javax.enterprise.inject.spi.WithAnnotations; +import jakarta.annotation.security.DenyAll; +import jakarta.annotation.security.PermitAll; +import jakarta.annotation.security.RolesAllowed; +import jakarta.enterprise.event.Observes; +import jakarta.enterprise.inject.spi.Extension; +import jakarta.enterprise.inject.spi.ProcessAnnotatedType; +import jakarta.enterprise.inject.spi.WithAnnotations; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresGuest; diff --git a/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecurityInterceptor.java b/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecurityInterceptor.java index cdd802df4f..c2e1c992f6 100644 --- a/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecurityInterceptor.java +++ b/support/cdi/src/main/java/org/apache/shiro/cdi/ShiroSecurityInterceptor.java @@ -13,13 +13,14 @@ */ package org.apache.shiro.cdi; +import java.io.Serial; import java.io.Serializable; import java.util.List; -import javax.annotation.Priority; -import javax.enterprise.context.Dependent; -import javax.interceptor.AroundInvoke; -import javax.interceptor.Interceptor; -import javax.interceptor.InvocationContext; +import jakarta.annotation.Priority; +import jakarta.enterprise.context.Dependent; +import jakarta.interceptor.AroundInvoke; +import jakarta.interceptor.Interceptor; +import jakarta.interceptor.InvocationContext; import org.apache.shiro.cdi.AopHelper.SecurityInterceptor; @@ -31,6 +32,7 @@ @Dependent @Priority(Interceptor.Priority.LIBRARY_BEFORE) public class ShiroSecurityInterceptor implements Serializable { + @Serial private static final long serialVersionUID = 1L; @AroundInvoke diff --git a/support/cdi/src/main/java/org/apache/shiro/cdi/annotations/NoSessionCreation.java b/support/cdi/src/main/java/org/apache/shiro/cdi/annotations/NoSessionCreation.java index f233408560..f2b4d271fa 100644 --- a/support/cdi/src/main/java/org/apache/shiro/cdi/annotations/NoSessionCreation.java +++ b/support/cdi/src/main/java/org/apache/shiro/cdi/annotations/NoSessionCreation.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.cdi.annotations; -import javax.inject.Qualifier; +import jakarta.inject.Qualifier; import java.lang.annotation.Documented; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; diff --git a/support/cdi/src/main/java/org/apache/shiro/cdi/annotations/Principal.java b/support/cdi/src/main/java/org/apache/shiro/cdi/annotations/Principal.java index 3cd8257362..b5c04bd0d3 100644 --- a/support/cdi/src/main/java/org/apache/shiro/cdi/annotations/Principal.java +++ b/support/cdi/src/main/java/org/apache/shiro/cdi/annotations/Principal.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.cdi.annotations; -import javax.inject.Qualifier; +import jakarta.inject.Qualifier; import java.lang.annotation.Documented; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; diff --git a/support/cdi/src/main/resources/META-INF/beans.xml b/support/cdi/src/main/resources/META-INF/beans.xml index 3227a065c4..c54d976859 100644 --- a/support/cdi/src/main/resources/META-INF/beans.xml +++ b/support/cdi/src/main/resources/META-INF/beans.xml @@ -17,8 +17,7 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartae/beans_4_0.xsd"> diff --git a/support/cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/support/cdi/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension similarity index 100% rename from support/cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension rename to support/cdi/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension diff --git a/support/cdi/src/test/java/org/apache/shiro/cdi/AnnotatedTypeWrapperTest.java b/support/cdi/src/test/java/org/apache/shiro/cdi/AnnotatedTypeWrapperTest.java index 14aa49ce74..aabd587133 100644 --- a/support/cdi/src/test/java/org/apache/shiro/cdi/AnnotatedTypeWrapperTest.java +++ b/support/cdi/src/test/java/org/apache/shiro/cdi/AnnotatedTypeWrapperTest.java @@ -19,13 +19,13 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.ejb.Stateless; +import jakarta.ejb.Stateless; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; -import javax.enterprise.context.SessionScoped; -import javax.enterprise.inject.spi.AnnotatedType; +import jakarta.enterprise.context.SessionScoped; +import jakarta.enterprise.inject.spi.AnnotatedType; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresGuest; diff --git a/support/cdi/src/test/java/org/apache/shiro/cdi/AopHelperTest.java b/support/cdi/src/test/java/org/apache/shiro/cdi/AopHelperTest.java index cd747f72d4..b42b08a48e 100644 --- a/support/cdi/src/test/java/org/apache/shiro/cdi/AopHelperTest.java +++ b/support/cdi/src/test/java/org/apache/shiro/cdi/AopHelperTest.java @@ -21,7 +21,7 @@ import org.apache.shiro.cdi.AopHelper.SecurityInterceptor; import org.junit.jupiter.api.Test; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; import java.lang.annotation.Annotation; import java.util.List; diff --git a/support/ehcache/pom.xml b/support/ehcache/pom.xml index 40a96211af..465fe9c79c 100644 --- a/support/ehcache/pom.xml +++ b/support/ehcache/pom.xml @@ -40,8 +40,20 @@ shiro-cache - net.sf.ehcache - ehcache-core + org.glassfish.jaxb + jaxb-runtime + 4.0.5 + + + org.ehcache + ehcache + jakarta + + + org.glassfish.jaxb + jaxb-runtime + + @@ -72,7 +84,7 @@ org.apache.shiro.cache.ehcache*;version=${project.version} org.apache.shiro.cache*;version="${shiro.osgi.importRange}", - net.sf.ehcache*;version="[2.5, 3)", + org.ehcache*;version="[3.10, 4)", * <_removeheaders>Bnd-LastModified diff --git a/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCache.java b/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCache.java index b2f34e1923..b27a22770f 100644 --- a/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCache.java +++ b/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCache.java @@ -18,7 +18,7 @@ */ package org.apache.shiro.cache.ehcache; -import net.sf.ehcache.Element; +import java.util.LinkedList; import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheException; import org.slf4j.Logger; @@ -33,7 +33,7 @@ /** - * Shiro {@link org.apache.shiro.cache.Cache} implementation that wraps an {@link net.sf.ehcache.Ehcache} instance. + * Shiro {@link org.apache.shiro.cache.Cache} implementation that wraps an {@link org.ehcache.core.Ehcache} instance. * * @param K * @param V @@ -49,14 +49,14 @@ public class EhCache implements Cache { /** * The wrapped Ehcache instance. */ - private net.sf.ehcache.Ehcache cache; + private org.ehcache.Cache cache; /** * Constructs a new EhCache instance with the given cache. * * @param cache - delegate EhCache instance this Shiro cache instance will wrap. */ - public EhCache(net.sf.ehcache.Ehcache cache) { + public EhCache(org.ehcache.Cache cache) { if (cache == null) { throw new IllegalArgumentException("Cache argument cannot be null."); } @@ -69,23 +69,22 @@ public EhCache(net.sf.ehcache.Ehcache cache) { * @param key the key of the element to return. * @return The value placed into the cache with an earlier put, or null if not found or expired */ - @SuppressWarnings("unchecked") public V get(K key) throws CacheException { try { if (LOGGER.isTraceEnabled()) { - LOGGER.trace("Getting object from cache [" + cache.getName() + "] for key [" + key + "]"); + LOGGER.trace("Getting object from cache [{}] for key [{}]", cache, key); } if (key == null) { return null; } else { - Element element = cache.get(key); + V element = cache.get(key); if (element == null) { if (LOGGER.isTraceEnabled()) { - LOGGER.trace("Element for [" + key + "] is null."); + LOGGER.trace("Element for [{}] is null.", key); } return null; } else { - return (V) element.getObjectValue(); + return element; } } } catch (Throwable t) { @@ -101,12 +100,11 @@ public V get(K key) throws CacheException { */ public V put(K key, V value) throws CacheException { if (LOGGER.isTraceEnabled()) { - LOGGER.trace("Putting object in cache [" + cache.getName() + "] for key [" + key + "]"); + LOGGER.trace("Putting object in cache [{}] for key [{}]", cache, key); } try { V previous = get(key); - Element element = new Element(key, value); - cache.put(element); + cache.put(key, value); return previous; } catch (Throwable t) { throw new CacheException(t); @@ -122,7 +120,7 @@ public V put(K key, V value) throws CacheException { */ public V remove(K key) throws CacheException { if (LOGGER.isTraceEnabled()) { - LOGGER.trace("Removing object from cache [" + cache.getName() + "] for key [" + key + "]"); + LOGGER.trace("Removing object from cache [{}] for key [{}]", cache, key); } try { V previous = get(key); @@ -138,10 +136,10 @@ public V remove(K key) throws CacheException { */ public void clear() throws CacheException { if (LOGGER.isTraceEnabled()) { - LOGGER.trace("Clearing all objects from cache [" + cache.getName() + "]"); + LOGGER.trace("Clearing all objects from cache [{}]", cache); } try { - cache.removeAll(); + cache.removeAll(keys()); } catch (Throwable t) { throw new CacheException(t); } @@ -149,7 +147,11 @@ public void clear() throws CacheException { public int size() { try { - return cache.getSize(); + int size = 0; + for (org.ehcache.Cache.Entry ignored : cache) { + size++; + } + return size; } catch (Throwable t) { throw new CacheException(t); } @@ -157,10 +159,13 @@ public int size() { public Set keys() { try { - @SuppressWarnings({"unchecked"}) - List keys = cache.getKeys(); + List keys = new LinkedList<>(); + for (org.ehcache.Cache.Entry entry : cache) { + keys.add(entry.getKey()); + } + if (!isEmpty(keys)) { - return Collections.unmodifiableSet(new LinkedHashSet(keys)); + return Collections.unmodifiableSet(new LinkedHashSet<>(keys)); } else { return Collections.emptySet(); } @@ -171,10 +176,9 @@ public Set keys() { public Collection values() { try { - @SuppressWarnings({"unchecked"}) - List keys = cache.getKeys(); + Set keys = keys(); if (!isEmpty(keys)) { - List values = new ArrayList(keys.size()); + List values = new ArrayList<>(keys.size()); for (K key : keys) { V value = get(key); if (value != null) { @@ -198,11 +202,7 @@ public Collection values() { * number is unknown or cannot be calculated. */ public long getMemoryUsage() { - try { - return cache.calculateInMemorySize(); - } catch (Throwable t) { - return -1; - } + return -1; } /** @@ -213,11 +213,7 @@ public long getMemoryUsage() { * that number is unknown or cannot be calculated. */ public long getMemoryStoreSize() { - try { - return cache.getMemoryStoreSize(); - } catch (Throwable t) { - throw new CacheException(t); - } + return -1; } /** @@ -228,20 +224,16 @@ public long getMemoryStoreSize() { * that number is unknown or cannot be calculated. */ public long getDiskStoreSize() { - try { - return cache.getDiskStoreSize(); - } catch (Throwable t) { - throw new CacheException(t); - } + return -1; } /** - * Returns "EhCache [" + cache.getName() + "]" + * Returns "EhCache [" + cache + "]" * - * @return "EhCache [" + cache.getName() + "]" + * @return "EhCache [" + cache + "]" */ public String toString() { - return "EhCache [" + cache.getName() + "]"; + return "EhCache [" + cache + "]"; } ////////////////////////// @@ -249,7 +241,7 @@ public String toString() { ////////////////////////// // CollectionUtils cannot be removed from shiro-core until 2.0 as it has a dependency on PrincipalCollection - private static boolean isEmpty(Collection c) { + private static boolean isEmpty(Collection c) { return c == null || c.isEmpty(); } } diff --git a/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCacheManager.java b/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCacheManager.java index eb4518878c..659954301c 100644 --- a/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCacheManager.java +++ b/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCacheManager.java @@ -18,12 +18,19 @@ */ package org.apache.shiro.cache.ehcache; +import java.io.Serializable; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.net.URL; import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheException; import org.apache.shiro.cache.CacheManager; import org.apache.shiro.lang.io.ResourceUtils; import org.apache.shiro.lang.util.Destroyable; import org.apache.shiro.lang.util.Initializable; +import org.ehcache.config.CacheConfiguration; +import org.ehcache.config.builders.CacheManagerBuilder; +import org.ehcache.xml.XmlConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,17 +40,17 @@ /** * Shiro {@code CacheManager} implementation utilizing the Ehcache framework for all cache functionality. *

    - * This class can {@link #setCacheManager(net.sf.ehcache.CacheManager) accept} a manually configured - * {@link net.sf.ehcache.CacheManager net.sf.ehcache.CacheManager} instance, + * This class can {@link #setCacheManager(org.ehcache.CacheManager) accept} a manually configured + * {@link org.ehcache.CacheManager org.ehcache.CacheManager} instance, * or an {@code ehcache.xml} path location can be specified instead and one will be constructed. If neither are * specified, Shiro's failsafe ehcache.xml file will be used by default. *

    * This implementation requires EhCache 1.2 and above. Make sure EhCache 1.1 or earlier * is not in the classpath or it will not work. *

    - * Please see the Ehcache website for their documentation. + * Please see the Ehcache website for their documentation. * - * @see The Ehcache website + * @see The Ehcache website * @since 0.2 */ public class EhCacheManager implements CacheManager, Initializable, Destroyable { @@ -56,7 +63,7 @@ public class EhCacheManager implements CacheManager, Initializable, Destroyable /** * The EhCache cache manager used by this implementation to create caches. */ - protected net.sf.ehcache.CacheManager manager; + protected org.ehcache.CacheManager manager; /** * Indicates if the CacheManager instance was implicitly/automatically created by this instance, indicating that @@ -76,20 +83,20 @@ public EhCacheManager() { } /** - * Returns the wrapped Ehcache {@link net.sf.ehcache.CacheManager CacheManager} instance. + * Returns the wrapped Ehcache {@link org.ehcache.CacheManager CacheManager} instance. * - * @return the wrapped Ehcache {@link net.sf.ehcache.CacheManager CacheManager} instance. + * @return the wrapped Ehcache {@link org.ehcache.CacheManager CacheManager} instance. */ - public net.sf.ehcache.CacheManager getCacheManager() { + public org.ehcache.CacheManager getCacheManager() { return manager; } /** - * Sets the wrapped Ehcache {@link net.sf.ehcache.CacheManager CacheManager} instance. + * Sets the wrapped Ehcache {@link org.ehcache.CacheManager CacheManager} instance. * - * @param manager the wrapped Ehcache {@link net.sf.ehcache.CacheManager CacheManager} instance. + * @param manager the wrapped Ehcache {@link org.ehcache.CacheManager CacheManager} instance. */ - public void setCacheManager(net.sf.ehcache.CacheManager manager) { + public void setCacheManager(org.ehcache.CacheManager manager) { this.manager = manager; } @@ -140,37 +147,58 @@ protected InputStream getCacheManagerConfigFileInputStream() { } } + /** + * Acquires the URL for the ehcache configuration file using + * {@link ResourceUtils#getURLForPath(String) ResourceUtils.getURLForPath} with the + * path returned from {@link #getCacheManagerConfigFile() getCacheManagerConfigFile()}. + * + * @return the URL for the ehcache configuration file. + */ + protected URL getCacheManagerConfigFileUrl() { + final var configFile = getCacheManagerConfigFile(); + try { + return ResourceUtils.getURLForPath(configFile); + } catch (IOException e) { + throw new IllegalStateException("Unable to parse cacheManagerConfigFile [" + + configFile + "]", e); + } + } + /** * Loads an existing EhCache from the cache manager, or starts a new cache if one is not found. * * @param name the name of the cache to load/create. */ - public final Cache getCache(String name) throws CacheException { + @Override + public final Cache getCache(String name) + throws CacheException { if (LOGGER.isTraceEnabled()) { - LOGGER.trace("Acquiring EhCache instance named [" + name + "]"); + LOGGER.trace("Acquiring EhCache instance named [{}]", name); } try { - net.sf.ehcache.Ehcache cache = ensureCacheManager().getEhcache(name); + org.ehcache.Cache cache = (org.ehcache.Cache) ensureCacheManager() + .getCache(name, Serializable.class, Serializable.class); if (cache == null) { if (LOGGER.isInfoEnabled()) { LOGGER.info("Cache with name '{}' does not yet exist. Creating now.", name); } - this.manager.addCache(name); - - cache = manager.getCache(name); + CacheConfiguration config = (CacheConfiguration) new XmlConfiguration(getCacheManagerConfigFileUrl()) + .newCacheConfigurationBuilderFromTemplate("default", Serializable.class, Serializable.class) + .build(); + cache = manager.createCache(name, config); if (LOGGER.isInfoEnabled()) { - LOGGER.info("Added EhCache named [" + name + "]"); + LOGGER.info("Added EhCache named [{}]", name); } } else { if (LOGGER.isInfoEnabled()) { - LOGGER.info("Using existing EHCache named [" + cache.getName() + "]"); + LOGGER.info("Using existing EHCache named [{}]", name); } } - return new EhCache(cache); - } catch (net.sf.ehcache.CacheException e) { + return new EhCache<>(cache); + } catch (IllegalArgumentException | IllegalStateException | ReflectiveOperationException e) { throw new CacheException(e); } } @@ -191,24 +219,21 @@ public final Cache getCache(String name) throws CacheException { * this case. * * @throws org.apache.shiro.cache.CacheException if there are any CacheExceptions thrown by EhCache. - * @see net.sf.ehcache.CacheManager#create + * @see org.ehcache.CacheManager#createCache(String, org.ehcache.config.CacheConfiguration) */ public final void init() throws CacheException { ensureCacheManager(); } - private net.sf.ehcache.CacheManager ensureCacheManager() { + private org.ehcache.CacheManager ensureCacheManager() { try { if (this.manager == null) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("cacheManager property not set. Constructing CacheManager instance... "); } - //using the CacheManager constructor, the resulting instance is _not_ a VM singleton - //(as would be the case by calling CacheManager.getInstance(). We do not use the getInstance here - //because we need to know if we need to destroy the CacheManager instance - using the static call, - //we don't know which component is responsible for shutting it down. By using a single EhCacheManager, - //it will always know to shut down the instance if it was responsible for creating it. - this.manager = new net.sf.ehcache.CacheManager(getCacheManagerConfigFileInputStream()); + final XmlConfiguration xmlConfig = new XmlConfiguration(getCacheManagerConfigFileUrl()); + this.manager = CacheManagerBuilder.newCacheManager(xmlConfig); + this.manager.init(); if (LOGGER.isTraceEnabled()) { LOGGER.trace("instantiated Ehcache CacheManager instance."); } @@ -233,8 +258,8 @@ private net.sf.ehcache.CacheManager ensureCacheManager() { public void destroy() { if (cacheManagerImplicitlyCreated) { try { - net.sf.ehcache.CacheManager cacheMgr = getCacheManager(); - cacheMgr.shutdown(); + org.ehcache.CacheManager cacheMgr = getCacheManager(); + cacheMgr.close(); } catch (Throwable t) { if (LOGGER.isWarnEnabled()) { LOGGER.warn("Unable to cleanly shutdown implicitly created CacheManager instance. " @@ -246,4 +271,30 @@ public void destroy() { } } } + + private abstract static class TypeToken { + + private final Type type; + + protected TypeToken() { + Type superClass = getClass().getGenericSuperclass(); + if (superClass instanceof ParameterizedType ptype) { + type = ptype.getActualTypeArguments()[0]; + } else { + throw new IllegalStateException("Invalid TypeToken; must specify type parameters"); + } + } + + @SuppressWarnings("unchecked") + public Class getType() { + if (type instanceof Class) { + return (Class) type; + } else if (type instanceof ParameterizedType ptype) { + return (Class) ptype.getRawType(); + } else { + throw new IllegalArgumentException("Type " + type + " is not a Class or ParameterizedType"); + } + } + } + } diff --git a/support/ehcache/src/main/resources/org/apache/shiro/cache/ehcache/ehcache.xml b/support/ehcache/src/main/resources/org/apache/shiro/cache/ehcache/ehcache.xml index fad756a082..e232e922fe 100644 --- a/support/ehcache/src/main/resources/org/apache/shiro/cache/ehcache/ehcache.xml +++ b/support/ehcache/src/main/resources/org/apache/shiro/cache/ehcache/ehcache.xml @@ -16,7 +16,9 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + - + - + + + 120 + + 10000 + - - - - - + + java.io.Serializable + java.io.Serializable + + + + + 10000 + 50 + + + + java.io.Serializable + java.io.Serializable + + + + + 10000 + 50 + + + diff --git a/support/ehcache/src/test/java/org/apache/shiro/cache/ehcache/EhCacheManagerTest.java b/support/ehcache/src/test/java/org/apache/shiro/cache/ehcache/EhCacheManagerTest.java index 8bbef12727..1efcb201f3 100644 --- a/support/ehcache/src/test/java/org/apache/shiro/cache/ehcache/EhCacheManagerTest.java +++ b/support/ehcache/src/test/java/org/apache/shiro/cache/ehcache/EhCacheManagerTest.java @@ -52,7 +52,7 @@ public void tearDown() { @Test void testCacheManagerCreationDuringInit() { - net.sf.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); + org.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); assertThat(ehCacheManager).isNull(); cacheManager.init(); //now assert that an internal CacheManager has been created: @@ -62,7 +62,7 @@ void testCacheManagerCreationDuringInit() { @Test void testLazyCacheManagerCreationWithoutCallingInit() { - net.sf.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); + org.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); assertThat(ehCacheManager).isNull(); //don't call init here - the ehcache CacheManager should be lazily created @@ -82,7 +82,7 @@ void testLazyCacheManagerCreationWithoutCallingInit() { @Test void testRemove() { - net.sf.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); + org.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); assertThat(ehCacheManager).isNull(); Cache cache = cacheManager.getCache("test"); @@ -109,7 +109,7 @@ void testRemove() { @Test void testClear() { - net.sf.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); + org.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); assertThat(ehCacheManager).isNull(); Cache cache = cacheManager.getCache("test"); @@ -134,7 +134,7 @@ void testClear() { @Test void testKeys() { - net.sf.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); + org.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); assertThat(ehCacheManager).isNull(); Cache cache = cacheManager.getCache("test"); @@ -168,7 +168,7 @@ void testKeys() { @Test void testValues() { - net.sf.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); + org.ehcache.CacheManager ehCacheManager = cacheManager.getCacheManager(); assertThat(ehCacheManager).isNull(); Cache cache = cacheManager.getCache("test"); diff --git a/support/ehcache/src/test/resources/log4j2-test.xml b/support/ehcache/src/test/resources/log4j2-test.xml index f8c691e638..bd8c3cb391 100644 --- a/support/ehcache/src/test/resources/log4j2-test.xml +++ b/support/ehcache/src/test/resources/log4j2-test.xml @@ -46,7 +46,7 @@ - + diff --git a/support/features/pom.xml b/support/features/pom.xml index 0b8b184b90..361cf4cd63 100644 --- a/support/features/pom.xml +++ b/support/features/pom.xml @@ -34,7 +34,7 @@ 1.9.4_1 0.9.5.4_1 - 2.6.11_1 + 3.10.8_1 2.4.13 2.3.2_1 diff --git a/support/features/src/main/resources/features.xml b/support/features/src/main/resources/features.xml index d7fc94c9f9..cf816c962f 100644 --- a/support/features/src/main/resources/features.xml +++ b/support/features/src/main/resources/features.xml @@ -27,7 +27,6 @@ mvn:org.apache.commons/commons-configuration2/${commons.configuration2.version} mvn:commons-collections/commons-collections/${commons.collection.version} mvn:org.apache.commons/commons-text/${commons.text.version} - mvn:org.apache.geronimo.specs/geronimo-annotation_1.3_spec/1.1 mvn:org.apache.shiro/shiro-lang/${project.version} mvn:org.apache.shiro/shiro-cache/${project.version} mvn:org.apache.shiro/shiro-config-ogdl/${project.version} @@ -68,7 +67,6 @@ shiro-core - mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1 mvn:com.hazelcast/hazelcast-all/${hazelcast.version} mvn:org.apache.shiro/shiro-hazelcast/${project.version} @@ -96,7 +94,7 @@ shiro-web - spring + spring mvn:org.apache.shiro/shiro-spring/${project.version} diff --git a/support/guice/pom.xml b/support/guice/pom.xml index 148d04a498..de37cbf03f 100644 --- a/support/guice/pom.xml +++ b/support/guice/pom.xml @@ -48,17 +48,14 @@ true - javax.annotation - javax.annotation-api + jakarta.annotation + jakarta.annotation-api + 2.1.1 com.google.inject guice - - com.google.inject.extensions - guice-multibindings - com.google.inject.extensions guice-servlet @@ -69,8 +66,8 @@ commons-beanutils - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided diff --git a/support/guice/src/main/java/org/apache/shiro/guice/BeanTypeListener.java b/support/guice/src/main/java/org/apache/shiro/guice/BeanTypeListener.java index 29690ca10f..c5e6ed06e2 100644 --- a/support/guice/src/main/java/org/apache/shiro/guice/BeanTypeListener.java +++ b/support/guice/src/main/java/org/apache/shiro/guice/BeanTypeListener.java @@ -147,8 +147,7 @@ private static Key createDependencyKey(PropertyDescriptor propertyDescriptor, } private static boolean requiresName(Type propertyType) { - if (propertyType instanceof Class) { - Class aClass = (Class) propertyType; + if (propertyType instanceof Class aClass) { return aClass.isPrimitive() || aClass.isEnum() || WRAPPER_TYPES.contains(aClass) diff --git a/support/guice/src/main/java/org/apache/shiro/guice/ShiroModule.java b/support/guice/src/main/java/org/apache/shiro/guice/ShiroModule.java index 36627bf38a..cf15836c7f 100644 --- a/support/guice/src/main/java/org/apache/shiro/guice/ShiroModule.java +++ b/support/guice/src/main/java/org/apache/shiro/guice/ShiroModule.java @@ -46,7 +46,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.PreDestroy; +import jakarta.annotation.PreDestroy; import java.lang.reflect.Method; import java.util.Collection; import java.util.Collections; diff --git a/support/guice/src/main/java/org/apache/shiro/guice/web/FilterChainResolverProvider.java b/support/guice/src/main/java/org/apache/shiro/guice/web/FilterChainResolverProvider.java index 0f42b42fae..348375fc3a 100644 --- a/support/guice/src/main/java/org/apache/shiro/guice/web/FilterChainResolverProvider.java +++ b/support/guice/src/main/java/org/apache/shiro/guice/web/FilterChainResolverProvider.java @@ -23,7 +23,7 @@ import java.util.Map; import java.util.Set; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import com.google.inject.Inject; import com.google.inject.Injector; diff --git a/support/guice/src/main/java/org/apache/shiro/guice/web/GuiceShiroFilter.java b/support/guice/src/main/java/org/apache/shiro/guice/web/GuiceShiroFilter.java index 969c627b23..bd27aeb730 100644 --- a/support/guice/src/main/java/org/apache/shiro/guice/web/GuiceShiroFilter.java +++ b/support/guice/src/main/java/org/apache/shiro/guice/web/GuiceShiroFilter.java @@ -23,7 +23,7 @@ import org.apache.shiro.web.mgt.WebSecurityManager; import org.apache.shiro.web.servlet.AbstractShiroFilter; -import javax.inject.Inject; +import jakarta.inject.Inject; /** * Shiro filter that is managed by and receives its filter chain configurations from Guice. The convenience method to diff --git a/support/guice/src/main/java/org/apache/shiro/guice/web/ShiroWebModule.java b/support/guice/src/main/java/org/apache/shiro/guice/web/ShiroWebModule.java index c867f38c8a..e9f58e6200 100644 --- a/support/guice/src/main/java/org/apache/shiro/guice/web/ShiroWebModule.java +++ b/support/guice/src/main/java/org/apache/shiro/guice/web/ShiroWebModule.java @@ -51,8 +51,8 @@ import org.apache.shiro.web.mgt.WebSecurityManager; import org.apache.shiro.web.session.mgt.ServletContainerSessionManager; -import javax.servlet.Filter; -import javax.servlet.ServletContext; +import jakarta.servlet.Filter; +import jakarta.servlet.ServletContext; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -276,8 +276,8 @@ protected void bindWebEnvironment(AnnotatedBindingBuilder key) { // check for legacy API - if (key instanceof FilterConfigKey) { - addLegacyFilterChain(pattern, (FilterConfigKey) key); + if (key instanceof FilterConfigKey configKey) { + addLegacyFilterChain(pattern, configKey); } else { addFilterChain(pattern, new FilterConfig((Key) key, "")); } @@ -412,9 +412,7 @@ protected final void addFilterChain(String pattern, Key... key for (int ii = 0; ii < keys.length; ii++) { Key key = keys[ii]; // If this is a path matching filter, we need to remember the config - if (key instanceof FilterConfigKey) { - // legacy config - FilterConfigKey legacyKey = (FilterConfigKey) key; + if (key instanceof FilterConfigKey legacyKey) { filterConfigs[ii] = new FilterConfig(legacyKey.getKey(), legacyKey.getConfigValue()); } else { // Some other type of Filter key, no config diff --git a/support/guice/src/main/java/org/apache/shiro/guice/web/SimpleFilterChain.java b/support/guice/src/main/java/org/apache/shiro/guice/web/SimpleFilterChain.java index 5074df5b6d..1e4b4bc38d 100644 --- a/support/guice/src/main/java/org/apache/shiro/guice/web/SimpleFilterChain.java +++ b/support/guice/src/main/java/org/apache/shiro/guice/web/SimpleFilterChain.java @@ -18,11 +18,11 @@ */ package org.apache.shiro.guice.web; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; import java.util.Iterator; diff --git a/support/guice/src/main/java/org/apache/shiro/guice/web/SimpleFilterChainResolver.java b/support/guice/src/main/java/org/apache/shiro/guice/web/SimpleFilterChainResolver.java index 0d0a34d91f..bca3a4c790 100644 --- a/support/guice/src/main/java/org/apache/shiro/guice/web/SimpleFilterChainResolver.java +++ b/support/guice/src/main/java/org/apache/shiro/guice/web/SimpleFilterChainResolver.java @@ -22,10 +22,10 @@ import java.util.Iterator; import java.util.Map; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import com.google.inject.Injector; import com.google.inject.Key; diff --git a/support/guice/src/main/java/org/apache/shiro/guice/web/WebGuiceEnvironment.java b/support/guice/src/main/java/org/apache/shiro/guice/web/WebGuiceEnvironment.java index 2a95a59ded..09e758639c 100644 --- a/support/guice/src/main/java/org/apache/shiro/guice/web/WebGuiceEnvironment.java +++ b/support/guice/src/main/java/org/apache/shiro/guice/web/WebGuiceEnvironment.java @@ -27,8 +27,8 @@ import org.apache.shiro.web.filter.mgt.FilterChainResolver; import org.apache.shiro.web.mgt.WebSecurityManager; -import javax.inject.Named; -import javax.servlet.ServletContext; +import jakarta.inject.Named; +import jakarta.servlet.ServletContext; @Singleton class WebGuiceEnvironment implements WebEnvironment { diff --git a/support/guice/src/test/java/org/apache/shiro/guice/aop/ShiroAopModuleTest.java b/support/guice/src/test/java/org/apache/shiro/guice/aop/ShiroAopModuleTest.java index fea7732419..d569eb0a8e 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/aop/ShiroAopModuleTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/aop/ShiroAopModuleTest.java @@ -93,8 +93,8 @@ protected void configureInterceptors(AnnotationResolver resolver) { boolean calledCustom = false; for (Element e : Elements.getElements(underTest)) { - if (e instanceof Binding) { - Key key = ((Binding) e).getKey(); + if (e instanceof Binding binding) { + Key key = binding.getKey(); if (Named.class.isAssignableFrom(key.getAnnotation().annotationType()) && "configureInterceptors".equals(((Named) key.getAnnotation()).value()) && key.getTypeLiteral().getRawType().equals(Object.class)) { @@ -123,8 +123,7 @@ protected void configureInterceptors(AnnotationResolver resolver) { List elements = Elements.getElements(underTest); for (Element element : elements) { - if (element instanceof InterceptorBinding) { - InterceptorBinding binding = (InterceptorBinding) element; + if (element instanceof InterceptorBinding binding) { assertThat(binding.getClassMatcher().matches(getClass())).isTrue(); Method method = null; Class theAnnotation = null; diff --git a/support/guice/src/test/java/org/apache/shiro/guice/web/DefaultFiltersTest.java b/support/guice/src/test/java/org/apache/shiro/guice/web/DefaultFiltersTest.java index dfc126ae01..34228ead74 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/web/DefaultFiltersTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/web/DefaultFiltersTest.java @@ -22,7 +22,7 @@ import org.apache.shiro.web.filter.mgt.DefaultFilter; import org.junit.jupiter.api.Test; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.EnumSet; diff --git a/support/guice/src/test/java/org/apache/shiro/guice/web/FilterChainResolverProviderTest.java b/support/guice/src/test/java/org/apache/shiro/guice/web/FilterChainResolverProviderTest.java index e634db15a6..1b69adec39 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/web/FilterChainResolverProviderTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/web/FilterChainResolverProviderTest.java @@ -27,7 +27,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import java.lang.reflect.Field; import java.util.LinkedHashMap; import java.util.Map; diff --git a/support/guice/src/test/java/org/apache/shiro/guice/web/FilterConfigTest.java b/support/guice/src/test/java/org/apache/shiro/guice/web/FilterConfigTest.java index 255844c5d2..1cbd42ee23 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/web/FilterConfigTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/web/FilterConfigTest.java @@ -25,10 +25,10 @@ import org.apache.shiro.web.filter.mgt.FilterChainResolver; import org.junit.jupiter.api.Test; -import javax.servlet.FilterChain; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import static org.assertj.core.api.Assertions.assertThat; import static org.easymock.EasyMock.createMock; diff --git a/support/guice/src/test/java/org/apache/shiro/guice/web/ShiroWebModuleTest.java b/support/guice/src/test/java/org/apache/shiro/guice/web/ShiroWebModuleTest.java index c5b87c37fa..e0d16a1312 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/web/ShiroWebModuleTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/web/ShiroWebModuleTest.java @@ -48,15 +48,16 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import javax.inject.Named; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.inject.Named; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Collection; import java.util.Collections; @@ -186,15 +187,15 @@ void testAddFilterChainGuice3and4() { HttpServletRequest request = createMock(HttpServletRequest.class); servletContext.setAttribute(eq(EnvironmentLoader.ENVIRONMENT_ATTRIBUTE_KEY), EasyMock.anyObject()); - expect(request.getAttribute("javax.servlet.include.context_path")).andReturn("").anyTimes(); + expect(request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH)).andReturn("").anyTimes(); expect(request.getCharacterEncoding()).andReturn("UTF-8").anyTimes(); - expect(request.getAttribute("javax.servlet.include.path_info")).andReturn(null).anyTimes(); + expect(request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO)).andReturn(null).anyTimes(); expect(request.getPathInfo()).andReturn(null).anyTimes(); - expect(request.getAttribute("javax.servlet.include.servlet_path")).andReturn("/test_authc"); - expect(request.getAttribute("javax.servlet.include.servlet_path")).andReturn("/test_custom_filter"); - expect(request.getAttribute("javax.servlet.include.servlet_path")).andReturn("/test_authc_basic"); - expect(request.getAttribute("javax.servlet.include.servlet_path")).andReturn("/test_perms"); - expect(request.getAttribute("javax.servlet.include.servlet_path")).andReturn("/multiple_configs"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)).andReturn("/test_authc"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)).andReturn("/test_custom_filter"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)).andReturn("/test_authc_basic"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)).andReturn("/test_perms"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)).andReturn("/multiple_configs"); replay(servletContext, request); Injector injector = Guice.createInjector(new ShiroWebModule(servletContext) { @@ -277,12 +278,12 @@ void testAddFilterChainGuice3Only() { HttpServletRequest request = createMock(HttpServletRequest.class); servletContext.setAttribute(eq(EnvironmentLoader.ENVIRONMENT_ATTRIBUTE_KEY), EasyMock.anyObject()); - expect(request.getAttribute("javax.servlet.include.context_path")).andReturn("").anyTimes(); + expect(request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH)).andReturn("").anyTimes(); expect(request.getCharacterEncoding()).andReturn("UTF-8").anyTimes(); - expect(request.getAttribute("javax.servlet.include.request_uri")).andReturn("/test_authc"); - expect(request.getAttribute("javax.servlet.include.request_uri")).andReturn("/test_custom_filter"); - expect(request.getAttribute("javax.servlet.include.request_uri")).andReturn("/test_perms"); - expect(request.getAttribute("javax.servlet.include.request_uri")).andReturn("/multiple_configs"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH)).andReturn("/test_authc"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH)).andReturn("/test_custom_filter"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH)).andReturn("/test_perms"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH)).andReturn("/multiple_configs"); replay(servletContext, request); Injector injector = Guice.createInjector(new ShiroWebModule(servletContext) { @@ -348,11 +349,11 @@ void testDefaultPath() { HttpServletRequest request = createMock(HttpServletRequest.class); servletContext.setAttribute(eq(EnvironmentLoader.ENVIRONMENT_ATTRIBUTE_KEY), EasyMock.anyObject()); - expect(request.getAttribute("javax.servlet.include.context_path")).andReturn("").anyTimes(); + expect(request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH)).andReturn("").anyTimes(); expect(request.getCharacterEncoding()).andReturn("UTF-8").anyTimes(); - expect(request.getAttribute("javax.servlet.include.path_info")).andReturn(null).anyTimes(); + expect(request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO)).andReturn(null).anyTimes(); expect(request.getPathInfo()).andReturn(null).anyTimes(); - expect(request.getAttribute("javax.servlet.include.servlet_path")).andReturn("/test/foobar"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)).andReturn("/test/foobar"); replay(servletContext, request); Injector injector = Guice.createInjector(new ShiroWebModule(servletContext) { @@ -391,11 +392,11 @@ void testDisableGlobalFilters() { HttpServletRequest request = createMock(HttpServletRequest.class); servletContext.setAttribute(eq(EnvironmentLoader.ENVIRONMENT_ATTRIBUTE_KEY), EasyMock.anyObject()); - expect(request.getAttribute("javax.servlet.include.context_path")).andReturn("").anyTimes(); + expect(request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH)).andReturn("").anyTimes(); expect(request.getCharacterEncoding()).andReturn("UTF-8").anyTimes(); - expect(request.getAttribute("javax.servlet.include.path_info")).andReturn(null).anyTimes(); + expect(request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO)).andReturn(null).anyTimes(); expect(request.getPathInfo()).andReturn(null).anyTimes(); - expect(request.getAttribute("javax.servlet.include.servlet_path")).andReturn("/test/foobar"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)).andReturn("/test/foobar"); replay(servletContext, request); Injector injector = Guice.createInjector(new ShiroWebModule(servletContext) { @@ -439,11 +440,11 @@ void testChangeInvalidFilterConfig() { HttpServletRequest request = createMock(HttpServletRequest.class); servletContext.setAttribute(eq(EnvironmentLoader.ENVIRONMENT_ATTRIBUTE_KEY), EasyMock.anyObject()); - expect(request.getAttribute("javax.servlet.include.context_path")).andReturn("").anyTimes(); + expect(request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH)).andReturn("").anyTimes(); expect(request.getCharacterEncoding()).andReturn("UTF-8").anyTimes(); - expect(request.getAttribute("javax.servlet.include.path_info")).andReturn(null).anyTimes(); + expect(request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO)).andReturn(null).anyTimes(); expect(request.getPathInfo()).andReturn(null).anyTimes(); - expect(request.getAttribute("javax.servlet.include.servlet_path")).andReturn("/test/foobar"); + expect(request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)).andReturn("/test/foobar"); replay(servletContext, request); Injector injector = Guice.createInjector(new ShiroWebModule(servletContext) { diff --git a/support/guice/src/test/java/org/apache/shiro/guice/web/SimpleFilterChainResolverTest.java b/support/guice/src/test/java/org/apache/shiro/guice/web/SimpleFilterChainResolverTest.java index 35903bb896..be9c9bd398 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/web/SimpleFilterChainResolverTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/web/SimpleFilterChainResolverTest.java @@ -26,12 +26,12 @@ import org.easymock.IMocksControl; import org.junit.jupiter.api.Test; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.LinkedHashMap; import java.util.Map; diff --git a/support/guice/src/test/java/org/apache/shiro/guice/web/SimpleFilterChainTest.java b/support/guice/src/test/java/org/apache/shiro/guice/web/SimpleFilterChainTest.java index a0593397f7..56e40fb1ea 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/web/SimpleFilterChainTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/web/SimpleFilterChainTest.java @@ -20,10 +20,10 @@ import java.util.Arrays; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.easymock.Capture; import org.easymock.IMocksControl; diff --git a/support/guice/src/test/java/org/apache/shiro/guice/web/WebGuiceEnvironmentTest.java b/support/guice/src/test/java/org/apache/shiro/guice/web/WebGuiceEnvironmentTest.java index b08c74a181..b2a9587aff 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/web/WebGuiceEnvironmentTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/web/WebGuiceEnvironmentTest.java @@ -26,7 +26,7 @@ import org.easymock.Capture; import org.junit.jupiter.api.Test; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; diff --git a/support/jakarta-ee/pom.xml b/support/jakarta-ee/pom.xml index 46a1ce8df6..c71e36a38f 100644 --- a/support/jakarta-ee/pom.xml +++ b/support/jakarta-ee/pom.xml @@ -40,7 +40,7 @@ jakarta.platform jakarta.jakartaee-api - 8.0.0 + 10.0.0 provided true @@ -72,7 +72,7 @@ org.omnifaces omnifaces - 3.14.6 + 4.6.1 org.jsoup @@ -128,38 +128,6 @@ - - org.apache.maven.plugins - maven-shade-plugin - - - - javax.faces - jakarta.faces - - - javax.el - jakarta.el - - - javax.interceptor - jakarta.interceptor - - - javax.activation - jakarta.activation - - - window.jsf - window.faces - - - jsf.ajax - faces.ajax - - - - org.apache.maven.plugins maven-checkstyle-plugin diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroFacesViewScoped.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroFacesViewScoped.java index 44e26b4b1e..6cfb4fee97 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroFacesViewScoped.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroFacesViewScoped.java @@ -17,10 +17,10 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import javax.inject.Scope; +import jakarta.inject.Scope; /** - * {@code @javax.faces.view.ViewScoped} interface that works with Shiro sessions + * {@code @jakarta.faces.view.ViewScoped} interface that works with Shiro sessions * Primarily for plugging into Shiro destruction pipeline *

    * This is an internal class and should not be used by applications diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroOmniViewScoped.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroOmniViewScoped.java index 5be6b1149f..9a3b9119ab 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroOmniViewScoped.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroOmniViewScoped.java @@ -17,7 +17,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import javax.inject.Scope; +import jakarta.inject.Scope; /** * {@code @org.omnifaces.cdi.ViewScoped} interface that works with Shiro sessions diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroScopeContext.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroScopeContext.java index c366896c5e..cad0ba8942 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroScopeContext.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroScopeContext.java @@ -15,12 +15,13 @@ import static org.apache.shiro.ee.filters.FormResubmitSupport.getNativeSessionManager; +import java.io.Serial; import java.io.Serializable; import java.lang.annotation.Annotation; -import javax.enterprise.context.spi.Context; -import javax.enterprise.context.spi.Contextual; -import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.spi.CDI; +import jakarta.enterprise.context.spi.Context; +import jakarta.enterprise.context.spi.Contextual; +import jakarta.enterprise.context.spi.CreationalContext; +import jakarta.enterprise.inject.spi.CDI; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.SecurityUtils; @@ -37,6 +38,7 @@ */ public class ShiroScopeContext implements Context, Serializable { private static final String BEAN_STORAGE_KEY = "org.apache.shiro.ee.bean-storage"; + @Serial private static final long serialVersionUID = 1L; private final Class scopeType; private final Class webScopeType; @@ -45,7 +47,7 @@ public class ShiroScopeContext implements Context, Serializable { public ShiroScopeContext(Class scopeType, Class webScopeType) { this.scopeType = scopeType; this.webScopeType = webScopeType; - isViewScoped = webScopeType == javax.faces.view.ViewScoped.class + isViewScoped = webScopeType == jakarta.faces.view.ViewScoped.class || webScopeType == org.omnifaces.cdi.ViewScoped.class; } @@ -62,10 +64,10 @@ public T get(Contextual contextual, CreationalContext creationalContex } else { synchronized (contextual) { if (isViewScoped) { - return Beans.getReference(ViewScopeManager.class).createBean(contextual, creationalContext); + return Beans.getReference(ViewScopeManager.class).getBean(contextual, creationalContext); } else { return getBeanStorage(SecurityUtils.getSubject().getSession()) - .createBean(contextual, creationalContext); + .getBean(contextual, creationalContext); } } } @@ -100,8 +102,7 @@ void onDestroy(Session session) { } public static boolean isWebContainerSessions(SecurityManager sm) { - if (sm instanceof WebSecurityManager) { - WebSecurityManager wsm = (WebSecurityManager) sm; + if (sm instanceof WebSecurityManager wsm) { return wsm.isHttpSessionMode(); } return false; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroSessionScopeExtension.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroSessionScopeExtension.java index cc54b628c3..6b522a1ddd 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroSessionScopeExtension.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroSessionScopeExtension.java @@ -13,19 +13,20 @@ */ package org.apache.shiro.ee.cdi; +import java.io.Serial; import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.enterprise.context.SessionScoped; -import javax.enterprise.event.Observes; -import javax.enterprise.inject.spi.AfterBeanDiscovery; -import javax.enterprise.inject.spi.BeforeBeanDiscovery; -import javax.enterprise.inject.spi.Extension; -import javax.enterprise.inject.spi.ProcessAnnotatedType; -import javax.enterprise.inject.spi.WithAnnotations; +import jakarta.enterprise.context.SessionScoped; +import jakarta.enterprise.event.Observes; +import jakarta.enterprise.inject.spi.AfterBeanDiscovery; +import jakarta.enterprise.inject.spi.BeforeBeanDiscovery; +import jakarta.enterprise.inject.spi.Extension; +import jakarta.enterprise.inject.spi.ProcessAnnotatedType; +import jakarta.enterprise.inject.spi.WithAnnotations; import org.apache.shiro.cdi.AnnotatedTypeWrapper; import org.apache.shiro.cdi.ShiroSecurityExtension.ShiroSecureAnnotated; @@ -37,11 +38,12 @@ * Entry point for Shiro Session scope CDI extension */ public class ShiroSessionScopeExtension implements Extension, Serializable { + @Serial private static final long serialVersionUID = 1L; @SuppressWarnings("ConstantName") private static final List contexts = Stream.of( new ShiroScopeContext(ShiroSessionScoped.class, SessionScoped.class), - new ShiroScopeContext(ShiroFacesViewScoped.class, javax.faces.view.ViewScoped.class), + new ShiroScopeContext(ShiroFacesViewScoped.class, jakarta.faces.view.ViewScoped.class), new ShiroScopeContext(ShiroOmniViewScoped.class, org.omnifaces.cdi.ViewScoped.class)) .collect(Collectors.toList()); @@ -50,7 +52,7 @@ public class ShiroSessionScopeExtension implements Extension, Serializable { private static final class SessionScopedAnnotated implements Serializable { } - @javax.faces.view.ViewScoped + @jakarta.faces.view.ViewScoped @SuppressWarnings("serial") private static final class FacesViewScopedAnnotated implements Serializable { } @@ -108,7 +110,7 @@ void addSessionScoped(@Observes @WithAnnotations(SessionScoped.class) Proces Set.of(SessionScopedAnnotated.class.getDeclaredAnnotations()[0]))); } - void addFacesViewScoped(@Observes @WithAnnotations(javax.faces.view.ViewScoped.class) ProcessAnnotatedType pat) { + void addFacesViewScoped(@Observes @WithAnnotations(jakarta.faces.view.ViewScoped.class) ProcessAnnotatedType pat) { pat.setAnnotatedType(new AnnotatedTypeWrapper<>(pat.getAnnotatedType(), true, Set.of(ShiroFacesViewScopedAnnotated.class.getDeclaredAnnotations()[0], ShiroSecureAnnotated.class.getDeclaredAnnotations()[0]), diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroSessionScoped.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroSessionScoped.java index 41e68ee8d7..55dcc513a9 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroSessionScoped.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/cdi/ShiroSessionScoped.java @@ -17,7 +17,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import javax.inject.Scope; +import jakarta.inject.Scope; /** * {@code @SessionScoped} interface that works with Shiro sessions diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/AuthenticatedTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/AuthenticatedTag.java index 5fdbdffa49..46f864df64 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/AuthenticatedTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/AuthenticatedTag.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * Tag that renders the tag body only if the current user has executed a successful authentication attempt diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/AuthenticationTagHandler.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/AuthenticationTagHandler.java index c20974727c..147aedba07 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/AuthenticationTagHandler.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/AuthenticationTagHandler.java @@ -13,11 +13,11 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.el.ELException; -import javax.faces.FacesException; -import javax.faces.component.UIComponent; -import javax.faces.view.facelets.FaceletContext; -import javax.faces.view.facelets.TagConfig; +import jakarta.el.ELException; +import jakarta.faces.FacesException; +import jakarta.faces.component.UIComponent; +import jakarta.faces.view.facelets.FaceletContext; +import jakarta.faces.view.facelets.TagConfig; import java.io.IOException; import lombok.extern.slf4j.Slf4j; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/GuestTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/GuestTag.java index cbcb07d509..a19a843cad 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/GuestTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/GuestTag.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * Tag that renders the tag body if the current user is not known to the system, either because they diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasAnyPermissionTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasAnyPermissionTag.java index 3c17bee987..2909be2c15 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasAnyPermissionTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasAnyPermissionTag.java @@ -15,7 +15,7 @@ import org.apache.shiro.subject.Subject; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * Tag that renders the tag body only if the current user has at least one of the comma-delimited diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasAnyRolesTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasAnyRolesTag.java index 6caa684a77..394cac772a 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasAnyRolesTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasAnyRolesTag.java @@ -15,7 +15,7 @@ import org.apache.shiro.subject.Subject; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasPermissionTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasPermissionTag.java index 1d4aec0920..61fadba0c0 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasPermissionTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasPermissionTag.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * Tag that renders the tag body only if the current user has the string permissions diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasRoleTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasRoleTag.java index a2e663f1b5..e64c2240d7 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasRoleTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/HasRoleTag.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/LacksPermissionTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/LacksPermissionTag.java index 1e83b213f0..b049bb4c7f 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/LacksPermissionTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/LacksPermissionTag.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/LacksRoleTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/LacksRoleTag.java index 10abc72c59..7ccd75fef8 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/LacksRoleTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/LacksRoleTag.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/NotAuthenticatedTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/NotAuthenticatedTag.java index 55bd2feed8..656320a9fc 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/NotAuthenticatedTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/NotAuthenticatedTag.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * Tag that renders the tag body only if the current user has not executed a successful authentication diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/PermissionTagHandler.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/PermissionTagHandler.java index 83a846eeaa..941ef1d06e 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/PermissionTagHandler.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/PermissionTagHandler.java @@ -13,13 +13,13 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.el.ELException; -import javax.el.ValueExpression; -import javax.faces.FacesException; -import javax.faces.component.UIComponent; -import javax.faces.view.facelets.FaceletContext; -import javax.faces.view.facelets.TagAttribute; -import javax.faces.view.facelets.TagConfig; +import jakarta.el.ELException; +import jakarta.el.ValueExpression; +import jakarta.faces.FacesException; +import jakarta.faces.component.UIComponent; +import jakarta.faces.view.facelets.FaceletContext; +import jakarta.faces.view.facelets.TagAttribute; +import jakarta.faces.view.facelets.TagConfig; import java.io.IOException; /** diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/PrincipalTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/PrincipalTag.java index c9b27a789b..560c10e6c4 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/PrincipalTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/PrincipalTag.java @@ -15,7 +15,7 @@ import org.apache.shiro.subject.PrincipalCollection; -import javax.faces.context.FacesContext; +import jakarta.faces.context.FacesContext; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/RememberedTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/RememberedTag.java index 061345f236..3cabfb5543 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/RememberedTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/RememberedTag.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * Tag that renders the tag body only if the current user's identity (aka principals) is remembered from a diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/SecureComponent.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/SecureComponent.java index ce98900c70..d40c803a78 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/SecureComponent.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/SecureComponent.java @@ -16,8 +16,8 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; -import javax.faces.component.UIOutput; -import javax.faces.context.FacesContext; +import jakarta.faces.component.UIOutput; +import jakarta.faces.context.FacesContext; import java.io.IOException; /** diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/SecureTagHandler.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/SecureTagHandler.java index 6c1ccc2588..914a784ee3 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/SecureTagHandler.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/SecureTagHandler.java @@ -16,8 +16,8 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; -import javax.faces.view.facelets.TagConfig; -import javax.faces.view.facelets.TagHandler; +import jakarta.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagHandler; /** * Base class for all TagHandlers diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/UserTag.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/UserTag.java index a8dc641378..d1979d18bd 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/UserTag.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/faces/tags/UserTag.java @@ -13,7 +13,7 @@ */ package org.apache.shiro.ee.faces.tags; -import javax.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagConfig; /** * Tag that renders the tag body if the current user known to the system, either from a successful login attempt diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/AuthenticationFilterDelegate.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/AuthenticationFilterDelegate.java index 509da6079c..7cb31df49f 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/AuthenticationFilterDelegate.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/AuthenticationFilterDelegate.java @@ -23,9 +23,9 @@ import org.apache.shiro.subject.Subject; import org.apache.shiro.web.util.WebUtils; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.concurrent.TimeUnit; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormAuthenticationFilter.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormAuthenticationFilter.java index 1c2b6b7b44..0e1fbb57f8 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormAuthenticationFilter.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormAuthenticationFilter.java @@ -21,9 +21,9 @@ import org.apache.shiro.ee.filters.Forms.FallbackPredicate; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import lombok.experimental.Delegate; import org.apache.shiro.authc.AuthenticationException; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupport.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupport.java index ccec18af1e..a86d1028a6 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupport.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupport.java @@ -52,13 +52,13 @@ import static java.util.function.Predicate.not; import java.util.regex.Pattern; import java.util.stream.Collectors; -import static javax.faces.application.StateManager.STATE_SAVING_METHOD_CLIENT; -import static javax.faces.application.StateManager.STATE_SAVING_METHOD_PARAM_NAME; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import static jakarta.faces.application.StateManager.STATE_SAVING_METHOD_CLIENT; +import static jakarta.faces.application.StateManager.STATE_SAVING_METHOD_PARAM_NAME; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -68,7 +68,6 @@ import lombok.ToString; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; -import static org.apache.shiro.ee.util.JakartaTransformer.jakartify; import org.apache.shiro.mgt.AbstractRememberMeManager; import org.apache.shiro.mgt.DefaultSecurityManager; import org.apache.shiro.mgt.SecurityManager; @@ -91,13 +90,13 @@ public class FormResubmitSupport { static final String SESSION_EXPIRED_PARAMETER = "org.apache.shiro.sessionExpired"; static final String FORM_IS_RESUBMITTED = "org.apache.shiro.form-is-resubmitted"; // encoded view state - private static final String FACES_VIEW_STATE = jakartify("javax.faces.ViewState"); + private static final String FACES_VIEW_STATE = "jakarta.faces.ViewState"; private static final String FACES_VIEW_STATE_EQUALS = FACES_VIEW_STATE + "="; private static final Pattern VIEW_STATE_PATTERN - = Pattern.compile(String.format("(.*)(%s[-]?[\\d]+:[-]?[\\d]+)(.*)", FACES_VIEW_STATE_EQUALS)); - private static final String PARTIAL_VIEW = jakartify("javax.faces.partial"); + = Pattern.compile("(.*)(%s[-]?[\\d]+:[-]?[\\d]+)(.*)".formatted(FACES_VIEW_STATE_EQUALS)); + private static final String PARTIAL_VIEW = "jakarta.faces.partial"; private static final Pattern PARTIAL_REQUEST_PATTERN - = Pattern.compile(String.format("[\\&]?%s.\\w+=[\\w\\s:%%\\d]*", PARTIAL_VIEW)); + = Pattern.compile("[\\&]?%s.\\w+=[\\w\\s:%%\\d]*".formatted(PARTIAL_VIEW)); private static final Pattern INITIAL_AMPERSAND = Pattern.compile("^\\&"); private static final String FORM_DATA_CACHE = "org.apache.shiro.form-data-cache"; private static final String FORM_RESUBMIT_HOST = "org.apache.shiro.form-resubmit-host"; @@ -535,11 +534,10 @@ private static HttpClient buildHttpClient(URI savedRequest, ServletContext servl public static DefaultWebSessionManager getNativeSessionManager(SecurityManager securityManager) { DefaultWebSessionManager rv = null; SecurityManager unwrapped = unwrapSecurityManager(securityManager, SecurityManager.class, type -> false); - if (unwrapped instanceof SessionsSecurityManager) { - var ssm = (SessionsSecurityManager) unwrapped; + if (unwrapped instanceof SessionsSecurityManager ssm) { var sm = ssm.getSessionManager(); - if (sm instanceof DefaultWebSessionManager) { - rv = (DefaultWebSessionManager) sm; + if (sm instanceof DefaultWebSessionManager manager) { + rv = manager; } } return rv; @@ -556,13 +554,13 @@ private static String getJSFNewViewState(URI savedRequest, HttpClient client, St } static String extractJSFNewViewState(@NonNull String responseBody, @NonNull String savedFormData) { - Elements elts = Jsoup.parse(responseBody).select(String.format("input[name=%s]", FACES_VIEW_STATE)); + Elements elts = Jsoup.parse(responseBody).select("input[name=%s]".formatted(FACES_VIEW_STATE)); if (!elts.isEmpty()) { String viewState = elts.first().attr("value"); var matcher = VIEW_STATE_PATTERN.matcher(savedFormData); if (matcher.matches()) { - savedFormData = matcher.replaceFirst(String.format("$1%s%s$3", + savedFormData = matcher.replaceFirst("$1%s%s$3".formatted( FACES_VIEW_STATE_EQUALS, viewState)); log.debug("Encoded w/Replaced ViewState: {}", savedFormData); } diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupportCookies.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupportCookies.java index 465ddde945..06b17979a8 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupportCookies.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupportCookies.java @@ -21,10 +21,10 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.NonNull; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/Forms.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/Forms.java index 42ba0a85a5..574ecb2581 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/Forms.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/Forms.java @@ -20,10 +20,10 @@ import static org.apache.shiro.ee.filters.LogoutFilter.LOGOUT_PREDICATE_ATTR_NAME; import static org.apache.shiro.ee.listeners.EnvironmentLoaderListener.isFormResubmitDisabled; import java.util.concurrent.TimeUnit; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Named; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Named; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.SneakyThrows; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/LogoutFilter.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/LogoutFilter.java index 5ac7e7fdaf..53c998f2a2 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/LogoutFilter.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/LogoutFilter.java @@ -19,9 +19,9 @@ import org.apache.shiro.ee.filters.Forms.FallbackPredicate; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import lombok.experimental.Delegate; import org.apache.shiro.authc.AuthenticationException; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/PassThruAuthenticationFilter.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/PassThruAuthenticationFilter.java index 00318874ca..0ed29a1b0d 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/PassThruAuthenticationFilter.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/PassThruAuthenticationFilter.java @@ -14,8 +14,8 @@ package org.apache.shiro.ee.filters; import org.apache.shiro.ee.filters.AuthenticationFilterDelegate.MethodsFromFilter; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import lombok.experimental.Delegate; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authc.AuthenticationException; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/ShiroFilter.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/ShiroFilter.java index d3fda76134..0058d8cc7b 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/ShiroFilter.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/ShiroFilter.java @@ -26,17 +26,17 @@ import java.security.Principal; import java.util.Optional; import java.util.regex.Pattern; -import javax.servlet.DispatcherType; -import javax.servlet.FilterChain; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.annotation.WebFilter; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -166,8 +166,7 @@ static class WrappedSecurityManager implements WebSecurityManager, org.apache.sh @Override public Subject createSubject(SubjectContext context) { - if (context instanceof WebSubjectContext && wrapped instanceof DefaultSecurityManager) { - WebSubjectContext webContext = (WebSubjectContext) context; + if (context instanceof WebSubjectContext webContext && wrapped instanceof DefaultSecurityManager) { DefaultWebSecurityManager wsm = (DefaultWebSecurityManager) wrapped; Session session = null; try { diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/SslFilter.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/SslFilter.java index 9a9a4dcbb2..ac8abe002e 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/SslFilter.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/SslFilter.java @@ -15,9 +15,9 @@ import static org.apache.shiro.ee.filters.FormResubmitSupport.hasFacesContext; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import lombok.Getter; import lombok.Setter; import org.omnifaces.util.Faces; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/listeners/EnvironmentLoaderListener.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/listeners/EnvironmentLoaderListener.java index 0989ae11fd..0d77f49ded 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/listeners/EnvironmentLoaderListener.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/listeners/EnvironmentLoaderListener.java @@ -15,13 +15,13 @@ import java.util.Optional; import java.util.Set; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; -import static javax.servlet.SessionTrackingMode.COOKIE; +import static jakarta.servlet.SessionTrackingMode.COOKIE; -import javax.servlet.annotation.WebListener; +import jakarta.servlet.annotation.WebListener; import org.apache.shiro.web.env.EnvironmentLoader; import org.apache.shiro.web.env.WebEnvironment; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/listeners/IniEnvironment.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/listeners/IniEnvironment.java index 46c0d9ff30..04461e9c88 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/listeners/IniEnvironment.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/listeners/IniEnvironment.java @@ -23,7 +23,7 @@ import java.util.Map; import java.util.function.Function; import java.util.function.Supplier; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.cdi.annotations.CipherKeySupplier; diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/util/JakartaTransformer.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/util/JakartaTransformer.java deleted file mode 100644 index a89259bd6f..0000000000 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/util/JakartaTransformer.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.apache.shiro.ee.util; - -import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; - -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; - -/** - * transforms Java to Jakarta namespace - */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@SuppressWarnings("HideUtilityClassConstructor") -public class JakartaTransformer { - @Getter - @SuppressWarnings("ConstantName") - private static final boolean jakarta = HttpServletRequest.class.getPackageName().startsWith("jakarta"); - private static final Pattern REPLACE_JAVA_WITH_JAKARTA_PATTERN = Pattern.compile("javax\\.(\\w+)\\."); - - public static String jakartify(String className) { - return REPLACE_JAVA_WITH_JAKARTA_PATTERN.matcher(className).replaceAll( - isJakarta() ? "jakarta.$1." : "javax.$1."); - } -} diff --git a/support/jakarta-ee/src/main/resources/META-INF/beans.xml b/support/jakarta-ee/src/main/resources/META-INF/beans.xml index 3227a065c4..c54d976859 100644 --- a/support/jakarta-ee/src/main/resources/META-INF/beans.xml +++ b/support/jakarta-ee/src/main/resources/META-INF/beans.xml @@ -17,8 +17,7 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartae/beans_4_0.xsd"> diff --git a/support/jakarta-ee/src/main/resources/META-INF/faces-config.xml b/support/jakarta-ee/src/main/resources/META-INF/faces-config.xml index f9a7224a2c..bc329d9a5c 100644 --- a/support/jakarta-ee/src/main/resources/META-INF/faces-config.xml +++ b/support/jakarta-ee/src/main/resources/META-INF/faces-config.xml @@ -19,10 +19,10 @@ under the License. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_4_0.xsd"> org.apache.shiro.ee.faces.tags.PrincipalTag org.apache.shiro.ee.faces.tags.PrincipalTag diff --git a/support/jakarta-ee/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/support/jakarta-ee/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension similarity index 100% rename from support/jakarta-ee/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension rename to support/jakarta-ee/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension diff --git a/support/jakarta-ee/src/main/resources/META-INF/shiro-faces.taglib.xml b/support/jakarta-ee/src/main/resources/META-INF/shiro-faces.taglib.xml index 904aa27e23..8e1e138324 100644 --- a/support/jakarta-ee/src/main/resources/META-INF/shiro-faces.taglib.xml +++ b/support/jakarta-ee/src/main/resources/META-INF/shiro-faces.taglib.xml @@ -20,10 +20,10 @@ --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facelettaglibrary_4_0.xsd"> http://shiro.apache.org/tags diff --git a/support/jakarta-ee/src/test/java/org/apache/shiro/ee/cdi/ShiroScopeContextTest.java b/support/jakarta-ee/src/test/java/org/apache/shiro/ee/cdi/ShiroScopeContextTest.java index 1d47a183a4..3d564fa1dc 100644 --- a/support/jakarta-ee/src/test/java/org/apache/shiro/ee/cdi/ShiroScopeContextTest.java +++ b/support/jakarta-ee/src/test/java/org/apache/shiro/ee/cdi/ShiroScopeContextTest.java @@ -24,11 +24,11 @@ import org.mockito.MockedStatic; import org.mockito.junit.jupiter.MockitoExtension; -import javax.enterprise.context.SessionScoped; -import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.CDI; -import javax.faces.view.ViewScoped; +import jakarta.enterprise.context.SessionScoped; +import jakarta.enterprise.context.spi.CreationalContext; +import jakarta.enterprise.inject.spi.Bean; +import jakarta.enterprise.inject.spi.CDI; +import jakarta.faces.view.ViewScoped; import java.io.Serializable; import java.lang.annotation.Annotation; @@ -116,7 +116,7 @@ void webSessionsCreate() { private void setupWebSessions() { - when(SecurityUtils.getSecurityManager()).thenReturn(mock(WebSecurityManager.class)); + secMock.when(SecurityUtils::getSecurityManager).thenReturn(mock(WebSecurityManager.class)); WebSecurityManager wsm = (WebSecurityManager) SecurityUtils.getSecurityManager(); when(wsm.isHttpSessionMode()).thenReturn(true); } diff --git a/support/jakarta-ee/src/test/java/org/apache/shiro/ee/filters/FormSupportTest.java b/support/jakarta-ee/src/test/java/org/apache/shiro/ee/filters/FormSupportTest.java index ce8f47720e..0ed7eb68e1 100644 --- a/support/jakarta-ee/src/test/java/org/apache/shiro/ee/filters/FormSupportTest.java +++ b/support/jakarta-ee/src/test/java/org/apache/shiro/ee/filters/FormSupportTest.java @@ -25,9 +25,8 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; -import static org.apache.shiro.ee.util.JakartaTransformer.jakartify; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; @@ -81,12 +80,12 @@ void dontSwitchToHttpsWhenCustomPortNoTrailingSlash() { void viewStatePattern() { String statefulFormData = "j_idt5%3Dj_idt5%26j_idt5%3Aj_idt7%3Daaa%26j_idt5%3Aj_idt9%3Dbbb%26j_idt5%3A" - + "j_idt11%3DSubmit+...%26" + jakartify("javax.faces.ViewState") + + "j_idt11%3DSubmit+...%26jakarta.faces.ViewState" + "%3D-8335355445345003673%3A-6008443334776649058"; assertThat(isJSFStatefulForm(decode(statefulFormData))).isTrue(); String statelessFormData = "j_idt5%3Dj_idt5%26j_idt5%3Aj_idt7%3Daaa%26j_idt5%3Aj_idt9%3Dbbb%26j_idt5%3A" - + "j_idt11%3DSubmit+...%26" + jakartify("javax.faces.ViewState") + "%3Dstateless"; + + "j_idt11%3DSubmit+...%26jakarta.faces.ViewState%3Dstateless"; assertThat(isJSFStatefulForm(statelessFormData)).isFalse(); assertThatExceptionOfType(NullPointerException.class).isThrownBy(() -> isJSFStatefulForm(null)); String nonJSFFormData @@ -100,49 +99,49 @@ void viewStatePattern() { void extractViewState() { assertThatExceptionOfType(NullPointerException.class).isThrownBy(() -> extractJSFNewViewState(null, null)); assertThat(extractJSFNewViewState("", "hello")).isEqualTo("hello"); - assertThat(extractJSFNewViewState("xxx", jakartify("javax.faces.ViewState=stateless&hello=bye"))) - .isEqualTo(jakartify("javax.faces.ViewState=stateless&hello=bye")); - assertThat(extractJSFNewViewState(jakartify(""), - jakartify("javax.faces.ViewState=stateless&hello=bye"))) - .isEqualTo(jakartify("javax.faces.ViewState=stateless&hello=bye")); - assertThat(extractJSFNewViewState(jakartify(""), - jakartify("aaa=bbb&javax.faces.ViewState=xxx:yyy&hello=bye"))) - .isEqualTo(jakartify("aaa=bbb&javax.faces.ViewState=xxx:yyy&hello=bye")); - assertThat(extractJSFNewViewState(jakartify(""), - jakartify("javax.faces.ViewState=987:654&hello=bye"))) - .isEqualTo(jakartify("javax.faces.ViewState=123:456&hello=bye")); - assertThat(extractJSFNewViewState(jakartify(""), - jakartify("javax.faces.ViewState=987:654&hello=bye"))) - .isEqualTo(jakartify("javax.faces.ViewState=-123:-456&hello=bye")); - assertThat(extractJSFNewViewState(jakartify(""), - jakartify("javax.faces.ViewState=-987:-654&hello=bye"))) - .isEqualTo(jakartify("javax.faces.ViewState=-123:-456&hello=bye")); - assertThat(extractJSFNewViewState(jakartify(""), - jakartify("aaa=bbb&javax.faces.ViewState=-987:-654&hello=bye"))) - .isEqualTo(jakartify("aaa=bbb&javax.faces.ViewState=-123:-456&hello=bye")); - assertThat(extractJSFNewViewState(jakartify(""), - jakartify("aaa=bbb&javax.faces.ViewState=-987:-654"))) - .isEqualTo(jakartify("aaa=bbb&javax.faces.ViewState=-123:-456")); + assertThat(extractJSFNewViewState("xxx", "jakarta.faces.ViewState=stateless&hello=bye")) + .isEqualTo("jakarta.faces.ViewState=stateless&hello=bye"); + assertThat(extractJSFNewViewState("", + "jakarta.faces.ViewState=stateless&hello=bye")) + .isEqualTo("jakarta.faces.ViewState=stateless&hello=bye"); + assertThat(extractJSFNewViewState("", + "aaa=bbb&jakarta.faces.ViewState=xxx:yyy&hello=bye")) + .isEqualTo("aaa=bbb&jakarta.faces.ViewState=xxx:yyy&hello=bye"); + assertThat(extractJSFNewViewState("", + "jakarta.faces.ViewState=987:654&hello=bye")) + .isEqualTo("jakarta.faces.ViewState=123:456&hello=bye"); + assertThat(extractJSFNewViewState("", + "jakarta.faces.ViewState=987:654&hello=bye")) + .isEqualTo("jakarta.faces.ViewState=-123:-456&hello=bye"); + assertThat(extractJSFNewViewState("", + "jakarta.faces.ViewState=-987:-654&hello=bye")) + .isEqualTo("jakarta.faces.ViewState=-123:-456&hello=bye"); + assertThat(extractJSFNewViewState("", + "aaa=bbb&jakarta.faces.ViewState=-987:-654&hello=bye")) + .isEqualTo("aaa=bbb&jakarta.faces.ViewState=-123:-456&hello=bye"); + assertThat(extractJSFNewViewState("", + "aaa=bbb&jakarta.faces.ViewState=-987:-654")) + .isEqualTo("aaa=bbb&jakarta.faces.ViewState=-123:-456"); } @Test void noAjaxRequests() { - assertThat(noJSFAjaxRequests(jakartify("aaa=bbb&javax.faces.ViewState=-123:-456") - + jakartify("&javax.faces.partial.ajax=true&hello=bye"), false)).isEqualTo(new PartialAjaxResult( - jakartify("aaa=bbb&javax.faces.ViewState=-123:-456&hello=bye"), - true, false)); + assertThat(noJSFAjaxRequests("aaa=bbb&jakarta.faces.ViewState=-123:-456" + + "&jakarta.faces.partial.ajax=true&hello=bye", false)).isEqualTo(new PartialAjaxResult( + "aaa=bbb&jakarta.faces.ViewState=-123:-456&hello=bye", + true, false)); assertThat(noJSFAjaxRequests("j_idt12=j_idt12&j_idt12:j_idt14=asdf&j_idt12:j_idt16=asdf" - + jakartify("&javax.faces.ViewState=7709788254588873136:-8052771455757429917") - + jakartify("&javax.faces.source=j_idt12:j_idt18") - + jakartify("&javax.faces.partial.event=click") - + jakartify("&javax.faces.partial.execute=j_idt12:j_idt18 j_idt12") - + jakartify("&javax.faces.partial.render=j_idt12") - + jakartify("&javax.faces.behavior.event=action") - + jakartify("&javax.faces.partial.ajax=false"), false)) - .isEqualTo(new PartialAjaxResult("j_idt12=j_idt12&j_idt12:j_idt14=asdf&j_idt12:j_idt16=asdf" - + jakartify("&javax.faces.ViewState=7709788254588873136:-8052771455757429917") - + jakartify("&javax.faces.source=j_idt12:j_idt18") - + jakartify("&javax.faces.behavior.event=action"), true, false)); + + "&jakarta.faces.ViewState=7709788254588873136:-8052771455757429917" + + "&jakarta.faces.source=j_idt12:j_idt18" + + "&jakarta.faces.partial.event=click" + + "&jakarta.faces.partial.execute=j_idt12:j_idt18 j_idt12" + + "&jakarta.faces.partial.render=j_idt12" + + "&jakarta.faces.behavior.event=action" + + "&jakarta.faces.partial.ajax=false", false)) + .isEqualTo(new PartialAjaxResult("j_idt12=j_idt12&j_idt12:j_idt14=asdf&j_idt12:j_idt16=asdf" + + "&jakarta.faces.ViewState=7709788254588873136:-8052771455757429917" + + "&jakarta.faces.source=j_idt12:j_idt18" + + "&jakarta.faces.behavior.event=action", true, false)); } @Test diff --git a/support/jaxrs/pom.xml b/support/jaxrs/pom.xml index a1fcaacf49..9c38bc3e0d 100644 --- a/support/jaxrs/pom.xml +++ b/support/jaxrs/pom.xml @@ -61,9 +61,9 @@ test - javax.xml.bind - jaxb-api - 2.3.1 + jakarta.xml.bind + jakarta.xml.bind-api + 3.0.1 test @@ -74,7 +74,7 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 3.6.4 + 4.0.6 test diff --git a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/AnnotationAuthorizationFilter.java b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/AnnotationAuthorizationFilter.java index 4e2421aa2a..c51ac4c6e1 100644 --- a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/AnnotationAuthorizationFilter.java +++ b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/AnnotationAuthorizationFilter.java @@ -34,11 +34,11 @@ import org.apache.shiro.authz.aop.RolesAllowedAnnotationHandler; import org.apache.shiro.authz.aop.UserAnnotationHandler; -import javax.annotation.security.DenyAll; -import javax.annotation.security.PermitAll; -import javax.annotation.security.RolesAllowed; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; +import jakarta.annotation.security.DenyAll; +import jakarta.annotation.security.PermitAll; +import jakarta.annotation.security.RolesAllowed; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; import java.io.IOException; import java.lang.annotation.Annotation; import java.util.Collection; diff --git a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroAnnotationFilterFeature.java b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroAnnotationFilterFeature.java index 3d9e62f528..536545629c 100644 --- a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroAnnotationFilterFeature.java +++ b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroAnnotationFilterFeature.java @@ -26,18 +26,18 @@ import org.apache.shiro.authz.annotation.RequiresUser; import org.apache.shiro.web.filter.authz.AuthorizationFilter; -import javax.ws.rs.Priorities; -import javax.ws.rs.container.DynamicFeature; -import javax.ws.rs.container.ResourceInfo; -import javax.ws.rs.core.FeatureContext; +import jakarta.ws.rs.Priorities; +import jakarta.ws.rs.container.DynamicFeature; +import jakarta.ws.rs.container.ResourceInfo; +import jakarta.ws.rs.core.FeatureContext; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.annotation.security.DenyAll; -import javax.annotation.security.PermitAll; -import javax.annotation.security.RolesAllowed; +import jakarta.annotation.security.DenyAll; +import jakarta.annotation.security.PermitAll; +import jakarta.annotation.security.RolesAllowed; import static org.apache.shiro.web.jaxrs.SubjectPrincipalRequestFilter.SHIRO_WEB_JAXRS_DISABLE_PRINCIPAL_PARAM; diff --git a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroFeature.java b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroFeature.java index 8de8be8723..682456e85f 100644 --- a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroFeature.java +++ b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroFeature.java @@ -18,10 +18,10 @@ */ package org.apache.shiro.web.jaxrs; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.Feature; -import javax.ws.rs.core.FeatureContext; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.core.Application; +import jakarta.ws.rs.core.Feature; +import jakarta.ws.rs.core.FeatureContext; +import jakarta.ws.rs.ext.Provider; /** diff --git a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroSecurityContext.java b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroSecurityContext.java index 872c8e8c3b..d716107dc6 100644 --- a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroSecurityContext.java +++ b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroSecurityContext.java @@ -22,8 +22,8 @@ import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.Subject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.SecurityContext; import java.security.Principal; /** diff --git a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/SubjectPrincipalRequestFilter.java b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/SubjectPrincipalRequestFilter.java index 23559b65dc..ec64b0dead 100644 --- a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/SubjectPrincipalRequestFilter.java +++ b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/SubjectPrincipalRequestFilter.java @@ -18,14 +18,14 @@ */ package org.apache.shiro.web.jaxrs; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.PreMatching; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; /** - * A {@link ContainerRequestFilter} that replaces the {@link javax.ws.rs.core.SecurityContext} + * A {@link ContainerRequestFilter} that replaces the {@link jakarta.ws.rs.core.SecurityContext} * with a {@link ShiroSecurityContext}. * * @since 1.4 diff --git a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/UnauthenticatedExceptionExceptionMapper.java b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/UnauthenticatedExceptionExceptionMapper.java index a576aa40c9..982b993094 100644 --- a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/UnauthenticatedExceptionExceptionMapper.java +++ b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/UnauthenticatedExceptionExceptionMapper.java @@ -23,9 +23,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.ext.ExceptionMapper; /** * JAX-RS exception mapper used to map Shiro {@link UnauthenticatedException} to HTTP status codes. diff --git a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/UnauthorizedExceptionExceptionMapper.java b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/UnauthorizedExceptionExceptionMapper.java index 113be09db1..1f469035b6 100644 --- a/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/UnauthorizedExceptionExceptionMapper.java +++ b/support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/UnauthorizedExceptionExceptionMapper.java @@ -23,9 +23,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.ext.ExceptionMapper; /** * JAX-RS exception mapper used to map Shiro {@link UnauthorizedException} to HTTP status codes. diff --git a/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/ShiroSecurityContextTest.groovy b/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/ShiroSecurityContextTest.groovy index 84fbadc8f3..0348b2cf9d 100644 --- a/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/ShiroSecurityContextTest.groovy +++ b/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/ShiroSecurityContextTest.groovy @@ -24,8 +24,8 @@ import org.apache.shiro.util.ThreadContext import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test -import javax.ws.rs.container.ContainerRequestContext -import javax.ws.rs.core.SecurityContext +import jakarta.ws.rs.container.ContainerRequestContext +import jakarta.ws.rs.core.SecurityContext import java.security.Principal import static org.easymock.EasyMock.* diff --git a/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/SubjectPrincipalRequestFilterTest.groovy b/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/SubjectPrincipalRequestFilterTest.groovy index 4688fadd73..a18ae52412 100644 --- a/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/SubjectPrincipalRequestFilterTest.groovy +++ b/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/SubjectPrincipalRequestFilterTest.groovy @@ -21,8 +21,8 @@ package org.apache.shiro.web.jaxrs import org.easymock.Capture import org.junit.jupiter.api.Test -import javax.ws.rs.container.ContainerRequestContext -import javax.ws.rs.core.SecurityContext +import jakarta.ws.rs.container.ContainerRequestContext +import jakarta.ws.rs.core.SecurityContext import static org.easymock.EasyMock.* import static org.junit.jupiter.api.Assertions.* diff --git a/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/UnauthorizedExceptionExceptionMapperTest.groovy b/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/UnauthorizedExceptionExceptionMapperTest.groovy index 3e9ac3f1ef..bb60d08a52 100644 --- a/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/UnauthorizedExceptionExceptionMapperTest.groovy +++ b/support/jaxrs/src/test/groovy/org/apache/shiro/web/jaxrs/UnauthorizedExceptionExceptionMapperTest.groovy @@ -24,8 +24,8 @@ import org.apache.shiro.authz.UnauthenticatedException import org.apache.shiro.authz.UnauthorizedException import org.junit.jupiter.api.Test -import javax.ws.rs.core.Response -import javax.ws.rs.ext.ExceptionMapper +import jakarta.ws.rs.core.Response +import jakarta.ws.rs.ext.ExceptionMapper import static org.junit.jupiter.api.Assertions.assertEquals diff --git a/support/quartz/pom.xml b/support/quartz/pom.xml index c18333a2fe..8cd825a48a 100644 --- a/support/quartz/pom.xml +++ b/support/quartz/pom.xml @@ -72,7 +72,7 @@ org.apache.shiro.session.mgt.quartz*;version=${project.version} org.apache.shiro*;version="${shiro.osgi.importRange}", - org.quartz*;version="[1.7.2, 3)", + org.quartz*;version="[2.5.0, 3)", * <_removeheaders>Bnd-LastModified diff --git a/support/servlet-plugin/src/main/resources/META-INF/web-fragment.xml b/support/servlet-plugin/src/main/resources/META-INF/web-fragment.xml index 946700418a..06d94dc7ed 100644 --- a/support/servlet-plugin/src/main/resources/META-INF/web-fragment.xml +++ b/support/servlet-plugin/src/main/resources/META-INF/web-fragment.xml @@ -18,10 +18,10 @@ ~ under the License. --> + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartae/web-fragment_6_0.xsd" + version="6.0"> ApacheShiro diff --git a/support/spring-boot/spring-boot-starter/src/main/java/org/apache/shiro/spring/config/web/autoconfigure/ShiroWebFilterConfiguration.java b/support/spring-boot/spring-boot-starter/src/main/java/org/apache/shiro/spring/config/web/autoconfigure/ShiroWebFilterConfiguration.java index 9a103a280c..917557bb6f 100644 --- a/support/spring-boot/spring-boot-starter/src/main/java/org/apache/shiro/spring/config/web/autoconfigure/ShiroWebFilterConfiguration.java +++ b/support/spring-boot/spring-boot-starter/src/main/java/org/apache/shiro/spring/config/web/autoconfigure/ShiroWebFilterConfiguration.java @@ -28,7 +28,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import javax.servlet.DispatcherType; +import jakarta.servlet.DispatcherType; import java.util.List; /** diff --git a/support/spring-boot/spring-boot-starter/src/test/resources/logback.xml b/support/spring-boot/spring-boot-starter/src/test/resources/logback.xml index 19d7e2461f..6d2f2cf57e 100644 --- a/support/spring-boot/spring-boot-starter/src/test/resources/logback.xml +++ b/support/spring-boot/spring-boot-starter/src/test/resources/logback.xml @@ -24,7 +24,7 @@ class="ch.qos.logback.core.ConsoleAppender"> - %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable + %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1}): %msg%n%throwable @@ -35,7 +35,7 @@ - + diff --git a/support/spring/pom.xml b/support/spring/pom.xml index 064f29a75b..3a49a2cbae 100644 --- a/support/spring/pom.xml +++ b/support/spring/pom.xml @@ -44,8 +44,8 @@ shiro-web - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api provided diff --git a/support/spring/src/main/java/org/apache/shiro/spring/LifecycleBeanPostProcessor.java b/support/spring/src/main/java/org/apache/shiro/spring/LifecycleBeanPostProcessor.java index df7640c7ff..d25296b92c 100644 --- a/support/spring/src/main/java/org/apache/shiro/spring/LifecycleBeanPostProcessor.java +++ b/support/spring/src/main/java/org/apache/shiro/spring/LifecycleBeanPostProcessor.java @@ -80,13 +80,13 @@ public LifecycleBeanPostProcessor(int order) { * @throws BeansException if any exception is thrown during initialization. */ public Object postProcessBeforeInitialization(Object object, String name) throws BeansException { - if (object instanceof Initializable) { + if (object instanceof Initializable initializable) { try { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Initializing bean [" + name + "]..."); } - ((Initializable) object).init(); + initializable.init(); } catch (Exception e) { throw new FatalBeanException("Error initializing bean [" + name + "]", e); } @@ -112,13 +112,13 @@ public Object postProcessAfterInitialization(Object object, String name) throws * @throws BeansException if any exception is thrown during initialization. */ public void postProcessBeforeDestruction(Object object, String name) throws BeansException { - if (object instanceof Destroyable) { + if (object instanceof Destroyable destroyable) { try { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Destroying bean [" + name + "]..."); } - ((Destroyable) object).destroy(); + destroyable.destroy(); } catch (Exception e) { throw new FatalBeanException("Error destroying bean [" + name + "]", e); } 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 fdbe833ed9..5f88f43634 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 @@ -56,8 +56,8 @@ public Object postProcessBeforeInitialization(Object bean, String beanName) thro @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - if (bean instanceof EventBusAware) { - ((EventBusAware) bean).setEventBus(eventBus); + if (bean instanceof EventBusAware aware) { + aware.setEventBus(eventBus); } else if (isEventSubscriber(bean)) { eventBus.register(bean); } diff --git a/support/spring/src/main/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationExecutor.java b/support/spring/src/main/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationExecutor.java deleted file mode 100644 index 9d77fb2555..0000000000 --- a/support/spring/src/main/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationExecutor.java +++ /dev/null @@ -1,124 +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.remoting; - -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.mgt.SecurityManager; -import org.apache.shiro.subject.ExecutionException; -import org.apache.shiro.subject.Subject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.remoting.support.DefaultRemoteInvocationExecutor; -import org.springframework.remoting.support.RemoteInvocation; - -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.util.concurrent.Callable; - - -/** - * An implementation of the Spring {@link org.springframework.remoting.support.RemoteInvocationExecutor} - * that binds a {@code sessionId} to the incoming thread to make it available to the {@code SecurityManager} - * implementation during the thread execution. The {@code SecurityManager} implementation can use this sessionId - * to reconstitute the {@code Subject} instance based on persistent state in the corresponding {@code Session}. - * - * @since 0.1 - */ -public class SecureRemoteInvocationExecutor extends DefaultRemoteInvocationExecutor { - - //TODO - complete JavaDoc - - /*-------------------------------------------- - | C O N S T A N T S | - ============================================*/ - - /*-------------------------------------------- - | I N S T A N C E V A R I A B L E S | - ============================================*/ - private static final Logger LOGGER = LoggerFactory.getLogger(SecureRemoteInvocationExecutor.class); - - /** - * The SecurityManager used to retrieve realms that should be associated with the - * created Subjects upon remote invocation. - */ - private SecurityManager securityManager; - - /*-------------------------------------------- - | C O N S T R U C T O R S | - ============================================*/ - - /*-------------------------------------------- - | A C C E S S O R S / M O D I F I E R S | - ============================================*/ - - public void setSecurityManager(org.apache.shiro.mgt.SecurityManager securityManager) { - this.securityManager = securityManager; - } - - /*-------------------------------------------- - | M E T H O D S | - ============================================*/ - @SuppressWarnings({"unchecked"}) - public Object invoke(final RemoteInvocation invocation, final Object targetObject) - throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { - - try { - SecurityManager securityManager = - this.securityManager != null ? this.securityManager : SecurityUtils.getSecurityManager(); - - Subject.Builder builder = new Subject.Builder(securityManager); - - String host = (String) invocation.getAttribute(SecureRemoteInvocationFactory.HOST_KEY); - if (host != null) { - builder.host(host); - } - - Serializable sessionId = invocation.getAttribute(SecureRemoteInvocationFactory.SESSION_ID_KEY); - if (sessionId != null) { - builder.sessionId(sessionId); - } else { - if (LOGGER.isTraceEnabled()) { - LOGGER.trace("RemoteInvocation did not contain a Shiro Session id attribute under " - + "key [" + SecureRemoteInvocationFactory.SESSION_ID_KEY + "]. A Subject based " - + "on an existing Session will not be available during the method invocation."); - } - } - - Subject subject = builder.buildSubject(); - return subject.execute(new Callable() { - public Object call() throws Exception { - return SecureRemoteInvocationExecutor.super.invoke(invocation, targetObject); - } - }); - } catch (ExecutionException e) { - Throwable cause = e.getCause(); - if (cause instanceof NoSuchMethodException) { - throw (NoSuchMethodException) cause; - } else if (cause instanceof IllegalAccessException) { - throw (IllegalAccessException) cause; - } else if (cause instanceof InvocationTargetException) { - throw (InvocationTargetException) cause; - } else { - throw new InvocationTargetException(cause); - } - } catch (Throwable t) { - throw new InvocationTargetException(t); - } - } -} diff --git a/support/spring/src/main/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactory.java b/support/spring/src/main/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactory.java deleted file mode 100644 index 01de9e9d91..0000000000 --- a/support/spring/src/main/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactory.java +++ /dev/null @@ -1,144 +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.remoting; - -import org.aopalliance.intercept.MethodInvocation; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.session.Session; -import org.apache.shiro.session.mgt.NativeSessionManager; -import org.apache.shiro.session.mgt.SessionKey; -import org.apache.shiro.session.mgt.SessionManager; -import org.apache.shiro.subject.Subject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.remoting.support.DefaultRemoteInvocationFactory; -import org.springframework.remoting.support.RemoteInvocation; -import org.springframework.remoting.support.RemoteInvocationFactory; - -import java.io.Serializable; - -/** - * A {@link RemoteInvocationFactory} that passes the session ID to the server via a - * {@link RemoteInvocation} {@link RemoteInvocation#getAttribute(String) attribute}. - * This factory is the client-side part of - * the Shiro Spring remoting invocation. A {@link SecureRemoteInvocationExecutor} should - * be used to export the server-side remote services to ensure that the appropriate - * Subject and Session are bound to the remote thread during execution. - * - * @since 0.1 - */ -public class SecureRemoteInvocationFactory extends DefaultRemoteInvocationFactory { - - /** - * session id key. - */ - public static final String SESSION_ID_KEY = SecureRemoteInvocationFactory.class.getName() + ".SESSION_ID_KEY"; - - /** - * host key. - */ - public static final String HOST_KEY = SecureRemoteInvocationFactory.class.getName() + ".HOST_KEY"; - - private static final Logger LOGGER = LoggerFactory.getLogger(SecureRemoteInvocationFactory.class); - private static final String SESSION_ID_SYSTEM_PROPERTY_NAME = "shiro.session.id"; - - private String sessionId; - - public SecureRemoteInvocationFactory() { - } - - public SecureRemoteInvocationFactory(String sessionId) { - this(); - this.sessionId = sessionId; - } - - /** - * Creates a {@link RemoteInvocation} with the current session ID as an - * {@link RemoteInvocation#getAttribute(String) attribute}. - * - * @param mi the method invocation that the remote invocation should be based on. - * @return a remote invocation object containing the current session ID as an attribute. - */ - @SuppressWarnings({"checkstyle:CyclomaticComplexity", "checkstyle:NPathComplexity"}) - public RemoteInvocation createRemoteInvocation(MethodInvocation mi) { - - Serializable sessionId = null; - String host = null; - boolean sessionManagerMethodInvocation = false; - - //If the calling MI is for a remoting SessionManager delegate, we need to acquire the session ID from the method - //argument and NOT interact with SecurityUtils/subject.getSession to avoid a stack overflow - Class miDeclaringClass = mi.getMethod().getDeclaringClass(); - if (SessionManager.class.equals(miDeclaringClass) || NativeSessionManager.class.equals(miDeclaringClass)) { - sessionManagerMethodInvocation = true; - //for SessionManager calls, all method calls except the 'start' methods require a SessionKey - // as the first argument, so just get it from there: - if (!mi.getMethod().getName().equals("start")) { - SessionKey key = (SessionKey) mi.getArguments()[0]; - sessionId = key.getSessionId(); - } - } - - //tried the delegate. Use the injected session id if given - if (sessionId == null) { - sessionId = this.sessionId; - } - - // If sessionId is null, only then try the Subject: - if (sessionId == null) { - try { - // HACK Check if can get the securityManager - this'll cause an exception if it's not set - SecurityUtils.getSecurityManager(); - if (!sessionManagerMethodInvocation) { - Subject subject = SecurityUtils.getSubject(); - Session session = subject.getSession(false); - if (session != null) { - sessionId = session.getId(); - host = session.getHost(); - } - } - } catch (Exception e) { - LOGGER.trace("No security manager set. Trying next to get session id from system property"); - } - } - //No call to the sessionManager, and the Subject doesn't have a session. Try a system property - //as a last result: - if (sessionId == null) { - if (LOGGER.isTraceEnabled()) { - LOGGER.trace("No Session found for the currently executing subject via subject.getSession(false). " - + "Attempting to revert back to the 'shiro.session.id' system property..."); - } - sessionId = System.getProperty(SESSION_ID_SYSTEM_PROPERTY_NAME); - if (sessionId == null && LOGGER.isTraceEnabled()) { - LOGGER.trace("No 'shiro.session.id' system property found. Heuristics have been exhausted; " - + "RemoteInvocation will not contain a sessionId."); - } - } - - RemoteInvocation ri = new RemoteInvocation(mi); - if (sessionId != null) { - ri.addAttribute(SESSION_ID_KEY, sessionId); - } - if (host != null) { - ri.addAttribute(HOST_KEY, host); - } - - return ri; - } -} diff --git a/support/spring/src/main/java/org/apache/shiro/spring/remoting/package-info.java b/support/spring/src/main/java/org/apache/shiro/spring/remoting/package-info.java deleted file mode 100644 index c6762a222c..0000000000 --- a/support/spring/src/main/java/org/apache/shiro/spring/remoting/package-info.java +++ /dev/null @@ -1,23 +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. - */ -/** - * Support to enable Spring-based remote method invocations to carry a Shiro session ID as part of the - * invocation payload, allowing remote clients to perform security operations. - */ -package org.apache.shiro.spring.remoting; 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 f02fdd4b74..ea9b11a872 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 @@ -44,7 +44,7 @@ import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.config.BeanPostProcessor; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -78,12 +78,12 @@ * optional. *

    * This implementation is also a {@link BeanPostProcessor} and will acquire - * any {@link javax.servlet.Filter Filter} beans defined independently in your Spring application context. Upon + * any {@link jakarta.servlet.Filter Filter} beans defined independently in your Spring application context. Upon * discovery, they will be automatically added to the {@link #setFilters(java.util.Map) map} keyed by the bean ID. * That ID can then be used in the filter chain definitions, for example: * *

    - * <bean id="myCustomFilter" class="com.class.that.implements.javax.servlet.Filter"/>
    + * <bean id="myCustomFilter" class="com.class.that.implements.jakarta.servlet.Filter"/>
      * ...
      * <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
      *    ...
    @@ -303,7 +303,7 @@ public Map getFilters() {
          * 

    * For example, just defining this bean in a web Spring XML application context: *

    -     * <bean id="myFilter" class="com.class.that.implements.javax.servlet.Filter">
    +     * <bean id="myFilter" class="com.class.that.implements.jakarta.servlet.Filter">
          * ...
          * </bean>
    * Will automatically place that bean into this Filters map under the key 'myFilter'. @@ -422,8 +422,8 @@ protected FilterChainManager createFilterChainManager() { String name = entry.getKey(); Filter filter = entry.getValue(); applyGlobalPropertiesIfNecessary(filter); - if (filter instanceof Nameable) { - ((Nameable) filter).setName(name); + if (filter instanceof Nameable nameable) { + nameable.setName(name); } //'init' argument is false, since Spring-configured filters should be initialized //in Spring (i.e. 'init-method=blah') or implement InitializingBean: @@ -501,8 +501,7 @@ protected AbstractShiroFilter createInstance() throws Exception { private void applyLoginUrlIfNecessary(Filter filter) { String loginUrl = getLoginUrl(); - if (StringUtils.hasText(loginUrl) && (filter instanceof AccessControlFilter)) { - AccessControlFilter acFilter = (AccessControlFilter) filter; + if (StringUtils.hasText(loginUrl) && (filter instanceof AccessControlFilter acFilter)) { //only apply the login url if they haven't explicitly configured one already: String existingLoginUrl = acFilter.getLoginUrl(); if (AccessControlFilter.DEFAULT_LOGIN_URL.equals(existingLoginUrl)) { @@ -513,8 +512,7 @@ private void applyLoginUrlIfNecessary(Filter filter) { private void applySuccessUrlIfNecessary(Filter filter) { String successUrl = getSuccessUrl(); - if (StringUtils.hasText(successUrl) && (filter instanceof AuthenticationFilter)) { - AuthenticationFilter authcFilter = (AuthenticationFilter) filter; + if (StringUtils.hasText(successUrl) && (filter instanceof AuthenticationFilter authcFilter)) { //only apply the successUrl if they haven't explicitly configured one already: String existingSuccessUrl = authcFilter.getSuccessUrl(); if (AuthenticationFilter.DEFAULT_SUCCESS_URL.equals(existingSuccessUrl)) { @@ -525,8 +523,7 @@ private void applySuccessUrlIfNecessary(Filter filter) { private void applyUnauthorizedUrlIfNecessary(Filter filter) { String unauthorizedUrl = getUnauthorizedUrl(); - if (StringUtils.hasText(unauthorizedUrl) && (filter instanceof AuthorizationFilter)) { - AuthorizationFilter authzFilter = (AuthorizationFilter) filter; + if (StringUtils.hasText(unauthorizedUrl) && (filter instanceof AuthorizationFilter authzFilter)) { //only apply the unauthorizedUrl if they haven't explicitly configured one already: String existingUnauthorizedUrl = authzFilter.getUnauthorizedUrl(); if (existingUnauthorizedUrl == null) { @@ -540,8 +537,8 @@ private void applyGlobalPropertiesIfNecessary(Filter filter) { applySuccessUrlIfNecessary(filter); applyUnauthorizedUrlIfNecessary(filter); - if (filter instanceof OncePerRequestFilter) { - ((OncePerRequestFilter) filter).setFilterOncePerRequest(filterConfiguration.isFilterOncePerRequest()); + if (filter instanceof OncePerRequestFilter requestFilter) { + requestFilter.setFilterOncePerRequest(filterConfiguration.isFilterOncePerRequest()); } } @@ -551,9 +548,8 @@ private void applyGlobalPropertiesIfNecessary(Filter filter) { * later during filter chain construction. */ public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - if (bean instanceof Filter) { + if (bean instanceof Filter filter) { LOGGER.debug("Found filter chain candidate filter '{}'", beanName); - Filter filter = (Filter) bean; applyGlobalPropertiesIfNecessary(filter); getFilters().put(beanName, filter); } else { diff --git a/support/spring/src/main/java/org/apache/shiro/spring/web/ShiroUrlPathHelper.java b/support/spring/src/main/java/org/apache/shiro/spring/web/ShiroUrlPathHelper.java index b54a6eae3f..ecce70f7dc 100644 --- a/support/spring/src/main/java/org/apache/shiro/spring/web/ShiroUrlPathHelper.java +++ b/support/spring/src/main/java/org/apache/shiro/spring/web/ShiroUrlPathHelper.java @@ -21,7 +21,7 @@ import org.apache.shiro.web.util.WebUtils; import org.springframework.web.util.UrlPathHelper; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * A Spring UrlPathHelper that uses Shiro's path resolution logic. diff --git a/support/spring/src/main/java/org/apache/shiro/spring/web/config/AbstractShiroWebFilterConfiguration.java b/support/spring/src/main/java/org/apache/shiro/spring/web/config/AbstractShiroWebFilterConfiguration.java index ff9df7a0b5..8261d37c37 100644 --- a/support/spring/src/main/java/org/apache/shiro/spring/web/config/AbstractShiroWebFilterConfiguration.java +++ b/support/spring/src/main/java/org/apache/shiro/spring/web/config/AbstractShiroWebFilterConfiguration.java @@ -25,7 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroBeanConfigurationTest.groovy b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroBeanConfigurationTest.groovy index cd21cf1402..af840bfc35 100644 --- a/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroBeanConfigurationTest.groovy +++ b/support/spring/src/test/groovy/org/apache/shiro/spring/config/ShiroBeanConfigurationTest.groovy @@ -23,15 +23,15 @@ import org.apache.shiro.spring.testconfig.EventBusConsumersTestConfiguration import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired -import org.springframework.test.context.ContextConfiguration import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig import static org.junit.jupiter.api.Assertions.* /** * @since 1.4.0 */ -@ContextConfiguration(classes = [ShiroBeanConfiguration, EventBusConsumersTestConfiguration]) +@SpringJUnitConfig(classes = [ShiroBeanConfiguration, EventBusConsumersTestConfiguration]) @ExtendWith(SpringExtension.class) public class ShiroBeanConfigurationTest { 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 2137df7c7a..d3e09c419f 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 @@ -29,8 +29,8 @@ import org.apache.shiro.subject.Subject import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired -import org.springframework.test.context.ContextConfiguration 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 @@ -40,7 +40,7 @@ import static org.junit.jupiter.api.Assertions.* /** * @since 1.4.0 */ -@ContextConfiguration(classes = [RealmTestConfiguration, ShiroConfiguration]) +@SpringJUnitConfig(classes = [RealmTestConfiguration, ShiroConfiguration]) @ExtendWith(SpringExtension.class) class ShiroConfigurationTest extends AbstractJUnit4SpringContextTests { 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 c242d2be13..e9ecb35cdc 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 @@ -30,8 +30,8 @@ import org.apache.shiro.subject.Subject import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired -import org.springframework.test.context.ContextConfiguration 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.* @@ -41,7 +41,7 @@ import static org.hamcrest.MatcherAssert.* /** * @since 1.4.0 */ -@ContextConfiguration(classes = [RealmTestConfiguration, OptionalComponentsTestConfiguration, ShiroConfiguration, ShiroAnnotationProcessorConfiguration]) +@SpringJUnitConfig(classes = [RealmTestConfiguration, OptionalComponentsTestConfiguration, ShiroConfiguration, ShiroAnnotationProcessorConfiguration]) @ExtendWith(SpringExtension.class) class ShiroConfigurationWithOptionalComponentsTest extends AbstractJUnit4SpringContextTests { 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 3382b0e038..d33ceb250e 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 @@ -32,8 +32,8 @@ import org.apache.shiro.subject.Subject import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired -import org.springframework.test.context.ContextConfiguration 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 @@ -43,7 +43,7 @@ import static org.junit.jupiter.api.Assertions.* /** * @since 1.4.0 */ -@ContextConfiguration(classes = [RealmTestConfiguration, ShiroConfiguration, ShiroWebConfiguration, ShiroWebFilterConfiguration]) +@SpringJUnitConfig(classes = [RealmTestConfiguration, ShiroConfiguration, ShiroWebConfiguration, ShiroWebFilterConfiguration]) @ExtendWith(SpringExtension.class) class ShiroWebConfigurationTest extends AbstractJUnit4SpringContextTests { 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 5c6ee9f504..f277eb179e 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 @@ -31,17 +31,17 @@ import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration -import org.springframework.test.context.ContextConfiguration 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 javax.servlet.Filter -import javax.servlet.FilterChain -import javax.servlet.FilterConfig -import javax.servlet.ServletException -import javax.servlet.ServletRequest -import javax.servlet.ServletResponse +import jakarta.servlet.Filter +import jakarta.servlet.FilterChain +import jakarta.servlet.FilterConfig +import jakarta.servlet.ServletException +import jakarta.servlet.ServletRequest +import jakarta.servlet.ServletResponse import static org.hamcrest.Matchers.contains import static org.hamcrest.Matchers.instanceOf @@ -52,7 +52,7 @@ import static org.hamcrest.MatcherAssert.assertThat * Test ShiroWebFilterConfiguration creates a ShiroFilterFactoryBean that contains Servlet filters that are available for injection. */ @WebAppConfiguration -@ContextConfiguration(classes = [RealmTestConfiguration, FilterConfiguration, ShiroConfiguration, ShiroWebFilterConfiguration]) +@SpringJUnitConfig(classes = [RealmTestConfiguration, FilterConfiguration, ShiroConfiguration, ShiroWebFilterConfiguration]) @ExtendWith(SpringExtension.class) class ShiroWebFilterConfigurationTest extends AbstractJUnit4SpringContextTests { diff --git a/support/spring/src/test/groovy/org/apache/shiro/spring/web/config/ShiroWebConfigurationTest.groovy b/support/spring/src/test/groovy/org/apache/shiro/spring/web/config/ShiroWebConfigurationTest.groovy index d5565fb029..68a4fb55f6 100644 --- a/support/spring/src/test/groovy/org/apache/shiro/spring/web/config/ShiroWebConfigurationTest.groovy +++ b/support/spring/src/test/groovy/org/apache/shiro/spring/web/config/ShiroWebConfigurationTest.groovy @@ -37,8 +37,8 @@ import org.springframework.beans.factory.annotation.Qualifier import org.springframework.expression.Expression import org.springframework.expression.ExpressionParser import org.springframework.expression.spel.standard.SpelExpressionParser -import org.springframework.test.context.ContextConfiguration import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig import static org.hamcrest.MatcherAssert.assertThat import static org.hamcrest.Matchers.* @@ -47,7 +47,7 @@ import static org.junit.jupiter.api.Assertions.* /** * @since 1.4.0 */ -@ContextConfiguration(classes = [EventBusTestConfiguration, RealmTestConfiguration, ShiroWebConfiguration]) +@SpringJUnitConfig(classes = [EventBusTestConfiguration, RealmTestConfiguration, ShiroWebConfiguration]) @ExtendWith(SpringExtension.class) public class ShiroWebConfigurationTest { diff --git a/support/spring/src/test/groovy/org/apache/shiro/spring/web/config/ShiroWebConfigurationWithCacheTest.groovy b/support/spring/src/test/groovy/org/apache/shiro/spring/web/config/ShiroWebConfigurationWithCacheTest.groovy index 72d86cd6e9..31c5033e2a 100644 --- a/support/spring/src/test/groovy/org/apache/shiro/spring/web/config/ShiroWebConfigurationWithCacheTest.groovy +++ b/support/spring/src/test/groovy/org/apache/shiro/spring/web/config/ShiroWebConfigurationWithCacheTest.groovy @@ -27,8 +27,8 @@ import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired -import org.springframework.test.context.ContextConfiguration import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig import static org.hamcrest.MatcherAssert.assertThat import static org.hamcrest.Matchers.* @@ -37,7 +37,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull /** * @since 1.4.0 */ -@ContextConfiguration(classes = [EventBusTestConfiguration, RealmTestConfiguration, CacheManagerConfiguration, ShiroWebConfiguration]) +@SpringJUnitConfig(classes = [EventBusTestConfiguration, RealmTestConfiguration, CacheManagerConfiguration, ShiroWebConfiguration]) @ExtendWith(SpringExtension.class) class ShiroWebConfigurationWithCacheTest { diff --git a/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/AbstractAuthorizationAnnotationTest.java b/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/AbstractAuthorizationAnnotationTest.java index f026dc3515..9f34b5d358 100644 --- a/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/AbstractAuthorizationAnnotationTest.java +++ b/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/AbstractAuthorizationAnnotationTest.java @@ -27,10 +27,8 @@ import org.apache.shiro.util.ThreadState; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; @@ -41,8 +39,7 @@ * * @since 1.1 */ -@ExtendWith(SpringExtension.class) -@ContextConfiguration +@SpringJUnitConfig public abstract class AbstractAuthorizationAnnotationTest { @Autowired diff --git a/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/DapcAuthorizationAnnotationTest.java b/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/DapcAuthorizationAnnotationTest.java index 4dc41aaa73..5c2274ee8c 100644 --- a/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/DapcAuthorizationAnnotationTest.java +++ b/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/DapcAuthorizationAnnotationTest.java @@ -20,9 +20,7 @@ import org.apache.shiro.authz.UnauthenticatedException; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; @@ -35,8 +33,7 @@ * * @since 1.1 */ -@ExtendWith(SpringExtension.class) -@ContextConfiguration +@SpringJUnitConfig public class DapcAuthorizationAnnotationTest extends AbstractAuthorizationAnnotationTest { @Test diff --git a/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/SchemaAuthorizationAnnotationTest.java b/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/SchemaAuthorizationAnnotationTest.java index f4eb521a78..f6a4cc1e49 100644 --- a/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/SchemaAuthorizationAnnotationTest.java +++ b/support/spring/src/test/java/org/apache/shiro/spring/security/interceptor/SchemaAuthorizationAnnotationTest.java @@ -18,9 +18,7 @@ */ package org.apache.shiro.spring.security.interceptor; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * All the tests in the parent class are run. This class exists to ensure that Shiro @@ -31,7 +29,6 @@ * * @since 1.1 */ -@ExtendWith(SpringExtension.class) -@ContextConfiguration +@SpringJUnitConfig public class SchemaAuthorizationAnnotationTest extends AbstractAuthorizationAnnotationTest { } diff --git a/support/spring/src/test/java/org/apache/shiro/spring/web/DummyFilter.java b/support/spring/src/test/java/org/apache/shiro/spring/web/DummyFilter.java index d384c1f9e3..044824887f 100644 --- a/support/spring/src/test/java/org/apache/shiro/spring/web/DummyFilter.java +++ b/support/spring/src/test/java/org/apache/shiro/spring/web/DummyFilter.java @@ -18,12 +18,12 @@ */ package org.apache.shiro.spring.web; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; /** diff --git a/support/spring/src/test/java/org/apache/shiro/spring/web/ShiroFilterFactoryBeanTest.java b/support/spring/src/test/java/org/apache/shiro/spring/web/ShiroFilterFactoryBeanTest.java index fd0f7f9bb1..8956f2350e 100644 --- a/support/spring/src/test/java/org/apache/shiro/spring/web/ShiroFilterFactoryBeanTest.java +++ b/support/spring/src/test/java/org/apache/shiro/spring/web/ShiroFilterFactoryBeanTest.java @@ -27,15 +27,15 @@ import org.junit.jupiter.api.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import static org.assertj.core.api.Assertions.assertThat; diff --git a/support/spring/src/test/java/org/apache/shiro/spring/web/config/ShiroWebConfigurationTestSameSiteStrict.java b/support/spring/src/test/java/org/apache/shiro/spring/web/config/ShiroWebConfigurationTestSameSiteStrict.java index 588044f371..1fc716fe53 100644 --- a/support/spring/src/test/java/org/apache/shiro/spring/web/config/ShiroWebConfigurationTestSameSiteStrict.java +++ b/support/spring/src/test/java/org/apache/shiro/spring/web/config/ShiroWebConfigurationTestSameSiteStrict.java @@ -23,16 +23,13 @@ import org.apache.shiro.spring.testconfig.RealmTestConfiguration; import org.apache.shiro.web.servlet.Cookie; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import static org.assertj.core.api.Assertions.assertThat; -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = {EventBusTestConfiguration.class, RealmTestConfiguration.class, ShiroWebConfiguration.class}) +@SpringJUnitConfig(classes = {EventBusTestConfiguration.class, RealmTestConfiguration.class, ShiroWebConfiguration.class}) @TestPropertySource public class ShiroWebConfigurationTestSameSiteStrict { diff --git a/support/spring/src/test/resources/log4j2-test.xml b/support/spring/src/test/resources/log4j2-test.xml index 37c9bc4aec..65044c0ae5 100644 --- a/support/spring/src/test/resources/log4j2-test.xml +++ b/support/spring/src/test/resources/log4j2-test.xml @@ -49,7 +49,7 @@ - + diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index eab36c7b60..ee5b19a34c 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -163,4 +163,3 @@ - diff --git a/tools/hasher/pom.xml b/tools/hasher/pom.xml index c890742597..8158041cde 100644 --- a/tools/hasher/pom.xml +++ b/tools/hasher/pom.xml @@ -93,7 +93,7 @@ org.springframework.boot spring-boot-maven-plugin - 2.7.18 + ${spring-boot.version} diff --git a/tools/pom.xml b/tools/pom.xml index a2b204b412..d4c3f83de1 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -37,4 +37,3 @@ - diff --git a/web/pom.xml b/web/pom.xml index d338283ee8..8c1bae35a4 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -41,8 +41,8 @@ shiro-core - javax.servlet.jsp - jsp-api + jakarta.servlet.jsp + jakarta.servlet.jsp-api org.apache.taglibs @@ -53,8 +53,8 @@ taglibs-standard-impl - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api org.owasp.encoder @@ -107,10 +107,10 @@ org.apache.shiro.web org.apache.shiro.web*;version=${project.version} - + org.apache.shiro*;version="${shiro.osgi.importRange}", - javax.servlet.jsp*;resolution:=optional, + jakarta.servlet.jsp*;resolution:=optional, * <_removeheaders>Bnd-LastModified diff --git a/web/src/main/java/org/apache/shiro/web/config/IniFilterChainResolverFactory.java b/web/src/main/java/org/apache/shiro/web/config/IniFilterChainResolverFactory.java index 07dfbbad6a..6f19bee8e8 100644 --- a/web/src/main/java/org/apache/shiro/web/config/IniFilterChainResolverFactory.java +++ b/web/src/main/java/org/apache/shiro/web/config/IniFilterChainResolverFactory.java @@ -31,8 +31,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; -import javax.servlet.FilterConfig; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterConfig; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -92,8 +92,7 @@ public void setGlobalFilters(List globalFilters) { protected FilterChainResolver createInstance(Ini ini) { FilterChainResolver filterChainResolver = createDefaultInstance(); - if (filterChainResolver instanceof PathMatchingFilterChainResolver) { - PathMatchingFilterChainResolver resolver = (PathMatchingFilterChainResolver) filterChainResolver; + if (filterChainResolver instanceof PathMatchingFilterChainResolver resolver) { FilterChainManager manager = resolver.getFilterChainManager(); buildChains(manager, ini); } @@ -193,8 +192,8 @@ private Map extractFilters(Map objects) { for (Map.Entry entry : objects.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); - if (value instanceof Filter) { - filterMap.put(key, (Filter) value); + if (value instanceof Filter filter) { + filterMap.put(key, filter); } } return filterMap; diff --git a/web/src/main/java/org/apache/shiro/web/config/ShiroFilterConfiguration.java b/web/src/main/java/org/apache/shiro/web/config/ShiroFilterConfiguration.java index 87a2729942..46db10696e 100644 --- a/web/src/main/java/org/apache/shiro/web/config/ShiroFilterConfiguration.java +++ b/web/src/main/java/org/apache/shiro/web/config/ShiroFilterConfiguration.java @@ -43,7 +43,7 @@ public boolean isFilterOncePerRequest() { /** * Sets whether the filter executes once per request or for every invocation of the filter. It is recommended - * to leave this disabled if you are using a {@link javax.servlet.RequestDispatcher RequestDispatcher} to forward + * to leave this disabled if you are using a {@link jakarta.servlet.RequestDispatcher RequestDispatcher} to forward * or include request (JSP tags, programmatically, or via a framework). * * @param filterOncePerRequest Whether this filter executes once per request. diff --git a/web/src/main/java/org/apache/shiro/web/config/WebIniSecurityManagerFactory.java b/web/src/main/java/org/apache/shiro/web/config/WebIniSecurityManagerFactory.java index 6c20d3dbdb..9bbdb45409 100644 --- a/web/src/main/java/org/apache/shiro/web/config/WebIniSecurityManagerFactory.java +++ b/web/src/main/java/org/apache/shiro/web/config/WebIniSecurityManagerFactory.java @@ -24,7 +24,7 @@ import org.apache.shiro.web.filter.mgt.DefaultFilter; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import java.util.Map; /** diff --git a/web/src/main/java/org/apache/shiro/web/env/DefaultWebEnvironment.java b/web/src/main/java/org/apache/shiro/web/env/DefaultWebEnvironment.java index 81a2b9e7ad..5f33b85555 100644 --- a/web/src/main/java/org/apache/shiro/web/env/DefaultWebEnvironment.java +++ b/web/src/main/java/org/apache/shiro/web/env/DefaultWebEnvironment.java @@ -24,7 +24,7 @@ import org.apache.shiro.web.filter.mgt.FilterChainResolver; import org.apache.shiro.web.mgt.WebSecurityManager; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import java.util.Map; /** diff --git a/web/src/main/java/org/apache/shiro/web/env/EnvironmentLoader.java b/web/src/main/java/org/apache/shiro/web/env/EnvironmentLoader.java index 7d265de562..c63f1cc623 100644 --- a/web/src/main/java/org/apache/shiro/web/env/EnvironmentLoader.java +++ b/web/src/main/java/org/apache/shiro/web/env/EnvironmentLoader.java @@ -27,7 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -279,7 +279,7 @@ protected WebEnvironment determineWebEnvironment(ServletContext servletContext) /** * Instantiates a {@link WebEnvironment} based on the specified ServletContext. *

    - * This implementation {@link #determineWebEnvironmentClass(javax.servlet.ServletContext) determines} a + * This implementation {@link #determineWebEnvironmentClass(jakarta.servlet.ServletContext) determines} a * {@link WebEnvironment} implementation class to use. That class is instantiated, configured, and returned. *

    * This allows custom {@code WebEnvironment} implementations to be specified via a ServletContext init-param if @@ -312,8 +312,8 @@ protected WebEnvironment createEnvironment(ServletContext sc) { environment.setServletContext(sc); - if (configSpecified && (environment instanceof ResourceConfigurable)) { - ((ResourceConfigurable) environment).setConfigLocations(configLocations); + if (configSpecified && (environment instanceof ResourceConfigurable configurable)) { + configurable.setConfigLocations(configLocations); } customizeEnvironment(environment); @@ -341,8 +341,8 @@ public void destroyEnvironment(ServletContext servletContext) { servletContext.log("Cleaning up Shiro Environment"); try { Object environment = servletContext.getAttribute(ENVIRONMENT_ATTRIBUTE_KEY); - if (environment instanceof WebEnvironment) { - finalizeEnvironment((WebEnvironment) environment); + if (environment instanceof WebEnvironment webEnvironment) { + finalizeEnvironment(webEnvironment); } LifecycleUtils.destroy(environment); } finally { diff --git a/web/src/main/java/org/apache/shiro/web/env/EnvironmentLoaderListener.java b/web/src/main/java/org/apache/shiro/web/env/EnvironmentLoaderListener.java index e773262379..efa6457de1 100644 --- a/web/src/main/java/org/apache/shiro/web/env/EnvironmentLoaderListener.java +++ b/web/src/main/java/org/apache/shiro/web/env/EnvironmentLoaderListener.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.env; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; /** * Bootstrap listener to startup and shutdown the web application's Shiro @@ -59,7 +59,7 @@ public void contextInitialized(ServletContextEvent sce) { /** * Destroys any previously created/bound {@code WebEnvironment} instance created by - * the {@link #contextInitialized(javax.servlet.ServletContextEvent)} method. + * the {@link #contextInitialized(jakarta.servlet.ServletContextEvent)} method. * * @param sce the ServletContextEvent triggered upon application shutdown */ diff --git a/web/src/main/java/org/apache/shiro/web/env/IniWebEnvironment.java b/web/src/main/java/org/apache/shiro/web/env/IniWebEnvironment.java index a98fe05f44..1910699422 100644 --- a/web/src/main/java/org/apache/shiro/web/env/IniWebEnvironment.java +++ b/web/src/main/java/org/apache/shiro/web/env/IniWebEnvironment.java @@ -36,7 +36,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; @@ -290,8 +290,7 @@ protected FilterChainResolver createFilterChainResolver() { if (!CollectionUtils.isEmpty(ini)) { @SuppressWarnings("unchecked") Factory factory = (Factory) this.objects.get(FILTER_CHAIN_RESOLVER_NAME); - if (factory instanceof IniFactorySupport) { - var iniFactory = (IniFactorySupport) factory; + if (factory instanceof IniFactorySupport iniFactory) { iniFactory.setIni(ini); iniFactory.setDefaults(this.objects); } @@ -343,7 +342,7 @@ protected String[] getDefaultConfigLocations() { *

    * If the path does not have a resource prefix as defined by {@link ResourceUtils#hasResourcePrefix(String)}, * the path is expected to be resolvable by the {@code ServletContext} via - * {@link javax.servlet.ServletContext#getResourceAsStream(String)}. + * {@link jakarta.servlet.ServletContext#getResourceAsStream(String)}. * * @param path the path of the INI resource to load into an INI instance. * @param required if the specified path must exist diff --git a/web/src/main/java/org/apache/shiro/web/env/MutableWebEnvironment.java b/web/src/main/java/org/apache/shiro/web/env/MutableWebEnvironment.java index 1c2d3786f4..f1e5fdba59 100644 --- a/web/src/main/java/org/apache/shiro/web/env/MutableWebEnvironment.java +++ b/web/src/main/java/org/apache/shiro/web/env/MutableWebEnvironment.java @@ -22,7 +22,7 @@ import org.apache.shiro.web.filter.mgt.FilterChainResolver; import org.apache.shiro.web.mgt.WebSecurityManager; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; /** * A {@code WebEnvironment} that supports 'write' operations operations. This mainly exists to shield diff --git a/web/src/main/java/org/apache/shiro/web/env/WebEnvironment.java b/web/src/main/java/org/apache/shiro/web/env/WebEnvironment.java index e2899b79ad..7f04416e68 100644 --- a/web/src/main/java/org/apache/shiro/web/env/WebEnvironment.java +++ b/web/src/main/java/org/apache/shiro/web/env/WebEnvironment.java @@ -23,7 +23,7 @@ import org.apache.shiro.web.filter.mgt.FilterChainResolver; import org.apache.shiro.web.mgt.WebSecurityManager; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; /** * A web-specific {@link Environment} instance, used in web applications. diff --git a/web/src/main/java/org/apache/shiro/web/filter/AccessControlFilter.java b/web/src/main/java/org/apache/shiro/web/filter/AccessControlFilter.java index 65ec890cc5..99478343fb 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/AccessControlFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/AccessControlFilter.java @@ -22,14 +22,14 @@ import org.apache.shiro.subject.Subject; import org.apache.shiro.web.util.WebUtils; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; /** * Superclass for any filter that controls access to a resource and may redirect the user to the login page * if they are not authenticated. This superclass provides the method - * {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse)} + * {@link #saveRequestAndRedirectToLogin(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse)} * which is used by many subclasses as the behavior when a user is unauthenticated. * * @since 0.9 @@ -116,7 +116,7 @@ protected abstract boolean isAccessAllowed(ServletRequest request, ServletRespon /** * Processes requests where the subject was denied access as determined by the - * {@link #isAccessAllowed(javax.servlet.ServletRequest, javax.servlet.ServletResponse, Object) isAccessAllowed} + * {@link #isAccessAllowed(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, Object) isAccessAllowed} * method, retaining the {@code mappedValue} that was used during configuration. *

    * This method immediately delegates to {@link #onAccessDenied(ServletRequest, ServletResponse)} as a @@ -136,7 +136,7 @@ protected boolean onAccessDenied(ServletRequest request, ServletResponse respons /** * Processes requests where the subject was denied access as determined by the - * {@link #isAccessAllowed(javax.servlet.ServletRequest, javax.servlet.ServletResponse, Object) isAccessAllowed} + * {@link #isAccessAllowed(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, Object) isAccessAllowed} * method. * * @param request the incoming ServletRequest @@ -154,9 +154,9 @@ protected boolean onAccessDenied(ServletRequest request, ServletResponse respons * {@link #onAccessDenied(ServletRequest, ServletResponse, Object) onAccessDenied(Request,Response,Object)}. * * @return true if - * {@link #isAccessAllowed(javax.servlet.ServletRequest, javax.servlet.ServletResponse, Object) isAccessAllowed}, + * {@link #isAccessAllowed(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, Object) isAccessAllowed}, * otherwise returns the result of - * {@link #onAccessDenied(javax.servlet.ServletRequest, javax.servlet.ServletResponse) onAccessDenied}. + * {@link #onAccessDenied(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) onAccessDenied}. * @throws Exception if an error occurs. */ public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { @@ -182,7 +182,7 @@ protected boolean isLoginRequest(ServletRequest request, ServletResponse respons /** * Convenience method for subclasses to use when a login redirect is required. *

    - * This implementation simply calls {@link #saveRequest(javax.servlet.ServletRequest) saveRequest(request)} + * This implementation simply calls {@link #saveRequest(jakarta.servlet.ServletRequest) saveRequest(request)} * and then {@link #redirectToLogin(ServletRequest, ServletResponse) redirectToLogin(request,response)}. * * @param request the incoming ServletRequest @@ -196,12 +196,12 @@ protected void saveRequestAndRedirectToLogin(ServletRequest request, ServletResp /** * Convenience method merely delegates to - * {@link WebUtils#saveRequest(javax.servlet.ServletRequest) WebUtils.saveRequest(request)} to save the request + * {@link WebUtils#saveRequest(jakarta.servlet.ServletRequest) WebUtils.saveRequest(request)} to save the request * state for reuse later. This is mostly used to retain user request state when a redirect is issued to * return the user to their originally requested url/resource. *

    * If you need to save and then immediately redirect the user to login, consider using - * {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse) + * {@link #saveRequestAndRedirectToLogin(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) * saveRequestAndRedirectToLogin(request,response)} directly. * * @param request the incoming ServletRequest to save for re-use later (for example, after a redirect). @@ -216,7 +216,7 @@ protected void saveRequest(ServletRequest request) { *

    * N.B. If you want to issue a redirect with the intention of allowing the user to then return to their * originally requested URL, don't use this method directly. Instead you should call - * {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse) + * {@link #saveRequestAndRedirectToLogin(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) * saveRequestAndRedirectToLogin(request,response)}, which will save the current request state so that it can * be reconstructed and re-used after a successful login. * diff --git a/web/src/main/java/org/apache/shiro/web/filter/InvalidRequestFilter.java b/web/src/main/java/org/apache/shiro/web/filter/InvalidRequestFilter.java index e29bd3eb62..c903074522 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/InvalidRequestFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/InvalidRequestFilter.java @@ -22,10 +22,10 @@ import org.apache.shiro.lang.util.StringUtils; import org.apache.shiro.web.util.WebUtils; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.Collections; import java.util.List; diff --git a/web/src/main/java/org/apache/shiro/web/filter/PathConfigProcessor.java b/web/src/main/java/org/apache/shiro/web/filter/PathConfigProcessor.java index aa5be8169b..34fd240297 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/PathConfigProcessor.java +++ b/web/src/main/java/org/apache/shiro/web/filter/PathConfigProcessor.java @@ -18,7 +18,7 @@ */ package org.apache.shiro.web.filter; -import javax.servlet.Filter; +import jakarta.servlet.Filter; /** * A PathConfigProcessor processes configuration entries on a per path (url) basis. diff --git a/web/src/main/java/org/apache/shiro/web/filter/PathMatchingFilter.java b/web/src/main/java/org/apache/shiro/web/filter/PathMatchingFilter.java index 4ac41845c7..6bcdfeac8c 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/PathMatchingFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/PathMatchingFilter.java @@ -26,9 +26,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.util.LinkedHashMap; import java.util.Map; @@ -95,7 +95,7 @@ public Filter processPathConfig(String path, String config) { * Returns the context path within the application based on the specified request. *

    * This implementation merely delegates to - * {@link WebUtils#getPathWithinApplication(javax.servlet.http.HttpServletRequest) + * {@link WebUtils#getPathWithinApplication(jakarta.servlet.http.HttpServletRequest) * WebUtils.getPathWithinApplication(request)}, * but can be overridden by subclasses for custom logic. * @@ -165,15 +165,15 @@ protected boolean pathsMatch(String pattern, String path) { /** * Implementation that handles path-matching behavior before a request is evaluated. If the path matches and * the filter - * {@link #isEnabled(javax.servlet.ServletRequest, javax.servlet.ServletResponse, String, Object) isEnabled} for + * {@link #isEnabled(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, String, Object) isEnabled} for * that path/config, the request will be allowed through via the result from - * {@link #onPreHandle(javax.servlet.ServletRequest, javax.servlet.ServletResponse, Object) onPreHandle}. If the + * {@link #onPreHandle(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, Object) onPreHandle}. If the * path does not match or the filter is not enabled for that path, this filter will allow passthrough immediately * to allow the {@code FilterChain} to continue executing. *

    * In order to retain path-matching functionality, subclasses should not override this method if at all * possible, and instead override - * {@link #onPreHandle(javax.servlet.ServletRequest, javax.servlet.ServletResponse, Object) onPreHandle} instead. + * {@link #onPreHandle(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, Object) onPreHandle} instead. * * @param request the incoming ServletRequest * @param response the outgoing ServletResponse @@ -246,7 +246,7 @@ private boolean isFilterChainContinued(ServletRequest request, ServletResponse r * @return {@code true} if the request should be able to continue, {@code false} if the filter will * handle the response directly. * @throws Exception if an error occurs - * @see #isEnabled(javax.servlet.ServletRequest, javax.servlet.ServletResponse, String, Object) + * @see #isEnabled(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, String, Object) */ protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { return true; @@ -255,12 +255,12 @@ protected boolean onPreHandle(ServletRequest request, ServletResponse response, @SuppressWarnings("UnusedParameters") /** * Path-matching version of the parent class's - * {@link #isEnabled(javax.servlet.ServletRequest, javax.servlet.ServletResponse)} method, but additionally allows + * {@link #isEnabled(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse)} method, but additionally allows * for inspection of any path-specific configuration values corresponding to the specified request. Subclasses * may wish to inspect this additional mapped configuration to determine if the filter is enabled or not. *

    * This method's default implementation ignores the {@code path} and {@code mappedValue} arguments and merely - * returns the value from a call to {@link #isEnabled(javax.servlet.ServletRequest, javax.servlet.ServletResponse)}. + * returns the value from a call to {@link #isEnabled(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse)}. * It is expected that subclasses override this method if they need to perform enable/disable logic for a specific * request based on any path-specific config for the filter instance. * diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/AnonymousFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/AnonymousFilter.java index 419a878d12..b7ff097ab7 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/AnonymousFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/AnonymousFilter.java @@ -20,8 +20,8 @@ import org.apache.shiro.web.filter.PathMatchingFilter; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * Filter that allows access to a path immediately without performing security checks of any kind. diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/AuthenticatingFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/AuthenticatingFilter.java index a56a76367b..b69871d471 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/AuthenticatingFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/AuthenticatingFilter.java @@ -24,9 +24,9 @@ import org.apache.shiro.authz.UnauthenticatedException; import org.apache.shiro.subject.Subject; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; import java.util.Arrays; diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/AuthenticationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/AuthenticationFilter.java index 33b1d46723..20a79fc2f9 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/AuthenticationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/AuthenticationFilter.java @@ -22,8 +22,8 @@ import org.apache.shiro.web.filter.AccessControlFilter; import org.apache.shiro.web.util.WebUtils; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * Base class for all Filters that require the current user to be authenticated. This class encapsulates the @@ -69,7 +69,7 @@ public void setSuccessUrl(String successUrl) { /** * Determines whether the current subject is authenticated. *

    - * The default implementation {@link #getSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) acquires} + * The default implementation {@link #getSubject(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) acquires} * the currently executing Subject and then returns * {@link org.apache.shiro.subject.Subject#isAuthenticated() subject.isAuthenticated()}; * diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/BasicHttpAuthenticationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/BasicHttpAuthenticationFilter.java index d9243817fa..97b1a2c3ab 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/BasicHttpAuthenticationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/BasicHttpAuthenticationFilter.java @@ -23,9 +23,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; /** @@ -48,7 +48,7 @@ *

  • The client then sends another request for the same resource with the following header:
    *

    Authorization: Basic Base64_encoded_username_and_password

  • * - * The {@link #onAccessDenied(javax.servlet.ServletRequest, javax.servlet.ServletResponse)} method will + * The {@link #onAccessDenied(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse)} method will * only be called if the subject making the request is not * {@link org.apache.shiro.subject.Subject#isAuthenticated() authenticated} * @@ -74,10 +74,11 @@ public BasicHttpAuthenticationFilter() { *

    * This implementation: *

    1. acquires the username and password based on the request's - * {@link #getAuthzHeader(javax.servlet.ServletRequest) authorization header} via the - * {@link #getPrincipalsAndCredentials(String, javax.servlet.ServletRequest) getPrincipalsAndCredentials} method
    2. + * {@link #getAuthzHeader(jakarta.servlet.ServletRequest) authorization header} via the + * {@link #getPrincipalsAndCredentials(String, jakarta.servlet.ServletRequest) getPrincipalsAndCredentials} method *
    3. The return value of that method is converted to an AuthenticationToken via the - * {@link #createToken(String, String, javax.servlet.ServletRequest, javax.servlet.ServletResponse) createToken} method
    4. + * {@link #createToken(String, String, jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) createToken} + * method *
    5. The created AuthenticationToken is returned.
    6. *
    * @@ -121,7 +122,7 @@ protected AuthenticationToken createToken(ServletRequest request, ServletRespons * return decoded.split(":"); * * @param scheme the {@link #getAuthcScheme() authcScheme} found in the request - * {@link #getAuthzHeader(javax.servlet.ServletRequest) authzHeader}. It is ignored by this implementation, + * {@link #getAuthzHeader(jakarta.servlet.ServletRequest) authzHeader}. It is ignored by this implementation, * but available to overriding implementations should they find it useful. * @param encoded the Base64-encoded username:password value found after the scheme in the header * @return the username (index 0)/password (index 1) pair obtained from the encoded header data. diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/BearerHttpAuthenticationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/BearerHttpAuthenticationFilter.java index 075ce524c1..9229b294b9 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/BearerHttpAuthenticationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/BearerHttpAuthenticationFilter.java @@ -23,8 +23,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/FormAuthenticationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/FormAuthenticationFilter.java index ff2584ef38..d33804ba3e 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/FormAuthenticationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/FormAuthenticationFilter.java @@ -26,9 +26,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; /** * Requires the requesting user to be authenticated for the request to continue, and if they are not, forces the user @@ -39,7 +39,7 @@ * and {@link #setRememberMeParam(String) rememberMe} request parameters. It then calls * {@link Subject#login(AuthenticationToken) Subject.login(usernamePasswordToken)}, * effectively automatically performing a login attempt. Note that the login attempt will only occur when the - * {@link #isLoginSubmission(javax.servlet.ServletRequest, javax.servlet.ServletResponse) isLoginSubmission(request,response)} + * {@link #isLoginSubmission(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) isLoginSubmission(request,response)} * is true, which by default occurs when the request is for the {@link #setLoginUrl(String) loginUrl} and * is a POST request. *

    diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/HttpAuthenticationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/HttpAuthenticationFilter.java index 636744a322..84a151c9fb 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/HttpAuthenticationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/HttpAuthenticationFilter.java @@ -23,10 +23,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.HashSet; import java.util.Locale; import java.util.Set; diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/LogoutFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/LogoutFilter.java index 46bc9a05b4..f825850bb8 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/LogoutFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/LogoutFilter.java @@ -26,15 +26,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.util.Locale; /** * Simple Filter that, upon receiving a request, will immediately log-out the currently executing - * {@link #getSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) subject} + * {@link #getSubject(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) subject} * and then redirect them to a configured {@link #getRedirectUrl() redirectUrl}. * * @since 1.2 @@ -62,7 +62,8 @@ public class LogoutFilter extends AdviceFilter { private boolean postOnlyLogout; /** - * Acquires the currently executing {@link #getSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) subject}, + * Acquires the currently executing + * {@link #getSubject(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) subject}, * a potentially Subject or request-specific * {@link #getRedirectUrl(ServletRequest, ServletResponse, org.apache.shiro.subject.Subject) redirectUrl}, * and redirects the end-user to that redirect url. @@ -112,7 +113,7 @@ protected Subject getSubject(ServletRequest request, ServletResponse response) { /** * Issues an HTTP redirect to the specified URL after subject logout. This implementation simply calls - * {@code WebUtils.}{@link WebUtils#issueRedirect(javax.servlet.ServletRequest, javax.servlet.ServletResponse, String) + * {@code WebUtils.}{@link WebUtils#issueRedirect(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, String) * issueRedirect(request,response,redirectUrl)}. * * @param request the incoming Servlet request diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/PassThruAuthenticationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/PassThruAuthenticationFilter.java index 6aa9ea2bee..520b6c661f 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/PassThruAuthenticationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/PassThruAuthenticationFilter.java @@ -20,8 +20,8 @@ import org.apache.shiro.subject.Subject; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * An authentication filter that redirects the user to the login page when they are trying to access diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/UserFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authc/UserFilter.java index 1c31fd1987..0f75d95483 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/UserFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/UserFilter.java @@ -21,8 +21,8 @@ import org.apache.shiro.subject.Subject; import org.apache.shiro.web.filter.AccessControlFilter; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * Filter that allows access to resources if the accessor is a known user, which is defined as @@ -37,13 +37,13 @@ public class UserFilter extends AccessControlFilter { /** * Returns true if the request is a - * {@link #isLoginRequest(javax.servlet.ServletRequest, javax.servlet.ServletResponse) loginRequest} or - * if the current {@link #getSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) subject} + * {@link #isLoginRequest(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) loginRequest} or + * if the current {@link #getSubject(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) subject} * is not null, false otherwise. * * @return true if the request is a - * {@link #isLoginRequest(javax.servlet.ServletRequest, javax.servlet.ServletResponse) loginRequest} or - * if the current {@link #getSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) subject} + * {@link #isLoginRequest(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) loginRequest} or + * if the current {@link #getSubject(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) subject} * is not null, false otherwise. */ protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { diff --git a/web/src/main/java/org/apache/shiro/web/filter/authc/package-info.java b/web/src/main/java/org/apache/shiro/web/filter/authc/package-info.java index f94395d6b5..f10f33ef01 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authc/package-info.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authc/package-info.java @@ -17,7 +17,7 @@ * under the License. */ /** - * Servlet {@link javax.servlet.Filter Filter} implementations specific to controlling access based on a + * Servlet {@link jakarta.servlet.Filter Filter} implementations specific to controlling access based on a * subject's authentication status, or those that can execute authentications (log-ins) directly. */ package org.apache.shiro.web.filter.authc; diff --git a/web/src/main/java/org/apache/shiro/web/filter/authz/AuthorizationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authz/AuthorizationFilter.java index 4253594c1e..d59b15b7e7 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authz/AuthorizationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authz/AuthorizationFilter.java @@ -23,17 +23,17 @@ import org.apache.shiro.web.filter.AccessControlFilter; import org.apache.shiro.web.util.WebUtils; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** * Superclass for authorization-related filters. If an request is unauthorized, response handling is delegated to the - * {@link #onAccessDenied(javax.servlet.ServletRequest, javax.servlet.ServletResponse) onAccessDenied} method, which + * {@link #onAccessDenied(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) onAccessDenied} method, which * provides reasonable handling for most applications. * - * @see #onAccessDenied(javax.servlet.ServletRequest, javax.servlet.ServletResponse) + * @see #onAccessDenied(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) * @since 0.9 */ public abstract class AuthorizationFilter extends AccessControlFilter { @@ -83,7 +83,7 @@ public void setUnauthorizedUrl(String unauthorizedUrl) { *

      *
    • If the {@code Subject} is unknown[1]: *
      1. The incoming request will be saved and they will be redirected to the login page for authentication - * (via the {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse)} + * (via the {@link #saveRequestAndRedirectToLogin(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse)} * method).
      2. *
      3. Once successfully authenticated, they will be redirected back to the originally attempted page.
      *
    • diff --git a/web/src/main/java/org/apache/shiro/web/filter/authz/HostFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authz/HostFilter.java index 719117b37d..17f1abbf24 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authz/HostFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authz/HostFilter.java @@ -20,8 +20,8 @@ import org.apache.shiro.lang.util.StringUtils; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.util.regex.Pattern; import java.util.Map; diff --git a/web/src/main/java/org/apache/shiro/web/filter/authz/HttpMethodPermissionFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authz/HttpMethodPermissionFilter.java index 0ba3b095f2..82a2e28cfe 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authz/HttpMethodPermissionFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authz/HttpMethodPermissionFilter.java @@ -22,9 +22,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -169,7 +169,7 @@ protected Map getHttpMethodActions() { * Determines the action (verb) attempting to be performed on the filtered resource by the current request. *

      * This implementation expects the incoming request to be an {@link HttpServletRequest} and returns a mapped - * action based on the HTTP request {@link javax.servlet.http.HttpServletRequest#getMethod() method}. + * action based on the HTTP request {@link jakarta.servlet.http.HttpServletRequest#getMethod() method}. * * @param request to pull the method from. * @return The string equivalent verb of the http method. @@ -232,7 +232,7 @@ protected String[] buildPermissions(HttpServletRequest request, String[] configu * * per {@link org.apache.shiro.authz.permission.WildcardPermission WildcardPermission} conventions. Subclasses * are of course free to override this method or the - * {@link #buildPermissions(javax.servlet.http.HttpServletRequest, String[], String) buildPermissions} request + * {@link #buildPermissions(jakarta.servlet.http.HttpServletRequest, String[], String) buildPermissions} request * variant for custom building logic or with different permission formats. * * @param configuredPerms list of configuredPerms to be converted. diff --git a/web/src/main/java/org/apache/shiro/web/filter/authz/IpFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authz/IpFilter.java index 98acf783b3..6c80d117bb 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authz/IpFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authz/IpFilter.java @@ -20,8 +20,8 @@ import org.apache.shiro.lang.util.StringUtils; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.util.ArrayList; import java.util.Collections; diff --git a/web/src/main/java/org/apache/shiro/web/filter/authz/PermissionsAuthorizationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authz/PermissionsAuthorizationFilter.java index fb703fe412..9912c660d0 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authz/PermissionsAuthorizationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authz/PermissionsAuthorizationFilter.java @@ -19,8 +19,8 @@ package org.apache.shiro.web.filter.authz; import java.io.IOException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.apache.shiro.subject.Subject; diff --git a/web/src/main/java/org/apache/shiro/web/filter/authz/PortFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authz/PortFilter.java index 3425c1c456..a5e708cc87 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authz/PortFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authz/PortFilter.java @@ -22,9 +22,9 @@ import org.apache.shiro.lang.util.StringUtils; import org.apache.shiro.web.util.WebUtils; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; /** diff --git a/web/src/main/java/org/apache/shiro/web/filter/authz/RolesAuthorizationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authz/RolesAuthorizationFilter.java index d0a6196ba9..5aa4444e0d 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authz/RolesAuthorizationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authz/RolesAuthorizationFilter.java @@ -20,8 +20,8 @@ import java.io.IOException; import java.util.Set; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.CollectionUtils; diff --git a/web/src/main/java/org/apache/shiro/web/filter/authz/SslFilter.java b/web/src/main/java/org/apache/shiro/web/filter/authz/SslFilter.java index 3ca3133b36..b47f27851a 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authz/SslFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authz/SslFilter.java @@ -18,14 +18,14 @@ */ package org.apache.shiro.web.filter.authz; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponse; /** * Filter which requires a request to be over SSL. Access is allowed if the request is received on the configured * server {@link #setPort(int) port} and the - * {@code request.}{@link javax.servlet.ServletRequest#isSecure() isSecure()}. If either condition is {@code false}, + * {@code request.}{@link jakarta.servlet.ServletRequest#isSecure() isSecure()}. If either condition is {@code false}, * the filter chain will not continue. *

      * The {@link #getPort() port} property defaults to {@code 443} and also additionally guarantees that the @@ -90,7 +90,7 @@ protected String getScheme(String requestScheme, int port) { /** * Retains the parent method's port-matching behavior but additionally guarantees that the - * {@code ServletRequest.}{@link javax.servlet.ServletRequest#isSecure() isSecure()}. If the port does not match or + * {@code ServletRequest.}{@link jakarta.servlet.ServletRequest#isSecure() isSecure()}. If the port does not match or * the request is not secure, access is denied. * * @param request the incoming {@code ServletRequest} @@ -98,7 +98,7 @@ protected String getScheme(String requestScheme, int port) { * @param mappedValue the filter-specific config value mapped to this filter in the URL rules mappings * - ignored by this implementation. * @return {@code true} if the request is received on an expected SSL port and the - * {@code request.}{@link javax.servlet.ServletRequest#isSecure() isSecure()}, {@code false} otherwise. + * {@code request.}{@link jakarta.servlet.ServletRequest#isSecure() isSecure()}, {@code false} otherwise. * @throws Exception if the call to {@code super.isAccessAllowed} throws an exception. * @since 1.2 */ diff --git a/web/src/main/java/org/apache/shiro/web/filter/authz/package-info.java b/web/src/main/java/org/apache/shiro/web/filter/authz/package-info.java index 580671a038..13630f1306 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/authz/package-info.java +++ b/web/src/main/java/org/apache/shiro/web/filter/authz/package-info.java @@ -17,7 +17,7 @@ * under the License. */ /** - * Servlet {@link javax.servlet.Filter Filter} implementations that perform authorization (access control) + * Servlet {@link jakarta.servlet.Filter Filter} implementations that perform authorization (access control) * checks based on the Subject's abilities (for example, role or permission checks). */ package org.apache.shiro.web.filter.authz; diff --git a/web/src/main/java/org/apache/shiro/web/filter/mgt/DefaultFilter.java b/web/src/main/java/org/apache/shiro/web/filter/mgt/DefaultFilter.java index 5c5d5991a3..267dbf8638 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/mgt/DefaultFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/mgt/DefaultFilter.java @@ -34,9 +34,9 @@ import org.apache.shiro.web.filter.authz.SslFilter; import org.apache.shiro.web.filter.session.NoSessionCreationFilter; -import javax.servlet.Filter; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; import java.util.LinkedHashMap; import java.util.Map; diff --git a/web/src/main/java/org/apache/shiro/web/filter/mgt/DefaultFilterChainManager.java b/web/src/main/java/org/apache/shiro/web/filter/mgt/DefaultFilterChainManager.java index 59893db959..cdc16e2066 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/mgt/DefaultFilterChainManager.java +++ b/web/src/main/java/org/apache/shiro/web/filter/mgt/DefaultFilterChainManager.java @@ -26,10 +26,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -274,8 +274,8 @@ protected String[] toNameConfigPair(String token) throws ConfigurationException protected void addFilter(String name, Filter filter, boolean init, boolean overwrite) { Filter existing = getFilter(name); if (existing == null || overwrite) { - if (filter instanceof Nameable) { - ((Nameable) filter).setName(name); + if (filter instanceof Nameable nameable) { + nameable.setName(name); } if (init) { initFilter(filter); @@ -325,8 +325,8 @@ protected void applyChainConfig(String chainName, Filter filter, String chainSpe LOGGER.debug("Attempting to apply path [" + chainName + "] to filter [" + filter + "] " + "with config [" + chainSpecificFilterConfig + "]"); } - if (filter instanceof PathConfigProcessor) { - ((PathConfigProcessor) filter).processPathConfig(chainName, chainSpecificFilterConfig); + if (filter instanceof PathConfigProcessor processor) { + processor.processPathConfig(chainName, chainSpecificFilterConfig); } else { if (StringUtils.hasText(chainSpecificFilterConfig)) { //they specified a filter configuration, but the Filter doesn't implement PathConfigProcessor diff --git a/web/src/main/java/org/apache/shiro/web/filter/mgt/FilterChainManager.java b/web/src/main/java/org/apache/shiro/web/filter/mgt/FilterChainManager.java index d3d740b955..4d72ed84e4 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/mgt/FilterChainManager.java +++ b/web/src/main/java/org/apache/shiro/web/filter/mgt/FilterChainManager.java @@ -21,8 +21,8 @@ import org.apache.shiro.config.ConfigurationException; import org.apache.shiro.util.AntPathMatcher; -import javax.servlet.Filter; -import javax.servlet.FilterChain; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; import java.util.List; import java.util.Map; import java.util.Set; @@ -85,7 +85,7 @@ public interface FilterChainManager { * {@link #addToChain(String, String, String) creating filter chains}. *

      * Calling this method is effectively the same as calling - * {@link #addFilter(String, javax.servlet.Filter, boolean) addFilter}(name, filter, false); + * {@link #addFilter(String, jakarta.servlet.Filter, boolean) addFilter}(name, filter, false); * * @param name the name to assign to the filter, used to reference the filter in chain definitions * @param filter the filter to initialize and then add to the pool of available filters that can be used @@ -99,7 +99,7 @@ public interface FilterChainManager { * @param name the name to assign to the filter, used to reference the filter in chain definitions * @param filter the filter to assign to the filter pool * @param init whether or not the {@code Filter} should be - * {@link Filter#init(javax.servlet.FilterConfig) initialized} first before being added to the pool. + * {@link Filter#init(jakarta.servlet.FilterConfig) initialized} first before being added to the pool. */ void addFilter(String name, Filter filter, boolean init); @@ -121,7 +121,7 @@ public interface FilterChainManager { * where *

        *
      1. {@code filterN} is the name of a filter previously - * {@link #addFilter(String, javax.servlet.Filter) registered} with the manager, and
      2. + * {@link #addFilter(String, jakarta.servlet.Filter) registered} with the manager, and *
      3. {@code [optional_configN]} is an optional bracketed string that has meaning for that particular filter for * this particular chain
      4. *
      @@ -182,7 +182,7 @@ public interface FilterChainManager { * * @param chainName the name of the chain where the filter will be appended. * @param filterName the name of the {@link #addFilter registered} filter to add to the chain. - * @throws IllegalArgumentException if there is not a {@link #addFilter(String, javax.servlet.Filter) registered} + * @throws IllegalArgumentException if there is not a {@link #addFilter(String, jakarta.servlet.Filter) registered} * filter under the given {@code filterName} */ void addToChain(String chainName, String filterName); @@ -199,7 +199,7 @@ public interface FilterChainManager { * @param filterName the name of the {@link #addFilter registered} filter to add to the chain. * @param chainSpecificFilterConfig the filter-specific configuration that should be applied for only the specified * filter chain. - * @throws IllegalArgumentException if there is not a {@link #addFilter(String, javax.servlet.Filter) registered} + * @throws IllegalArgumentException if there is not a {@link #addFilter(String, jakarta.servlet.Filter) registered} * filter under the given {@code filterName} * @throws ConfigurationException if the filter is not capable of accepting {@code chainSpecificFilterConfig} * (usually such filters implement the diff --git a/web/src/main/java/org/apache/shiro/web/filter/mgt/FilterChainResolver.java b/web/src/main/java/org/apache/shiro/web/filter/mgt/FilterChainResolver.java index b53e59c1f2..9b465418fe 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/mgt/FilterChainResolver.java +++ b/web/src/main/java/org/apache/shiro/web/filter/mgt/FilterChainResolver.java @@ -18,9 +18,9 @@ */ package org.apache.shiro.web.filter.mgt; -import javax.servlet.FilterChain; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * A {@code FilterChainResolver} can resolve an appropriate {@link FilterChain} to execute during a @@ -40,7 +40,7 @@ public interface FilterChainResolver { * Returns the filter chain that should be executed for the given request, or {@code null} if the * original chain should be used. *

      - * This method allows a implementation to define arbitrary security {@link javax.servlet.Filter Filter} + * This method allows a implementation to define arbitrary security {@link jakarta.servlet.Filter Filter} * chains for any given request or URL pattern. * * @param request the incoming ServletRequest diff --git a/web/src/main/java/org/apache/shiro/web/filter/mgt/NamedFilterList.java b/web/src/main/java/org/apache/shiro/web/filter/mgt/NamedFilterList.java index e13096bb0a..3296fb52aa 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/mgt/NamedFilterList.java +++ b/web/src/main/java/org/apache/shiro/web/filter/mgt/NamedFilterList.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.filter.mgt; -import javax.servlet.Filter; -import javax.servlet.FilterChain; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; import java.util.List; /** diff --git a/web/src/main/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolver.java b/web/src/main/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolver.java index 052ccaa507..f3c95a0974 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolver.java +++ b/web/src/main/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolver.java @@ -25,10 +25,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * A {@code FilterChainResolver} that resolves {@link FilterChain}s based on url path @@ -158,7 +158,7 @@ protected boolean pathMatches(String pattern, String path) { /** * Merely returns - * WebUtils.{@link org.apache.shiro.web.util.WebUtils#getPathWithinApplication(javax.servlet.http.HttpServletRequest) + * WebUtils.{@link org.apache.shiro.web.util.WebUtils#getPathWithinApplication(jakarta.servlet.http.HttpServletRequest) * getPathWithinApplication(request)} * and can be overridden by subclasses for custom request-to-application-path resolution behavior. * diff --git a/web/src/main/java/org/apache/shiro/web/filter/mgt/SimpleNamedFilterList.java b/web/src/main/java/org/apache/shiro/web/filter/mgt/SimpleNamedFilterList.java index 7592f96589..bcfb2e0636 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/mgt/SimpleNamedFilterList.java +++ b/web/src/main/java/org/apache/shiro/web/filter/mgt/SimpleNamedFilterList.java @@ -21,8 +21,8 @@ import org.apache.shiro.lang.util.StringUtils; import org.apache.shiro.web.servlet.ProxiedFilterChain; -import javax.servlet.Filter; -import javax.servlet.FilterChain; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; diff --git a/web/src/main/java/org/apache/shiro/web/filter/package-info.java b/web/src/main/java/org/apache/shiro/web/filter/package-info.java index 47e713446e..447441d65a 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/package-info.java +++ b/web/src/main/java/org/apache/shiro/web/filter/package-info.java @@ -17,7 +17,7 @@ * under the License. */ /** - * Base package supporting all Servlet {@link javax.servlet.Filter Filter} implementations used to control + * Base package supporting all Servlet {@link jakarta.servlet.Filter Filter} implementations used to control * access to web pages and URL resources. */ package org.apache.shiro.web.filter; diff --git a/web/src/main/java/org/apache/shiro/web/filter/session/NoSessionCreationFilter.java b/web/src/main/java/org/apache/shiro/web/filter/session/NoSessionCreationFilter.java index 086804aa24..7d50190c8b 100644 --- a/web/src/main/java/org/apache/shiro/web/filter/session/NoSessionCreationFilter.java +++ b/web/src/main/java/org/apache/shiro/web/filter/session/NoSessionCreationFilter.java @@ -21,8 +21,8 @@ import org.apache.shiro.subject.support.DefaultSubjectContext; import org.apache.shiro.web.filter.PathMatchingFilter; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * A {@code PathMatchingFilter} that will disable creating new Sessions during the request. This is a useful diff --git a/web/src/main/java/org/apache/shiro/web/mgt/CookieRememberMeManager.java b/web/src/main/java/org/apache/shiro/web/mgt/CookieRememberMeManager.java index f44d1ae2cd..6695c89d56 100644 --- a/web/src/main/java/org/apache/shiro/web/mgt/CookieRememberMeManager.java +++ b/web/src/main/java/org/apache/shiro/web/mgt/CookieRememberMeManager.java @@ -33,9 +33,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** diff --git a/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSecurityManager.java b/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSecurityManager.java index 02b515c9a8..457175dd5a 100644 --- a/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSecurityManager.java +++ b/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSecurityManager.java @@ -42,8 +42,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.Serializable; import java.util.Collection; import java.util.function.Supplier; @@ -127,18 +127,18 @@ protected void afterSessionManagerSet() { //since 1.2.1 for fixing SHIRO-350: private void applySessionManagerToSessionStorageEvaluatorIfPossible() { SubjectDAO subjectDAO = getSubjectDAO(); - if (subjectDAO instanceof DefaultSubjectDAO) { - SessionStorageEvaluator evaluator = ((DefaultSubjectDAO) subjectDAO).getSessionStorageEvaluator(); - if (evaluator instanceof DefaultWebSessionStorageEvaluator) { - ((DefaultWebSessionStorageEvaluator) evaluator).setSessionManager(getSessionManager()); + if (subjectDAO instanceof DefaultSubjectDAO aO) { + SessionStorageEvaluator evaluator = aO.getSessionStorageEvaluator(); + if (evaluator instanceof DefaultWebSessionStorageEvaluator storageEvaluator) { + storageEvaluator.setSessionManager(getSessionManager()); } } } @Override protected SubjectContext copy(SubjectContext subjectContext) { - if (subjectContext instanceof WebSubjectContext) { - return new DefaultWebSubjectContext((WebSubjectContext) subjectContext); + if (subjectContext instanceof WebSubjectContext context) { + return new DefaultWebSubjectContext(context); } return super.copy(subjectContext); } @@ -206,7 +206,7 @@ private void setInternalSessionManager(SessionManager sessionManager) { */ public boolean isHttpSessionMode() { SessionManager sessionManager = getSessionManager(); - return sessionManager instanceof WebSessionManager && ((WebSessionManager) sessionManager).isServletContainerSessions(); + return sessionManager instanceof WebSessionManager wsm && wsm.isServletContainerSessions(); } protected SessionManager createSessionManager(String sessionMode) { @@ -222,8 +222,7 @@ protected SessionManager createSessionManager(String sessionMode) { @Override protected SessionContext createSessionContext(SubjectContext subjectContext) { SessionContext sessionContext = super.createSessionContext(subjectContext); - if (subjectContext instanceof WebSubjectContext) { - WebSubjectContext wsc = (WebSubjectContext) subjectContext; + if (subjectContext instanceof WebSubjectContext wsc) { ServletRequest request = wsc.resolveServletRequest(); ServletResponse response = wsc.resolveServletResponse(); DefaultWebSessionContext webSessionContext = new DefaultWebSessionContext(sessionContext); @@ -259,8 +258,7 @@ protected void beforeLogout(Subject subject) { } protected void removeRequestIdentity(Subject subject) { - if (subject instanceof WebSubject) { - WebSubject webSubject = (WebSubject) subject; + if (subject instanceof WebSubject webSubject) { ServletRequest request = webSubject.getServletRequest(); if (request != null) { request.setAttribute(ShiroHttpServletRequest.IDENTITY_REMOVED_KEY, Boolean.TRUE); diff --git a/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSessionStorageEvaluator.java b/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSessionStorageEvaluator.java index 367179fb93..4be330900b 100644 --- a/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSessionStorageEvaluator.java +++ b/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSessionStorageEvaluator.java @@ -33,7 +33,7 @@ * This implementation usually works in conjunction with the * {@link org.apache.shiro.web.filter.session.NoSessionCreationFilter}: If the {@code NoSessionCreationFilter} * is configured in a filter chain, that filter will set a specific - * {@code ServletRequest} {@link javax.servlet.ServletRequest#setAttribute attribute} indicating that session creation + * {@code ServletRequest} {@link jakarta.servlet.ServletRequest#setAttribute attribute} indicating that session creation * should be disabled. *

      * This {@code DefaultWebSessionStorageEvaluator} will then inspect this attribute, and if it has been set, will return diff --git a/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSubjectFactory.java b/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSubjectFactory.java index ae4553d3d6..347b1f6643 100644 --- a/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSubjectFactory.java +++ b/web/src/main/java/org/apache/shiro/web/mgt/DefaultWebSubjectFactory.java @@ -27,8 +27,8 @@ import org.apache.shiro.web.subject.WebSubjectContext; import org.apache.shiro.web.subject.support.WebDelegatingSubject; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import org.apache.shiro.web.subject.WebSubject; diff --git a/web/src/main/java/org/apache/shiro/web/servlet/AbstractFilter.java b/web/src/main/java/org/apache/shiro/web/servlet/AbstractFilter.java index 77e9797007..61e26ff397 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/AbstractFilter.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/AbstractFilter.java @@ -22,15 +22,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; /** * Base abstract Filter simplifying Filter initialization and {@link #getInitParam(String) access} to init parameters. * Subclass initialization logic should be performed by overriding the {@link #onFilterConfigSet()} template method. * FilterChain execution logic (the - * {@link #doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)} method + * {@link #doFilter(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, jakarta.servlet.FilterChain)} method * is left to subclasses. * * @since 1.0 @@ -46,7 +46,7 @@ public abstract class AbstractFilter extends ServletContextSupport implements Fi /** * Returns the servlet container specified {@code FilterConfig} instance provided at - * {@link #init(javax.servlet.FilterConfig) startup}. + * {@link #init(jakarta.servlet.FilterConfig) startup}. * * @return the servlet container specified {@code FilterConfig} instance provided at start-up. */ @@ -89,15 +89,15 @@ protected String getInitParam(String paramName) { * {@link #onFilterConfigSet() onFilterConfigSet()} to trigger any processing a subclass might wish to perform. * * @param filterConfig the servlet container supplied FilterConfig instance. - * @throws javax.servlet.ServletException if {@link #onFilterConfigSet() onFilterConfigSet()} throws an Exception. + * @throws jakarta.servlet.ServletException if {@link #onFilterConfigSet() onFilterConfigSet()} throws an Exception. */ public final void init(FilterConfig filterConfig) throws ServletException { setFilterConfig(filterConfig); try { onFilterConfigSet(); } catch (Exception e) { - if (e instanceof ServletException) { - throw (ServletException) e; + if (e instanceof ServletException exception) { + throw exception; } else { if (LOGGER.isErrorEnabled()) { LOGGER.error("Unable to start Filter: [" + e.getMessage() + "].", e); diff --git a/web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java b/web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java index 0b1304347c..aee3d71e16 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java @@ -30,12 +30,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.concurrent.Callable; @@ -230,7 +230,7 @@ protected ServletRequest wrapServletRequest(HttpServletRequest orig) { * processing. *

      * If the {@code ServletRequest} is an instance of {@link HttpServletRequest}, the value returned from this method - * is obtained by calling {@link #wrapServletRequest(javax.servlet.http.HttpServletRequest)} to allow Shiro-specific + * is obtained by calling {@link #wrapServletRequest(jakarta.servlet.http.HttpServletRequest)} to allow Shiro-specific * HTTP behavior, otherwise the original {@code ServletRequest} argument is returned. * * @param request the incoming ServletRequest @@ -242,8 +242,7 @@ protected ServletRequest wrapServletRequest(HttpServletRequest orig) { @SuppressWarnings({"UnusedDeclaration"}) protected ServletRequest prepareServletRequest(ServletRequest request, ServletResponse response, FilterChain chain) { ServletRequest toUse = request; - if (request instanceof HttpServletRequest) { - HttpServletRequest http = (HttpServletRequest) request; + if (request instanceof HttpServletRequest http) { toUse = wrapServletRequest(http); } return toUse; @@ -267,7 +266,7 @@ protected ServletResponse wrapServletResponse(HttpServletResponse orig, ShiroHtt * Prepares the {@code ServletResponse} instance that will be passed to the {@code FilterChain} for request * processing. *

      - * This implementation delegates to {@link #wrapServletRequest(javax.servlet.http.HttpServletRequest)} + * This implementation delegates to {@link #wrapServletRequest(jakarta.servlet.http.HttpServletRequest)} * only if Shiro-based sessions are enabled (that is, !{@link #isHttpSessions()}) and the request instance is a * {@link ShiroHttpServletRequest}. This ensures that any URL rewriting that occurs is handled correctly using the * Shiro-managed Session's sessionId and not a servlet container session ID. @@ -284,11 +283,11 @@ protected ServletResponse wrapServletResponse(HttpServletResponse orig, ShiroHtt @SuppressWarnings({"UnusedDeclaration"}) protected ServletResponse prepareServletResponse(ServletRequest request, ServletResponse response, FilterChain chain) { ServletResponse toUse = response; - if (!isHttpSessions() && (request instanceof ShiroHttpServletRequest) - && (response instanceof HttpServletResponse)) { + if (!isHttpSessions() && (request instanceof ShiroHttpServletRequest servletRequest) + && (response instanceof HttpServletResponse servletResponse)) { //the ShiroHttpServletResponse exists to support URL rewriting for session ids. This is only needed if //using Shiro sessions (i.e. not simple HttpSession based sessions): - toUse = wrapServletResponse((HttpServletResponse) response, (ShiroHttpServletRequest) request); + toUse = wrapServletResponse(servletResponse, servletRequest); } return toUse; } @@ -345,11 +344,11 @@ protected void updateSessionLastAccessTime(ServletRequest request, ServletRespon * the incoming {@code ServletRequest} for use during Shiro's processing *

    • {@link #prepareServletResponse(ServletRequest, ServletResponse, FilterChain) Prepares} * the outgoing {@code ServletResponse} for use during Shiro's processing
    • - *
    • {@link #createSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) Creates} a + *
    • {@link #createSubject(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) Creates} a * {@link Subject} instance based on the specified request/response pair.
    • *
    • Finally {@link Subject#execute(Runnable) executes} the - * {@link #updateSessionLastAccessTime(javax.servlet.ServletRequest, javax.servlet.ServletResponse)} and - * {@link #executeChain(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)} + * {@link #updateSessionLastAccessTime(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse)} and + * {@link #executeChain(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, jakarta.servlet.FilterChain)} * methods
    • * *

      @@ -360,7 +359,7 @@ protected void updateSessionLastAccessTime(ServletRequest request, ServletRespon * @param servletResponse the outgoing {@code ServletResponse} * @param chain the container-provided {@code FilterChain} to execute * @throws IOException if an IO error occurs - * @throws javax.servlet.ServletException if a Throwable other than an IOException + * @throws jakarta.servlet.ServletException if a Throwable other than an IOException */ protected void doFilterInternal(ServletRequest servletRequest, ServletResponse servletResponse, final FilterChain chain) throws ServletException, IOException { @@ -385,11 +384,11 @@ protected void doFilterInternal(ServletRequest servletRequest, ServletResponse s } if (t != null) { - if (t instanceof ServletException) { - throw (ServletException) t; + if (t instanceof ServletException exception) { + throw exception; } - if (t instanceof IOException) { - throw (IOException) t; + if (t instanceof IOException exception) { + throw exception; } //otherwise it's not one of the two exceptions expected by the filter method signature - wrap it in one: String msg = "Filtered request failed."; @@ -440,7 +439,8 @@ protected FilterChain getExecutionChain(ServletRequest request, ServletResponse * Executes a {@link FilterChain} for the given request. *

      * This implementation first delegates to - * {@link #getExecutionChain(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) + * + * {@link #getExecutionChain(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, jakarta.servlet.FilterChain) * getExecutionChain} * to allow the application's Shiro configuration to determine exactly how the chain should execute. The resulting * value from that call is then executed directly by calling the returned {@code FilterChain}'s diff --git a/web/src/main/java/org/apache/shiro/web/servlet/AdviceFilter.java b/web/src/main/java/org/apache/shiro/web/servlet/AdviceFilter.java index 0f7e6b509f..3622120680 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/AdviceFilter.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/AdviceFilter.java @@ -21,17 +21,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; /** * A Servlet Filter that enables AOP-style "around" advice for a ServletRequest via - * {@link #preHandle(javax.servlet.ServletRequest, javax.servlet.ServletResponse) preHandle}, - * {@link #postHandle(javax.servlet.ServletRequest, javax.servlet.ServletResponse) postHandle}, - * and {@link #afterCompletion(javax.servlet.ServletRequest, javax.servlet.ServletResponse, Exception) afterCompletion} + * {@link #preHandle(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) preHandle}, + * {@link #postHandle(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) postHandle}, + * and {@link #afterCompletion(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, Exception) afterCompletion} * hooks. * * @since 0.9 @@ -62,7 +62,7 @@ protected boolean preHandle(ServletRequest request, ServletResponse response) th * Allows 'post' advice logic to be called, but only if no exception occurs during filter chain execution. That * is, if {@link #executeChain executeChain} throws an exception, this method will never be called. Be aware of * this when implementing logic. Most resource 'cleanup' behavior is often done in the - * {@link #afterCompletion(javax.servlet.ServletRequest, javax.servlet.ServletResponse, Exception) + * {@link #afterCompletion(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, Exception) * afterCompletion(request,response,exception)} * implementation, which is guaranteed to be called for every request, even when the chain processing throws * an Exception. @@ -111,9 +111,9 @@ protected void executeChain(ServletRequest request, ServletResponse response, Fi /** * Actually implements the chain execution logic, utilizing - * {@link #preHandle(javax.servlet.ServletRequest, javax.servlet.ServletResponse) pre}, - * {@link #postHandle(javax.servlet.ServletRequest, javax.servlet.ServletResponse) post}, and - * {@link #afterCompletion(javax.servlet.ServletRequest, javax.servlet.ServletResponse, Exception) after} + * {@link #preHandle(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) pre}, + * {@link #postHandle(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) post}, and + * {@link #afterCompletion(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, Exception) after} * advice hooks. * * @param request the incoming ServletRequest @@ -152,12 +152,12 @@ public void doFilterInternal(ServletRequest request, ServletResponse response, F /** * Executes cleanup logic in the {@code finally} code block in the - * {@link #doFilterInternal(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) + * {@link #doFilterInternal(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, jakarta.servlet.FilterChain) * doFilterInternal(request, response, filterChain)} * implementation. *

      * This implementation specifically calls - * {@link #afterCompletion(javax.servlet.ServletRequest, javax.servlet.ServletResponse, Exception) afterCompletion} + * {@link #afterCompletion(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, Exception) afterCompletion} * as well as handles any exceptions properly. * * @param request the incoming {@code ServletRequest} @@ -184,10 +184,10 @@ protected void cleanup(ServletRequest request, ServletResponse response, Excepti } } if (exception != null) { - if (exception instanceof ServletException) { - throw (ServletException) exception; - } else if (exception instanceof IOException) { - throw (IOException) exception; + if (exception instanceof ServletException servletException) { + throw servletException; + } else if (exception instanceof IOException oException) { + throw oException; } else { if (LOGGER.isDebugEnabled()) { String msg = "Filter execution resulted in an unexpected Exception " diff --git a/web/src/main/java/org/apache/shiro/web/servlet/Cookie.java b/web/src/main/java/org/apache/shiro/web/servlet/Cookie.java index 8a333e3562..17c710e424 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/Cookie.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/Cookie.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.servlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * Interface representing HTTP cookie operations, supporting pojo-style getters and setters for all diff --git a/web/src/main/java/org/apache/shiro/web/servlet/IniShiroFilter.java b/web/src/main/java/org/apache/shiro/web/servlet/IniShiroFilter.java index 83bd90e179..98082b244c 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/IniShiroFilter.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/IniShiroFilter.java @@ -74,7 +74,7 @@ * </filter> *

    * Unqualified (schemeless or 'non-prefixed') paths are assumed to be {@code ServletContext} resource paths, resolvable - * via {@link javax.servlet.ServletContext#getResourceAsStream(String) ServletContext#getResourceAsStream}. + * via {@link jakarta.servlet.ServletContext#getResourceAsStream(String) ServletContext#getResourceAsStream}. *

    * Non-ServletContext resources may be loaded from qualified locations by specifying prefixes indicating the source, * e.g. {@code file:}, {@code url:}, and {@code classpath:}. See the @@ -337,7 +337,7 @@ protected Ini getServletContextIniResource(String servletContextPath) { *

    * If the path does not have a resource prefix as defined by {@link ResourceUtils#hasResourcePrefix(String)}, the * path is expected to be resolvable by the {@code ServletContext} via - * {@link javax.servlet.ServletContext#getResourceAsStream(String)}. + * {@link jakarta.servlet.ServletContext#getResourceAsStream(String)}. * * @param path the path of the INI resource to load into an INI instance. * @return an INI instance populated based on the given INI resource path. diff --git a/web/src/main/java/org/apache/shiro/web/servlet/NameableFilter.java b/web/src/main/java/org/apache/shiro/web/servlet/NameableFilter.java index c8d503c2e1..daa5548db3 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/NameableFilter.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/NameableFilter.java @@ -20,13 +20,13 @@ import org.apache.shiro.lang.util.Nameable; -import javax.servlet.FilterConfig; +import jakarta.servlet.FilterConfig; /** * Allows a filter to be named via JavaBeans-compatible * {@link #getName()}/{@link #setName(String)} methods. If no name is specified, the name of the filter will * default to the name given to it in {@code web.xml} (the {@code FilterConfig}'s - * {@link javax.servlet.FilterConfig#getFilterName() filterName}). + * {@link jakarta.servlet.FilterConfig#getFilterName() filterName}). * * @since 1.0 */ @@ -46,8 +46,8 @@ public abstract class NameableFilter extends AbstractFilter implements Nameable * this.name = {@link #getFilterConfig() getFilterConfig()}.{@link FilterConfig#getFilterName() getName()}; * * @return the filter name, or {@code null} if none available - * @see javax.servlet.GenericServlet#getServletName() - * @see javax.servlet.FilterConfig#getFilterName() + * @see jakarta.servlet.GenericServlet#getServletName() + * @see jakarta.servlet.FilterConfig#getFilterName() */ protected String getName() { if (this.name == null) { @@ -67,7 +67,7 @@ protected String getName() { * servlet container at start-up: *

          * this.name = {@link #getFilterConfig() getFilterConfig()}.
    -     *     {@link javax.servlet.FilterConfig#getFilterName() getName()};
    + * {@link jakarta.servlet.FilterConfig#getFilterName() getName()}; * * @param name the name of the filter. */ diff --git a/web/src/main/java/org/apache/shiro/web/servlet/OncePerRequestFilter.java b/web/src/main/java/org/apache/shiro/web/servlet/OncePerRequestFilter.java index fadfb4d532..59291f31ee 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/OncePerRequestFilter.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/OncePerRequestFilter.java @@ -21,10 +21,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; /** @@ -36,7 +36,7 @@ * to identify that a request is already filtered. The default implementation * is based on the configured name of the concrete filter instance. *

    Controlling filter execution

    - * 1.2 introduced the {@link #isEnabled(javax.servlet.ServletRequest, javax.servlet.ServletResponse)} method and + * 1.2 introduced the {@link #isEnabled(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse)} method and * {@link #isEnabled()} property to allow explicit control over whether the filter executes (or allows passthrough) * for any given request. *

    @@ -68,7 +68,7 @@ public abstract class OncePerRequestFilter extends NameableFilter { /** * Determines if the filter's once per request functionality is enabled, defaults to false. It is recommended - * to leave this disabled if you are using a {@link javax.servlet.RequestDispatcher RequestDispatcher} to forward + * to leave this disabled if you are using a {@link jakarta.servlet.RequestDispatcher RequestDispatcher} to forward * or include request (JSP tags, programmatically, or via a framework). */ private boolean filterOncePerRequest; @@ -81,7 +81,7 @@ public abstract class OncePerRequestFilter extends NameableFilter { *

    * * This configuration property is for general configuration for any request that comes through * the filter. The - * {@link #isEnabled(javax.servlet.ServletRequest, javax.servlet.ServletResponse) isEnabled(request,response)} + * {@link #isEnabled(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) isEnabled(request,response)} * method actually determines whether or not if the filter is enabled based on the current request. * * @return {@code true} if this filter should generally execute, {@code false} if it should let the @@ -116,7 +116,7 @@ public boolean isFilterOncePerRequest() { /** * Sets whether this filter executes once per request or for every invocation of the filter. It is recommended - * to leave this disabled if you are using a {@link javax.servlet.RequestDispatcher RequestDispatcher} to forward + * to leave this disabled if you are using a {@link jakarta.servlet.RequestDispatcher RequestDispatcher} to forward * or include request (JSP tags, programmatically, or via a framework). * * @param filterOncePerRequest Whether this filter executes once per request. @@ -214,7 +214,7 @@ protected String getAlreadyFilteredAttributeName() { * @param request current HTTP request * @return whether the given request should not be filtered * @throws ServletException in case of errors - * @deprecated in favor of overriding {@link #isEnabled(javax.servlet.ServletRequest, javax.servlet.ServletResponse)} + * @deprecated in favor of overriding {@link #isEnabled(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse)} * for custom behavior. This method will be removed in Shiro 2.0. */ @Deprecated @@ -226,7 +226,7 @@ protected boolean shouldNotFilter(ServletRequest request) throws ServletExceptio /** * Same contract as for - * {@link #doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)}, + * {@link #doFilter(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, jakarta.servlet.FilterChain)}, * but guaranteed to be invoked only once per request. * * @param request incoming {@code ServletRequest} diff --git a/web/src/main/java/org/apache/shiro/web/servlet/ProxiedFilterChain.java b/web/src/main/java/org/apache/shiro/web/servlet/ProxiedFilterChain.java index 15590ee943..237c731d01 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/ProxiedFilterChain.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/ProxiedFilterChain.java @@ -21,11 +21,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; import java.util.List; diff --git a/web/src/main/java/org/apache/shiro/web/servlet/ServletContextSupport.java b/web/src/main/java/org/apache/shiro/web/servlet/ServletContextSupport.java index 652620b98c..e6f09eeaed 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/ServletContextSupport.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/ServletContextSupport.java @@ -18,7 +18,7 @@ */ package org.apache.shiro.web.servlet; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; /** * Base implementation for any components that need to access the web application's {@link ServletContext ServletContext}. diff --git a/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpServletRequest.java b/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpServletRequest.java index 664014f576..521f78fa8e 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpServletRequest.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpServletRequest.java @@ -24,10 +24,10 @@ import org.apache.shiro.subject.support.DisabledSessionException; import org.apache.shiro.web.util.WebUtils; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpSession; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpSession; import java.security.Principal; @@ -77,10 +77,10 @@ public String getRemoteUser() { String remoteUser; Object scPrincipal = getSubjectPrincipal(); if (scPrincipal != null) { - if (scPrincipal instanceof String) { - return (String) scPrincipal; - } else if (scPrincipal instanceof Principal) { - remoteUser = ((Principal) scPrincipal).getName(); + if (scPrincipal instanceof String string) { + return string; + } else if (scPrincipal instanceof Principal principal) { + remoteUser = principal.getName(); } else { remoteUser = scPrincipal.toString(); } @@ -116,8 +116,8 @@ public Principal getUserPrincipal() { Principal userPrincipal; Object scPrincipal = getSubjectPrincipal(); if (scPrincipal != null) { - if (scPrincipal instanceof Principal) { - userPrincipal = (Principal) scPrincipal; + if (scPrincipal instanceof Principal principal) { + userPrincipal = principal; } else { userPrincipal = new ObjectPrincipal(scPrincipal); } @@ -247,8 +247,7 @@ public int hashCode() { } public boolean equals(Object o) { - if (o instanceof ObjectPrincipal) { - ObjectPrincipal op = (ObjectPrincipal) o; + if (o instanceof ObjectPrincipal op) { return getObject().equals(op.getObject()); } return false; diff --git a/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpServletResponse.java b/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpServletResponse.java index 9b16b51a72..e645f7b360 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpServletResponse.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpServletResponse.java @@ -18,11 +18,11 @@ */ package org.apache.shiro.web.servlet; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; -import javax.servlet.http.HttpSession; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.http.HttpSession; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; diff --git a/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpSession.java b/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpSession.java index 3223eb4b0b..463a7adcc1 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpSession.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/ShiroHttpSession.java @@ -22,11 +22,11 @@ import org.apache.shiro.session.Session; import org.apache.shiro.web.session.HttpServletSession; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionBindingListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSessionBindingEvent; +import jakarta.servlet.http.HttpSessionBindingListener; import java.util.Collection; import java.util.Enumeration; import java.util.HashSet; @@ -49,28 +49,6 @@ public class ShiroHttpSession implements HttpSession { */ public static final String DEFAULT_SESSION_ID_NAME = "JSESSIONID"; - private static final Enumeration EMPTY_ENUMERATION = new Enumeration<>() { - public boolean hasMoreElements() { - return false; - } - - public String nextElement() { - return null; - } - }; - - @SuppressWarnings({"deprecation"}) - private static final javax.servlet.http.HttpSessionContext HTTP_SESSION_CONTEXT = - new javax.servlet.http.HttpSessionContext() { - public HttpSession getSession(String s) { - return null; - } - - public Enumeration getIds() { - return EMPTY_ENUMERATION; - } - }; - protected ServletContext servletContext; protected HttpServletRequest currentRequest; //'real' Shiro Session @@ -127,11 +105,6 @@ public int getMaxInactiveInterval() { } } - @SuppressWarnings({"deprecation"}) - public javax.servlet.http.HttpSessionContext getSessionContext() { - return HTTP_SESSION_CONTEXT; - } - public Object getAttribute(String s) { try { return getSession().getAttribute(s); @@ -141,7 +114,6 @@ public Object getAttribute(String s) { } @Deprecated - @Override public Object getValue(String s) { return getAttribute(s); } @@ -191,16 +163,14 @@ public String[] getValueNames() { } protected void afterBound(String s, Object o) { - if (o instanceof HttpSessionBindingListener) { - HttpSessionBindingListener listener = (HttpSessionBindingListener) o; + if (o instanceof HttpSessionBindingListener listener) { HttpSessionBindingEvent event = new HttpSessionBindingEvent(this, s, o); listener.valueBound(event); } } protected void afterUnbound(String s, Object o) { - if (o instanceof HttpSessionBindingListener) { - HttpSessionBindingListener listener = (HttpSessionBindingListener) o; + if (o instanceof HttpSessionBindingListener listener) { HttpSessionBindingEvent event = new HttpSessionBindingEvent(this, s, o); listener.valueUnbound(event); } diff --git a/web/src/main/java/org/apache/shiro/web/servlet/SimpleCookie.java b/web/src/main/java/org/apache/shiro/web/servlet/SimpleCookie.java index 2004c41096..c86ea5736b 100644 --- a/web/src/main/java/org/apache/shiro/web/servlet/SimpleCookie.java +++ b/web/src/main/java/org/apache/shiro/web/servlet/SimpleCookie.java @@ -23,8 +23,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -35,7 +35,7 @@ /** * Default {@link Cookie Cookie} implementation. 'HttpOnly' is supported out of the box, even on * Servlet {@code 2.4} and {@code 2.5} container implementations, using raw header writing logic and not - * {@link javax.servlet.http.Cookie javax.servlet.http.Cookie} objects (which only has 'HttpOnly' support in Servlet + * {@link jakarta.servlet.http.Cookie jakarta.servlet.http.Cookie} objects (which only has 'HttpOnly' support in Servlet * {@code 2.6} specifications and above). * * @since 1.0 @@ -219,8 +219,8 @@ public void setSameSite(SameSiteOptions sameSite) { } /** - * Returns the Cookie's calculated path setting. If the {@link javax.servlet.http.Cookie#getPath() path} is {@code null}, - * then the {@code request}'s {@link javax.servlet.http.HttpServletRequest#getContextPath() context path} + * Returns the Cookie's calculated path setting. If the {@link jakarta.servlet.http.Cookie#getPath() path} is {@code null}, + * then the {@code request}'s {@link jakarta.servlet.http.HttpServletRequest#getContextPath() context path} * will be returned. If getContextPath() is the empty string or null then the ROOT_PATH constant is returned. * * @param request the incoming HttpServletRequest @@ -445,7 +445,7 @@ public void removeFrom(HttpServletRequest request, HttpServletResponse response) public String readValue(HttpServletRequest request, HttpServletResponse ignored) { String name = getName(); String value = null; - javax.servlet.http.Cookie cookie = getCookie(request, name); + jakarta.servlet.http.Cookie cookie = getCookie(request, name); if (cookie != null) { // Validate that the cookie is used at the correct place. String path = StringUtils.clean(getPath()); @@ -472,10 +472,10 @@ public String readValue(HttpServletRequest request, HttpServletResponse ignored) * @return the cookie with the given name from the request or {@code null} if no cookie * with that name could be found. */ - private static javax.servlet.http.Cookie getCookie(HttpServletRequest request, String cookieName) { - javax.servlet.http.Cookie[] cookies = request.getCookies(); + private static jakarta.servlet.http.Cookie getCookie(HttpServletRequest request, String cookieName) { + jakarta.servlet.http.Cookie[] cookies = request.getCookies(); if (cookies != null) { - for (javax.servlet.http.Cookie cookie : cookies) { + for (jakarta.servlet.http.Cookie cookie : cookies) { if (cookie.getName().equals(cookieName)) { return cookie; } diff --git a/web/src/main/java/org/apache/shiro/web/session/HttpServletSession.java b/web/src/main/java/org/apache/shiro/web/session/HttpServletSession.java index 7ddf98c09d..8c90031079 100644 --- a/web/src/main/java/org/apache/shiro/web/session/HttpServletSession.java +++ b/web/src/main/java/org/apache/shiro/web/session/HttpServletSession.java @@ -23,7 +23,7 @@ import org.apache.shiro.lang.util.StringUtils; import org.apache.shiro.web.servlet.ShiroHttpSession; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSession; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; diff --git a/web/src/main/java/org/apache/shiro/web/session/mgt/DefaultWebSessionContext.java b/web/src/main/java/org/apache/shiro/web/session/mgt/DefaultWebSessionContext.java index 263c60ea02..8d6a57c98b 100644 --- a/web/src/main/java/org/apache/shiro/web/session/mgt/DefaultWebSessionContext.java +++ b/web/src/main/java/org/apache/shiro/web/session/mgt/DefaultWebSessionContext.java @@ -20,8 +20,10 @@ import org.apache.shiro.session.mgt.DefaultSessionContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; + +import java.io.Serial; import java.util.Map; /** @@ -32,6 +34,7 @@ */ public class DefaultWebSessionContext extends DefaultSessionContext implements WebSessionContext { + @Serial private static final long serialVersionUID = -3974604687792523072L; private static final String SERVLET_REQUEST = DefaultWebSessionContext.class.getName() + ".SERVLET_REQUEST"; diff --git a/web/src/main/java/org/apache/shiro/web/session/mgt/DefaultWebSessionManager.java b/web/src/main/java/org/apache/shiro/web/session/mgt/DefaultWebSessionManager.java index 709c158622..a19df5f007 100644 --- a/web/src/main/java/org/apache/shiro/web/session/mgt/DefaultWebSessionManager.java +++ b/web/src/main/java/org/apache/shiro/web/session/mgt/DefaultWebSessionManager.java @@ -33,10 +33,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.Serializable; diff --git a/web/src/main/java/org/apache/shiro/web/session/mgt/ServletContainerSessionManager.java b/web/src/main/java/org/apache/shiro/web/session/mgt/ServletContainerSessionManager.java index b20eb5f3e0..1977e3477d 100644 --- a/web/src/main/java/org/apache/shiro/web/session/mgt/ServletContainerSessionManager.java +++ b/web/src/main/java/org/apache/shiro/web/session/mgt/ServletContainerSessionManager.java @@ -26,9 +26,9 @@ import org.apache.shiro.web.session.HttpServletSession; import org.apache.shiro.web.util.WebUtils; -import javax.servlet.ServletRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; /** diff --git a/web/src/main/java/org/apache/shiro/web/session/mgt/WebSessionContext.java b/web/src/main/java/org/apache/shiro/web/session/mgt/WebSessionContext.java index 84fd1e1805..55771256ec 100644 --- a/web/src/main/java/org/apache/shiro/web/session/mgt/WebSessionContext.java +++ b/web/src/main/java/org/apache/shiro/web/session/mgt/WebSessionContext.java @@ -21,8 +21,8 @@ import org.apache.shiro.session.mgt.SessionContext; import org.apache.shiro.web.util.RequestPairSource; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * A {@code WebSubjectContext} is a {@link SessionContext} that additionally provides for type-safe diff --git a/web/src/main/java/org/apache/shiro/web/session/mgt/WebSessionKey.java b/web/src/main/java/org/apache/shiro/web/session/mgt/WebSessionKey.java index 436cd14f9e..02cded524e 100644 --- a/web/src/main/java/org/apache/shiro/web/session/mgt/WebSessionKey.java +++ b/web/src/main/java/org/apache/shiro/web/session/mgt/WebSessionKey.java @@ -18,8 +18,8 @@ import org.apache.shiro.session.mgt.DefaultSessionKey; import org.apache.shiro.web.util.RequestPairSource; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.Serializable; /** diff --git a/web/src/main/java/org/apache/shiro/web/subject/WebSubject.java b/web/src/main/java/org/apache/shiro/web/subject/WebSubject.java index 5f8b66bbe2..72c53c515d 100644 --- a/web/src/main/java/org/apache/shiro/web/subject/WebSubject.java +++ b/web/src/main/java/org/apache/shiro/web/subject/WebSubject.java @@ -25,8 +25,8 @@ import org.apache.shiro.web.subject.support.DefaultWebSubjectContext; import org.apache.shiro.web.util.RequestPairSource; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * A {@code WebSubject} represents a Subject instance that was acquired as a result of an incoming diff --git a/web/src/main/java/org/apache/shiro/web/subject/WebSubjectContext.java b/web/src/main/java/org/apache/shiro/web/subject/WebSubjectContext.java index d7de2cd5a6..c5757578bf 100644 --- a/web/src/main/java/org/apache/shiro/web/subject/WebSubjectContext.java +++ b/web/src/main/java/org/apache/shiro/web/subject/WebSubjectContext.java @@ -21,8 +21,8 @@ import org.apache.shiro.subject.SubjectContext; import org.apache.shiro.web.util.RequestPairSource; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * A {@code WebSubjectContext} is a {@link SubjectContext} that additionally provides for type-safe diff --git a/web/src/main/java/org/apache/shiro/web/subject/support/DefaultWebSubjectContext.java b/web/src/main/java/org/apache/shiro/web/subject/support/DefaultWebSubjectContext.java index 2f0eddff7d..456ed55327 100644 --- a/web/src/main/java/org/apache/shiro/web/subject/support/DefaultWebSubjectContext.java +++ b/web/src/main/java/org/apache/shiro/web/subject/support/DefaultWebSubjectContext.java @@ -23,8 +23,10 @@ import org.apache.shiro.web.subject.WebSubject; import org.apache.shiro.web.subject.WebSubjectContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import java.io.Serial; + +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * Default {@code WebSubjectContext} implementation that provides for additional storage and retrieval of @@ -34,6 +36,7 @@ */ public class DefaultWebSubjectContext extends DefaultSubjectContext implements WebSubjectContext { + @Serial private static final long serialVersionUID = 8188555355305827739L; private static final String SERVLET_REQUEST = DefaultWebSubjectContext.class.getName() + ".SERVLET_REQUEST"; @@ -75,8 +78,8 @@ public ServletRequest resolveServletRequest() { //fall back on existing subject instance if it exists: if (request == null) { Subject existing = getSubject(); - if (existing instanceof WebSubject) { - request = ((WebSubject) existing).getServletRequest(); + if (existing instanceof WebSubject subject) { + request = subject.getServletRequest(); } } @@ -100,8 +103,8 @@ public ServletResponse resolveServletResponse() { //fall back on existing subject instance if it exists: if (response == null) { Subject existing = getSubject(); - if (existing instanceof WebSubject) { - response = ((WebSubject) existing).getServletResponse(); + if (existing instanceof WebSubject subject) { + response = subject.getServletResponse(); } } diff --git a/web/src/main/java/org/apache/shiro/web/subject/support/WebDelegatingSubject.java b/web/src/main/java/org/apache/shiro/web/subject/support/WebDelegatingSubject.java index c3b04df753..cb9b76c57a 100644 --- a/web/src/main/java/org/apache/shiro/web/subject/support/WebDelegatingSubject.java +++ b/web/src/main/java/org/apache/shiro/web/subject/support/WebDelegatingSubject.java @@ -29,8 +29,8 @@ import org.apache.shiro.web.subject.WebSubject; import org.apache.shiro.web.util.WebUtils; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * Default {@link WebSubject WebSubject} implementation that additional ensures the ability to retain a diff --git a/web/src/main/java/org/apache/shiro/web/tags/AuthenticatedTag.java b/web/src/main/java/org/apache/shiro/web/tags/AuthenticatedTag.java index 77f711254b..524d51414e 100644 --- a/web/src/main/java/org/apache/shiro/web/tags/AuthenticatedTag.java +++ b/web/src/main/java/org/apache/shiro/web/tags/AuthenticatedTag.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.TagSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/web/src/main/java/org/apache/shiro/web/tags/GuestTag.java b/web/src/main/java/org/apache/shiro/web/tags/GuestTag.java index 0333e46d2d..662e9b4bd8 100644 --- a/web/src/main/java/org/apache/shiro/web/tags/GuestTag.java +++ b/web/src/main/java/org/apache/shiro/web/tags/GuestTag.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.TagSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/web/src/main/java/org/apache/shiro/web/tags/NotAuthenticatedTag.java b/web/src/main/java/org/apache/shiro/web/tags/NotAuthenticatedTag.java index c457afb05a..f94a4f9460 100644 --- a/web/src/main/java/org/apache/shiro/web/tags/NotAuthenticatedTag.java +++ b/web/src/main/java/org/apache/shiro/web/tags/NotAuthenticatedTag.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.TagSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/web/src/main/java/org/apache/shiro/web/tags/PermissionTag.java b/web/src/main/java/org/apache/shiro/web/tags/PermissionTag.java index c112341207..0db1bd8748 100644 --- a/web/src/main/java/org/apache/shiro/web/tags/PermissionTag.java +++ b/web/src/main/java/org/apache/shiro/web/tags/PermissionTag.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.TagSupport; /** * @since 0.1 diff --git a/web/src/main/java/org/apache/shiro/web/tags/PrincipalTag.java b/web/src/main/java/org/apache/shiro/web/tags/PrincipalTag.java index eeb9c62558..632adcceb9 100644 --- a/web/src/main/java/org/apache/shiro/web/tags/PrincipalTag.java +++ b/web/src/main/java/org/apache/shiro/web/tags/PrincipalTag.java @@ -21,8 +21,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspTagException; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspTagException; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; diff --git a/web/src/main/java/org/apache/shiro/web/tags/RoleTag.java b/web/src/main/java/org/apache/shiro/web/tags/RoleTag.java index a296096224..7bbab26e0e 100644 --- a/web/src/main/java/org/apache/shiro/web/tags/RoleTag.java +++ b/web/src/main/java/org/apache/shiro/web/tags/RoleTag.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.TagSupport; /** * @since 0.1 diff --git a/web/src/main/java/org/apache/shiro/web/tags/SecureTag.java b/web/src/main/java/org/apache/shiro/web/tags/SecureTag.java index 273fa85ec5..19ebdb1ed6 100644 --- a/web/src/main/java/org/apache/shiro/web/tags/SecureTag.java +++ b/web/src/main/java/org/apache/shiro/web/tags/SecureTag.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.tags; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.TagSupport; +import jakarta.servlet.jsp.JspException; +import jakarta.servlet.jsp.tagext.TagSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/web/src/main/java/org/apache/shiro/web/tags/UserTag.java b/web/src/main/java/org/apache/shiro/web/tags/UserTag.java index 7adb0810bf..4e4a641514 100644 --- a/web/src/main/java/org/apache/shiro/web/tags/UserTag.java +++ b/web/src/main/java/org/apache/shiro/web/tags/UserTag.java @@ -18,7 +18,7 @@ */ package org.apache.shiro.web.tags; -import javax.servlet.jsp.JspException; +import jakarta.servlet.jsp.JspException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/web/src/main/java/org/apache/shiro/web/util/RedirectView.java b/web/src/main/java/org/apache/shiro/web/util/RedirectView.java index c1390ed179..bbb494e630 100644 --- a/web/src/main/java/org/apache/shiro/web/util/RedirectView.java +++ b/web/src/main/java/org/apache/shiro/web/util/RedirectView.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.util; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -57,7 +57,7 @@ * * @see #setContextRelative * @see #setHttp10Compatible - * @see javax.servlet.http.HttpServletResponse#sendRedirect + * @see jakarta.servlet.http.HttpServletResponse#sendRedirect * @since 0.2 */ public class RedirectView { @@ -143,7 +143,7 @@ public void setUrl(String url) { * @param contextRelative whether to interpret a given URL that starts with a slash ("/") * as relative to the current ServletContext, i.e. as relative to the * web application root. - * @see javax.servlet.http.HttpServletRequest#getContextPath + * @see jakarta.servlet.http.HttpServletRequest#getContextPath */ public void setContextRelative(boolean contextRelative) { this.contextRelative = contextRelative; @@ -160,7 +160,7 @@ public void setContextRelative(boolean contextRelative) { * after a POST request; turn this flag off in such a scenario. * * @param http10Compatible whether to stay compatible with HTTP 1.0 clients. - * @see javax.servlet.http.HttpServletResponse#sendRedirect + * @see jakarta.servlet.http.HttpServletResponse#sendRedirect */ public void setHttp10Compatible(boolean http10Compatible) { this.http10Compatible = http10Compatible; @@ -262,6 +262,7 @@ protected void appendQueryProperties(StringBuilder targetUrl, Map model, String * @param encodingScheme the encoding scheme * @return the encoded output String * @throws UnsupportedEncodingException if thrown by the JDK URLEncoder + * @see java.net.URLEncoder#encode(String, java.nio.charset.Charset) * @see java.net.URLEncoder#encode(String, String) * @see java.net.URLEncoder#encode(String) */ diff --git a/web/src/main/java/org/apache/shiro/web/util/RequestPairSource.java b/web/src/main/java/org/apache/shiro/web/util/RequestPairSource.java index d280ae9cba..137dfb3924 100644 --- a/web/src/main/java/org/apache/shiro/web/util/RequestPairSource.java +++ b/web/src/main/java/org/apache/shiro/web/util/RequestPairSource.java @@ -15,8 +15,8 @@ */ package org.apache.shiro.web.util; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; /** * A {@code RequestPairSource} is a component that can supply a {@link ServletRequest ServletRequest} and diff --git a/web/src/main/java/org/apache/shiro/web/util/SavedRequest.java b/web/src/main/java/org/apache/shiro/web/util/SavedRequest.java index d52a10c154..4c28800720 100644 --- a/web/src/main/java/org/apache/shiro/web/util/SavedRequest.java +++ b/web/src/main/java/org/apache/shiro/web/util/SavedRequest.java @@ -18,7 +18,7 @@ */ package org.apache.shiro.web.util; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.io.Serializable; /** diff --git a/web/src/main/java/org/apache/shiro/web/util/WebUtils.java b/web/src/main/java/org/apache/shiro/web/util/WebUtils.java index 99717f2429..c644b99f94 100644 --- a/web/src/main/java/org/apache/shiro/web/util/WebUtils.java +++ b/web/src/main/java/org/apache/shiro/web/util/WebUtils.java @@ -30,14 +30,16 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.Map; /** @@ -68,28 +70,28 @@ public final class WebUtils { *

    If included via a RequestDispatcher, the current resource will see the * originating request. Its own URI and paths are exposed as request attributes. */ - public static final String INCLUDE_REQUEST_URI_ATTRIBUTE = "javax.servlet.include.request_uri"; - public static final String INCLUDE_CONTEXT_PATH_ATTRIBUTE = "javax.servlet.include.context_path"; - public static final String INCLUDE_SERVLET_PATH_ATTRIBUTE = "javax.servlet.include.servlet_path"; - public static final String INCLUDE_PATH_INFO_ATTRIBUTE = "javax.servlet.include.path_info"; - public static final String INCLUDE_QUERY_STRING_ATTRIBUTE = "javax.servlet.include.query_string"; + public static final String INCLUDE_REQUEST_URI_ATTRIBUTE = RequestDispatcher.INCLUDE_REQUEST_URI; + public static final String INCLUDE_CONTEXT_PATH_ATTRIBUTE = RequestDispatcher.INCLUDE_CONTEXT_PATH; + public static final String INCLUDE_SERVLET_PATH_ATTRIBUTE = RequestDispatcher.INCLUDE_SERVLET_PATH; + public static final String INCLUDE_PATH_INFO_ATTRIBUTE = RequestDispatcher.INCLUDE_PATH_INFO; + public static final String INCLUDE_QUERY_STRING_ATTRIBUTE = RequestDispatcher.INCLUDE_QUERY_STRING; /** * Standard Servlet 2.4+ spec request attributes for forward URI and paths. *

    If forwarded to via a RequestDispatcher, the current resource will see its * own URI and paths. The originating URI and paths are exposed as request attributes. */ - public static final String FORWARD_REQUEST_URI_ATTRIBUTE = "javax.servlet.forward.request_uri"; - public static final String FORWARD_CONTEXT_PATH_ATTRIBUTE = "javax.servlet.forward.context_path"; - public static final String FORWARD_SERVLET_PATH_ATTRIBUTE = "javax.servlet.forward.servlet_path"; - public static final String FORWARD_PATH_INFO_ATTRIBUTE = "javax.servlet.forward.path_info"; - public static final String FORWARD_QUERY_STRING_ATTRIBUTE = "javax.servlet.forward.query_string"; + public static final String FORWARD_REQUEST_URI_ATTRIBUTE = RequestDispatcher.FORWARD_REQUEST_URI; + public static final String FORWARD_CONTEXT_PATH_ATTRIBUTE = RequestDispatcher.FORWARD_CONTEXT_PATH; + public static final String FORWARD_SERVLET_PATH_ATTRIBUTE = RequestDispatcher.FORWARD_SERVLET_PATH; + public static final String FORWARD_PATH_INFO_ATTRIBUTE = RequestDispatcher.FORWARD_PATH_INFO; + public static final String FORWARD_QUERY_STRING_ATTRIBUTE = RequestDispatcher.FORWARD_QUERY_STRING; /** * Default character encoding to use when request.getCharacterEncoding * returns null, according to the Servlet spec. * - * @see javax.servlet.ServletRequest#getCharacterEncoding + * @see jakarta.servlet.ServletRequest#getCharacterEncoding */ public static final String DEFAULT_CHARACTER_ENCODING = "ISO-8859-1"; @@ -341,14 +343,14 @@ public static WebEnvironment getWebEnvironment(ServletContext sc, String attrNam if (attr == null) { return null; } - if (attr instanceof RuntimeException) { - throw (RuntimeException) attr; + if (attr instanceof RuntimeException exception) { + throw exception; } - if (attr instanceof Error) { - throw (Error) attr; + if (attr instanceof Error error) { + throw error; } - if (attr instanceof Exception) { - throw new IllegalStateException((Exception) attr); + if (attr instanceof Exception exception) { + throw new IllegalStateException(exception); } if (!(attr instanceof WebEnvironment)) { throw new IllegalStateException("Context attribute is not of type WebEnvironment: " + attr); @@ -366,7 +368,8 @@ public static WebEnvironment getWebEnvironment(ServletContext sc, String attrNam * @param source the String to decode * @return the decoded String * @see #DEFAULT_CHARACTER_ENCODING - * @see javax.servlet.ServletRequest#getCharacterEncoding + * @see jakarta.servlet.ServletRequest#getCharacterEncoding + * @see java.net.URLDecoder#decode(String, java.nio.charset.Charset) * @see java.net.URLDecoder#decode(String, String) * @see java.net.URLDecoder#decode(String) */ @@ -381,7 +384,7 @@ public static String decodeRequestString(HttpServletRequest request, String sour + "] with encoding '" + Encode.forHtml(enc) + "': falling back to platform default encoding; exception message: " + ex.getMessage()); } - return URLDecoder.decode(source); + return URLDecoder.decode(source, StandardCharsets.UTF_8); } } @@ -394,7 +397,7 @@ public static String decodeRequestString(HttpServletRequest request, String sour * * @param request current HTTP request * @return the encoding for the request (never null) - * @see javax.servlet.ServletRequest#getCharacterEncoding() + * @see jakarta.servlet.ServletRequest#getCharacterEncoding() */ protected static String determineEncoding(HttpServletRequest request) { String enc = request.getCharacterEncoding(); @@ -419,39 +422,39 @@ protected static String determineEncoding(HttpServletRequest request) { */ public static boolean isWeb(Object requestPairSource) { - return requestPairSource instanceof RequestPairSource && isWeb((RequestPairSource) requestPairSource); + return requestPairSource instanceof RequestPairSource rps && isWeb(rps); } public static boolean isHttp(Object requestPairSource) { - return requestPairSource instanceof RequestPairSource && isHttp((RequestPairSource) requestPairSource); + return requestPairSource instanceof RequestPairSource rps && isHttp(rps); } public static ServletRequest getRequest(Object requestPairSource) { - if (requestPairSource instanceof RequestPairSource) { - return ((RequestPairSource) requestPairSource).getServletRequest(); + if (requestPairSource instanceof RequestPairSource source) { + return source.getServletRequest(); } return null; } public static ServletResponse getResponse(Object requestPairSource) { - if (requestPairSource instanceof RequestPairSource) { - return ((RequestPairSource) requestPairSource).getServletResponse(); + if (requestPairSource instanceof RequestPairSource source) { + return source.getServletResponse(); } return null; } public static HttpServletRequest getHttpRequest(Object requestPairSource) { ServletRequest request = getRequest(requestPairSource); - if (request instanceof HttpServletRequest) { - return (HttpServletRequest) request; + if (request instanceof HttpServletRequest servletRequest) { + return servletRequest; } return null; } public static HttpServletResponse getHttpResponse(Object requestPairSource) { ServletResponse response = getResponse(requestPairSource); - if (response instanceof HttpServletResponse) { - return (HttpServletResponse) response; + if (response instanceof HttpServletResponse servletResponse) { + return servletResponse; } return null; } @@ -481,8 +484,7 @@ private static boolean isHttp(RequestPairSource source) { * otherwise. */ public static boolean isSessionCreationEnabled(Object requestPairSource) { - if (requestPairSource instanceof RequestPairSource) { - RequestPairSource source = (RequestPairSource) requestPairSource; + if (requestPairSource instanceof RequestPairSource source) { return isSessionCreationEnabled(source.getServletRequest()); } //by default @@ -503,8 +505,8 @@ public static boolean isSessionCreationEnabled(Object requestPairSource) { public static boolean isSessionCreationEnabled(ServletRequest request) { if (request != null) { Object val = request.getAttribute(DefaultSubjectContext.SESSION_CREATION_ENABLED); - if (val != null && val instanceof Boolean) { - return (Boolean) val; + if (val != null && val instanceof Boolean boolean1) { + return boolean1; } } //by default @@ -671,13 +673,13 @@ public static SavedRequest getSavedRequest(ServletRequest request) { /** * Redirects the to the request url from a previously - * {@link #saveRequest(javax.servlet.ServletRequest) saved} request, or if there is no saved request, redirects the + * {@link #saveRequest(jakarta.servlet.ServletRequest) saved} request, or if there is no saved request, redirects the * end user to the specified {@code fallbackUrl}. If there is no saved request or fallback url, this method * throws an {@link IllegalStateException}. *

    * This method is primarily used to support a common login scenario - if an unauthenticated user accesses a * page that requires authentication, it is expected that request is - * {@link #saveRequest(javax.servlet.ServletRequest) saved} first and then redirected to the login page. Then, + * {@link #saveRequest(jakarta.servlet.ServletRequest) saved} first and then redirected to the login page. Then, * after a successful login, this method can be called to redirect them back to their originally requested URL, a * nice usability feature. * diff --git a/web/src/test/groovy/org/apache/shiro/web/config/IniFilterChainResolverFactoryTest.groovy b/web/src/test/groovy/org/apache/shiro/web/config/IniFilterChainResolverFactoryTest.groovy index 0600b718a0..aee0880d7e 100644 --- a/web/src/test/groovy/org/apache/shiro/web/config/IniFilterChainResolverFactoryTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/config/IniFilterChainResolverFactoryTest.groovy @@ -24,9 +24,9 @@ import org.hamcrest.Matchers import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.parallel.Isolated -import javax.servlet.Filter -import javax.servlet.FilterConfig -import javax.servlet.ServletContext +import jakarta.servlet.Filter +import jakarta.servlet.FilterConfig +import jakarta.servlet.ServletContext import org.apache.shiro.config.Ini import org.apache.shiro.web.filter.authc.FormAuthenticationFilter import org.apache.shiro.web.filter.authz.SslFilter diff --git a/web/src/test/groovy/org/apache/shiro/web/env/EnvironmentLoaderTest.groovy b/web/src/test/groovy/org/apache/shiro/web/env/EnvironmentLoaderTest.groovy index 22cd0fc44b..cbbf29eacb 100644 --- a/web/src/test/groovy/org/apache/shiro/web/env/EnvironmentLoaderTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/env/EnvironmentLoaderTest.groovy @@ -27,7 +27,7 @@ import static org.easymock.EasyMock.*; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test -import javax.servlet.ServletContext +import jakarta.servlet.ServletContext /** * Unit tests for the {@link EnvironmentLoaderTest} implementation. diff --git a/web/src/test/groovy/org/apache/shiro/web/env/MockWebEnvironment.groovy b/web/src/test/groovy/org/apache/shiro/web/env/MockWebEnvironment.groovy index 2bb9a297d8..4cb90cfd0b 100644 --- a/web/src/test/groovy/org/apache/shiro/web/env/MockWebEnvironment.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/env/MockWebEnvironment.groovy @@ -23,7 +23,7 @@ import org.apache.shiro.web.config.ShiroFilterConfiguration import org.apache.shiro.web.filter.mgt.FilterChainResolver import org.apache.shiro.web.mgt.WebSecurityManager -import javax.servlet.ServletContext +import jakarta.servlet.ServletContext /** * Mock WebEnvironment, replaces IniWebEnvironment in EnvironmentLoader tests, to avoid extra dependencies. diff --git a/web/src/test/groovy/org/apache/shiro/web/filter/InvalidRequestFilterTest.groovy b/web/src/test/groovy/org/apache/shiro/web/filter/InvalidRequestFilterTest.groovy index a046670d36..0252e3e57b 100644 --- a/web/src/test/groovy/org/apache/shiro/web/filter/InvalidRequestFilterTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/filter/InvalidRequestFilterTest.groovy @@ -23,7 +23,8 @@ import org.apache.shiro.web.RestoreSystemProperties import org.junit.jupiter.api.Test import org.junit.jupiter.api.parallel.Isolated -import javax.servlet.http.HttpServletRequest +import jakarta.servlet.RequestDispatcher +import jakarta.servlet.http.HttpServletRequest import static org.easymock.EasyMock.expect import static org.easymock.EasyMock.mock @@ -245,8 +246,8 @@ class InvalidRequestFilterTest { expect(request.getRequestURI()).andReturn(requestUri) expect(request.getServletPath()).andReturn(servletPath).anyTimes() expect(request.getPathInfo()).andReturn(pathInfo).anyTimes() - expect(request.getAttribute("javax.servlet.include.servlet_path")).andReturn(servletPath) - expect(request.getAttribute("javax.servlet.include.path_info")).andReturn(pathInfo) + expect(request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH)).andReturn(servletPath) + expect(request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO)).andReturn(pathInfo) replay(request) return request } diff --git a/web/src/test/groovy/org/apache/shiro/web/filter/authc/BearerHttpFilterAuthenticationTest.groovy b/web/src/test/groovy/org/apache/shiro/web/filter/authc/BearerHttpFilterAuthenticationTest.groovy index 25e51dcf65..544a34af98 100644 --- a/web/src/test/groovy/org/apache/shiro/web/filter/authc/BearerHttpFilterAuthenticationTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/filter/authc/BearerHttpFilterAuthenticationTest.groovy @@ -25,8 +25,8 @@ import org.hamcrest.CoreMatchers import org.hamcrest.Matchers import org.junit.jupiter.api.Test -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse import static org.easymock.EasyMock.* import static org.hamcrest.MatcherAssert.assertThat diff --git a/web/src/test/groovy/org/apache/shiro/web/filter/authc/LogoutFilterTest.groovy b/web/src/test/groovy/org/apache/shiro/web/filter/authc/LogoutFilterTest.groovy index e666fac454..32c210889b 100644 --- a/web/src/test/groovy/org/apache/shiro/web/filter/authc/LogoutFilterTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/filter/authc/LogoutFilterTest.groovy @@ -21,10 +21,10 @@ package org.apache.shiro.web.filter.authc import org.apache.shiro.subject.Subject import org.junit.jupiter.api.Test -import javax.servlet.ServletRequest -import javax.servlet.ServletResponse -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.ServletRequest +import jakarta.servlet.ServletResponse +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse import static org.easymock.EasyMock.* import static org.junit.jupiter.api.Assertions.* diff --git a/web/src/test/groovy/org/apache/shiro/web/filter/mgt/DefaultFilterChainManagerTest.groovy b/web/src/test/groovy/org/apache/shiro/web/filter/mgt/DefaultFilterChainManagerTest.groovy index 06b811b0d7..6e2e55ee42 100644 --- a/web/src/test/groovy/org/apache/shiro/web/filter/mgt/DefaultFilterChainManagerTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/filter/mgt/DefaultFilterChainManagerTest.groovy @@ -24,10 +24,10 @@ import org.apache.shiro.web.servlet.ShiroFilter import org.hamcrest.Matchers import org.junit.jupiter.api.BeforeEach -import javax.servlet.Filter -import javax.servlet.FilterChain -import javax.servlet.FilterConfig -import javax.servlet.ServletContext +import jakarta.servlet.Filter +import jakarta.servlet.FilterChain +import jakarta.servlet.FilterConfig +import jakarta.servlet.ServletContext import org.junit.jupiter.api.Test import static org.easymock.EasyMock.* diff --git a/web/src/test/groovy/org/apache/shiro/web/filter/session/NoSessionCreationFilterTest.groovy b/web/src/test/groovy/org/apache/shiro/web/filter/session/NoSessionCreationFilterTest.groovy index 0b13cd3076..9ecfcd0583 100644 --- a/web/src/test/groovy/org/apache/shiro/web/filter/session/NoSessionCreationFilterTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/filter/session/NoSessionCreationFilterTest.groovy @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.filter.session -import javax.servlet.ServletRequest -import javax.servlet.ServletResponse +import jakarta.servlet.ServletRequest +import jakarta.servlet.ServletResponse import org.apache.shiro.subject.support.DefaultSubjectContext import org.junit.jupiter.api.Test diff --git a/web/src/test/groovy/org/apache/shiro/web/mgt/DefaultWebSessionStorageEvaluatorTest.groovy b/web/src/test/groovy/org/apache/shiro/web/mgt/DefaultWebSessionStorageEvaluatorTest.groovy index 648e892e45..dab4120acb 100644 --- a/web/src/test/groovy/org/apache/shiro/web/mgt/DefaultWebSessionStorageEvaluatorTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/mgt/DefaultWebSessionStorageEvaluatorTest.groovy @@ -18,8 +18,8 @@ */ package org.apache.shiro.web.mgt -import javax.servlet.ServletRequest -import javax.servlet.ServletResponse +import jakarta.servlet.ServletRequest +import jakarta.servlet.ServletResponse import org.apache.shiro.session.Session import org.apache.shiro.subject.Subject import org.apache.shiro.subject.support.DefaultSubjectContext diff --git a/web/src/test/groovy/org/apache/shiro/web/servlet/AbstractShiroFilterTest.groovy b/web/src/test/groovy/org/apache/shiro/web/servlet/AbstractShiroFilterTest.groovy index 11dc47826b..e38a6cd714 100644 --- a/web/src/test/groovy/org/apache/shiro/web/servlet/AbstractShiroFilterTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/servlet/AbstractShiroFilterTest.groovy @@ -20,8 +20,8 @@ package org.apache.shiro.web.servlet import org.junit.jupiter.api.parallel.Isolated -import javax.servlet.FilterConfig -import javax.servlet.ServletContext +import jakarta.servlet.FilterConfig +import jakarta.servlet.ServletContext import org.apache.shiro.SecurityUtils import org.apache.shiro.UnavailableSecurityManagerException import org.apache.shiro.web.mgt.WebSecurityManager diff --git a/web/src/test/groovy/org/apache/shiro/web/servlet/IniShiroFilterTest.groovy b/web/src/test/groovy/org/apache/shiro/web/servlet/IniShiroFilterTest.groovy index c2e68ee844..ca07f14917 100644 --- a/web/src/test/groovy/org/apache/shiro/web/servlet/IniShiroFilterTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/servlet/IniShiroFilterTest.groovy @@ -18,9 +18,9 @@ */ package org.apache.shiro.web.servlet -import javax.servlet.FilterConfig -import javax.servlet.ServletContext -import javax.servlet.ServletException +import jakarta.servlet.FilterConfig +import jakarta.servlet.ServletContext +import jakarta.servlet.ServletException import org.apache.shiro.lang.io.ResourceUtils import org.junit.jupiter.api.Test diff --git a/web/src/test/groovy/org/apache/shiro/web/servlet/ShiroFilterTest.groovy b/web/src/test/groovy/org/apache/shiro/web/servlet/ShiroFilterTest.groovy index d85995e4d3..858f24c77b 100644 --- a/web/src/test/groovy/org/apache/shiro/web/servlet/ShiroFilterTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/servlet/ShiroFilterTest.groovy @@ -25,8 +25,8 @@ import org.apache.shiro.web.filter.mgt.FilterChainResolver import org.apache.shiro.web.mgt.WebSecurityManager import org.junit.jupiter.api.Test -import javax.servlet.FilterConfig -import javax.servlet.ServletContext +import jakarta.servlet.FilterConfig +import jakarta.servlet.ServletContext import static org.hamcrest.MatcherAssert.assertThat import static org.hamcrest.Matchers.sameInstance diff --git a/web/src/test/groovy/org/apache/shiro/web/servlet/ShiroHttpServletResponseTest.groovy b/web/src/test/groovy/org/apache/shiro/web/servlet/ShiroHttpServletResponseTest.groovy index f916e7ca5f..31aae75bd0 100644 --- a/web/src/test/groovy/org/apache/shiro/web/servlet/ShiroHttpServletResponseTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/servlet/ShiroHttpServletResponseTest.groovy @@ -20,9 +20,9 @@ package org.apache.shiro.web.servlet import org.junit.jupiter.api.Test -import javax.servlet.ServletContext -import javax.servlet.http.HttpServletResponse -import javax.servlet.http.HttpSession +import jakarta.servlet.ServletContext +import jakarta.servlet.http.HttpServletResponse +import jakarta.servlet.http.HttpSession import static org.junit.jupiter.api.Assertions.assertEquals import static org.mockito.Mockito.* diff --git a/web/src/test/groovy/org/apache/shiro/web/session/mgt/DefaultWebSessionManagerTest.groovy b/web/src/test/groovy/org/apache/shiro/web/session/mgt/DefaultWebSessionManagerTest.groovy index 4b0895c7c8..0a5d2a88cf 100644 --- a/web/src/test/groovy/org/apache/shiro/web/session/mgt/DefaultWebSessionManagerTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/session/mgt/DefaultWebSessionManagerTest.groovy @@ -28,9 +28,9 @@ import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import javax.servlet.ServletRequest -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.ServletRequest +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse import static org.easymock.EasyMock.* import static org.junit.jupiter.api.Assertions.assertEquals diff --git a/web/src/test/groovy/org/apache/shiro/web/session/mgt/ServletContainerSessionManagerTest.groovy b/web/src/test/groovy/org/apache/shiro/web/session/mgt/ServletContainerSessionManagerTest.groovy index ed58e21105..f1bb4a8895 100644 --- a/web/src/test/groovy/org/apache/shiro/web/session/mgt/ServletContainerSessionManagerTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/session/mgt/ServletContainerSessionManagerTest.groovy @@ -18,9 +18,9 @@ */ package org.apache.shiro.web.session.mgt -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse -import javax.servlet.http.HttpSession +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse +import jakarta.servlet.http.HttpSession import org.apache.shiro.session.mgt.SessionContext import org.apache.shiro.session.mgt.SessionKey import org.apache.shiro.web.session.HttpServletSession diff --git a/web/src/test/groovy/org/apache/shiro/web/util/SavedRequestTest.groovy b/web/src/test/groovy/org/apache/shiro/web/util/SavedRequestTest.groovy index 45d775bd9c..95bac6d765 100644 --- a/web/src/test/groovy/org/apache/shiro/web/util/SavedRequestTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/util/SavedRequestTest.groovy @@ -20,7 +20,7 @@ package org.apache.shiro.web.util import org.junit.jupiter.api.Test -import javax.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletRequest import static org.hamcrest.MatcherAssert.assertThat import static org.hamcrest.Matchers.equalTo import static org.easymock.EasyMock.niceMock diff --git a/web/src/test/groovy/org/apache/shiro/web/util/WebUtilsTest.groovy b/web/src/test/groovy/org/apache/shiro/web/util/WebUtilsTest.groovy index 5bd61e6ba1..53b8e3c0ff 100644 --- a/web/src/test/groovy/org/apache/shiro/web/util/WebUtilsTest.groovy +++ b/web/src/test/groovy/org/apache/shiro/web/util/WebUtilsTest.groovy @@ -22,7 +22,7 @@ import org.apache.shiro.web.RestoreSystemProperties import org.junit.jupiter.api.Test import org.junit.jupiter.api.parallel.Isolated -import javax.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletRequest import static org.easymock.EasyMock.* import static org.hamcrest.MatcherAssert.* diff --git a/web/src/test/java/org/apache/shiro/web/WebTest.java b/web/src/test/java/org/apache/shiro/web/WebTest.java index 25ced2f685..5a109028f9 100644 --- a/web/src/test/java/org/apache/shiro/web/WebTest.java +++ b/web/src/test/java/org/apache/shiro/web/WebTest.java @@ -18,8 +18,8 @@ */ package org.apache.shiro.web; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/web/src/test/java/org/apache/shiro/web/config/WebIniSecurityManagerFactoryTest.java b/web/src/test/java/org/apache/shiro/web/config/WebIniSecurityManagerFactoryTest.java index 3258f50841..5bd8d331ea 100644 --- a/web/src/test/java/org/apache/shiro/web/config/WebIniSecurityManagerFactoryTest.java +++ b/web/src/test/java/org/apache/shiro/web/config/WebIniSecurityManagerFactoryTest.java @@ -24,7 +24,7 @@ import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.junit.jupiter.api.Test; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; diff --git a/web/src/test/java/org/apache/shiro/web/env/EnvironmentLoaderServiceTest.java b/web/src/test/java/org/apache/shiro/web/env/EnvironmentLoaderServiceTest.java index f9bc7abfa7..5e4fce4ac3 100644 --- a/web/src/test/java/org/apache/shiro/web/env/EnvironmentLoaderServiceTest.java +++ b/web/src/test/java/org/apache/shiro/web/env/EnvironmentLoaderServiceTest.java @@ -22,7 +22,7 @@ import org.easymock.EasyMock; import org.junit.jupiter.api.Test; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import java.util.Arrays; import java.util.List; diff --git a/web/src/test/java/org/apache/shiro/web/env/FilterStub.java b/web/src/test/java/org/apache/shiro/web/env/FilterStub.java index 1341fb323c..9335938115 100644 --- a/web/src/test/java/org/apache/shiro/web/env/FilterStub.java +++ b/web/src/test/java/org/apache/shiro/web/env/FilterStub.java @@ -18,12 +18,12 @@ */ package org.apache.shiro.web.env; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; public class FilterStub implements Filter { diff --git a/web/src/test/java/org/apache/shiro/web/env/WebEnvironmentStub.java b/web/src/test/java/org/apache/shiro/web/env/WebEnvironmentStub.java index 7dc7f7ca4a..79e1732052 100644 --- a/web/src/test/java/org/apache/shiro/web/env/WebEnvironmentStub.java +++ b/web/src/test/java/org/apache/shiro/web/env/WebEnvironmentStub.java @@ -23,7 +23,7 @@ import org.apache.shiro.web.filter.mgt.FilterChainResolver; import org.apache.shiro.web.mgt.WebSecurityManager; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; public class WebEnvironmentStub implements WebEnvironment, MutableWebEnvironment { diff --git a/web/src/test/java/org/apache/shiro/web/filter/PathMatchingFilterParameterizedTest.java b/web/src/test/java/org/apache/shiro/web/filter/PathMatchingFilterParameterizedTest.java index 7547e7c465..3933dbdaba 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/PathMatchingFilterParameterizedTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/PathMatchingFilterParameterizedTest.java @@ -24,9 +24,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import java.util.stream.Stream; diff --git a/web/src/test/java/org/apache/shiro/web/filter/PathMatchingFilterTest.java b/web/src/test/java/org/apache/shiro/web/filter/PathMatchingFilterTest.java index e5b1084fc4..2735168d04 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/PathMatchingFilterTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/PathMatchingFilterTest.java @@ -21,9 +21,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import static org.assertj.core.api.Assertions.assertThat; import static org.easymock.EasyMock.createNiceMock; diff --git a/web/src/test/java/org/apache/shiro/web/filter/authc/BasicHttpFilterAuthenticationTest.java b/web/src/test/java/org/apache/shiro/web/filter/authc/BasicHttpFilterAuthenticationTest.java index ad6c106323..a8ab55c980 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/authc/BasicHttpFilterAuthenticationTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/authc/BasicHttpFilterAuthenticationTest.java @@ -24,8 +24,8 @@ import org.apache.shiro.test.SecurityManagerTestSupport; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/web/src/test/java/org/apache/shiro/web/filter/authz/AuthorizationFilterTest.java b/web/src/test/java/org/apache/shiro/web/filter/authz/AuthorizationFilterTest.java index 695285b52e..f50c29e9b1 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/authz/AuthorizationFilterTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/authz/AuthorizationFilterTest.java @@ -22,10 +22,10 @@ import org.apache.shiro.test.SecurityManagerTestSupport; import org.junit.jupiter.api.Test; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; diff --git a/web/src/test/java/org/apache/shiro/web/filter/authz/IpFilterTest.java b/web/src/test/java/org/apache/shiro/web/filter/authz/IpFilterTest.java index c0076a407d..b0d5ca76c6 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/authz/IpFilterTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/authz/IpFilterTest.java @@ -20,7 +20,7 @@ import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.Collection; import java.util.Collections; diff --git a/web/src/test/java/org/apache/shiro/web/filter/authz/PortFilterTest.java b/web/src/test/java/org/apache/shiro/web/filter/authz/PortFilterTest.java index 8103b309f9..70cae5d19b 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/authz/PortFilterTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/authz/PortFilterTest.java @@ -20,8 +20,8 @@ import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import static org.assertj.core.api.Assertions.assertThat; import static org.easymock.EasyMock.createNiceMock; diff --git a/web/src/test/java/org/apache/shiro/web/filter/authz/SslFilterTest.java b/web/src/test/java/org/apache/shiro/web/filter/authz/SslFilterTest.java index 605a323aff..01c57a5329 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/authz/SslFilterTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/authz/SslFilterTest.java @@ -23,8 +23,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; diff --git a/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java b/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java index 5d236a328a..f05f3d9490 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/mgt/PathMatchingFilterChainResolverTest.java @@ -23,12 +23,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; diff --git a/web/src/test/java/org/apache/shiro/web/filter/mgt/SimpleNamedFilterListTest.java b/web/src/test/java/org/apache/shiro/web/filter/mgt/SimpleNamedFilterListTest.java index 3a4bb668f4..0c5ca3f8f2 100644 --- a/web/src/test/java/org/apache/shiro/web/filter/mgt/SimpleNamedFilterListTest.java +++ b/web/src/test/java/org/apache/shiro/web/filter/mgt/SimpleNamedFilterListTest.java @@ -26,8 +26,8 @@ import org.apache.shiro.web.filter.authz.SslFilter; import org.junit.jupiter.api.Test; -import javax.servlet.Filter; -import javax.servlet.FilterChain; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; import java.util.ArrayList; import java.util.Iterator; import java.util.List; diff --git a/web/src/test/java/org/apache/shiro/web/mgt/CookieRememberMeManagerTest.java b/web/src/test/java/org/apache/shiro/web/mgt/CookieRememberMeManagerTest.java index c61b817484..e28d6037a9 100644 --- a/web/src/test/java/org/apache/shiro/web/mgt/CookieRememberMeManagerTest.java +++ b/web/src/test/java/org/apache/shiro/web/mgt/CookieRememberMeManagerTest.java @@ -31,9 +31,9 @@ import org.apache.shiro.web.subject.support.DefaultWebSubjectContext; import org.junit.jupiter.api.Test; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.UUID; diff --git a/web/src/test/java/org/apache/shiro/web/mgt/DefaultWebSecurityManagerTest.java b/web/src/test/java/org/apache/shiro/web/mgt/DefaultWebSecurityManagerTest.java index cf6374aacb..6083f6b6a7 100644 --- a/web/src/test/java/org/apache/shiro/web/mgt/DefaultWebSecurityManagerTest.java +++ b/web/src/test/java/org/apache/shiro/web/mgt/DefaultWebSecurityManagerTest.java @@ -36,11 +36,11 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.parallel.Isolated; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.Serializable; import static org.assertj.core.api.Assertions.assertThat; diff --git a/web/src/test/java/org/apache/shiro/web/servlet/OncePerRequestFilterTest.java b/web/src/test/java/org/apache/shiro/web/servlet/OncePerRequestFilterTest.java index 297abadeb0..f18c10626e 100644 --- a/web/src/test/java/org/apache/shiro/web/servlet/OncePerRequestFilterTest.java +++ b/web/src/test/java/org/apache/shiro/web/servlet/OncePerRequestFilterTest.java @@ -21,10 +21,10 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; import static org.assertj.core.api.Assertions.assertThat; diff --git a/web/src/test/java/org/apache/shiro/web/servlet/ShiroHttpServletRequestTest.java b/web/src/test/java/org/apache/shiro/web/servlet/ShiroHttpServletRequestTest.java index aa3b59e495..d0593129e5 100644 --- a/web/src/test/java/org/apache/shiro/web/servlet/ShiroHttpServletRequestTest.java +++ b/web/src/test/java/org/apache/shiro/web/servlet/ShiroHttpServletRequestTest.java @@ -24,8 +24,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; import java.util.concurrent.atomic.AtomicInteger; import static org.assertj.core.api.Assertions.assertThat; diff --git a/web/src/test/java/org/apache/shiro/web/servlet/SimpleCookieTest.java b/web/src/test/java/org/apache/shiro/web/servlet/SimpleCookieTest.java index 4d89b107ab..71bb97241c 100644 --- a/web/src/test/java/org/apache/shiro/web/servlet/SimpleCookieTest.java +++ b/web/src/test/java/org/apache/shiro/web/servlet/SimpleCookieTest.java @@ -21,8 +21,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Locale; import static org.easymock.EasyMock.createMock; @@ -131,7 +131,7 @@ public void testNullContextPath() throws Exception { public void testReadValueInvalidPath() throws Exception { expect(mockRequest.getRequestURI()).andStubReturn("/foo/index.jsp"); expect(mockRequest.getCookies()).andStubReturn( - new javax.servlet.http.Cookie[] {new javax.servlet.http.Cookie(this.cookie.getName(), "value")}); + new jakarta.servlet.http.Cookie[] {new jakarta.servlet.http.Cookie(this.cookie.getName(), "value")}); replay(mockRequest); replay(mockResponse); @@ -143,7 +143,7 @@ public void testReadValueInvalidPath() throws Exception { public void testReadValuePrefixPath() throws Exception { expect(mockRequest.getRequestURI()).andStubReturn("/bar/index.jsp"); expect(mockRequest.getCookies()).andStubReturn( - new javax.servlet.http.Cookie[] {new javax.servlet.http.Cookie(this.cookie.getName(), "value")}); + new jakarta.servlet.http.Cookie[] {new jakarta.servlet.http.Cookie(this.cookie.getName(), "value")}); replay(mockRequest); replay(mockResponse); @@ -155,7 +155,7 @@ public void testReadValuePrefixPath() throws Exception { public void testReadValueInvalidPrefixPath() throws Exception { expect(mockRequest.getRequestURI()).andStubReturn("/foobar/index.jsp"); expect(mockRequest.getCookies()).andStubReturn( - new javax.servlet.http.Cookie[] {new javax.servlet.http.Cookie(this.cookie.getName(), "value")}); + new jakarta.servlet.http.Cookie[] {new jakarta.servlet.http.Cookie(this.cookie.getName(), "value")}); replay(mockRequest); replay(mockResponse); diff --git a/web/src/test/java/org/apache/shiro/web/session/HttpServletSessionTest.java b/web/src/test/java/org/apache/shiro/web/session/HttpServletSessionTest.java index 2950584a29..a7b5af17a7 100644 --- a/web/src/test/java/org/apache/shiro/web/session/HttpServletSessionTest.java +++ b/web/src/test/java/org/apache/shiro/web/session/HttpServletSessionTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSession; import static org.assertj.core.api.Assertions.assertThat; import static org.easymock.EasyMock.captureInt; diff --git a/web/src/test/resources/log4j2-test.xml b/web/src/test/resources/log4j2-test.xml index 41b566dc6b..c809ee880c 100644 --- a/web/src/test/resources/log4j2-test.xml +++ b/web/src/test/resources/log4j2-test.xml @@ -49,7 +49,7 @@ - + From 4ecf3865d412d57fba2b58b182cbaf2a6be7291c Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Mon, 3 Mar 2025 23:28:58 +0000 Subject: [PATCH 02/11] Remove lingering guice3 IT pom.xml --- integration-tests/guice3/pom.xml | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 integration-tests/guice3/pom.xml diff --git a/integration-tests/guice3/pom.xml b/integration-tests/guice3/pom.xml deleted file mode 100644 index e69de29bb2..0000000000 From 4421e3c67dca8b6726fac9b90c3a7483dd867471 Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Mon, 3 Mar 2025 23:46:03 +0000 Subject: [PATCH 03/11] Suppress unchecked cast warning --- .../java/org/apache/shiro/authc/SimpleAuthenticationInfo.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/shiro/authc/SimpleAuthenticationInfo.java b/core/src/main/java/org/apache/shiro/authc/SimpleAuthenticationInfo.java index 254936b84b..b39c20781a 100644 --- a/core/src/main/java/org/apache/shiro/authc/SimpleAuthenticationInfo.java +++ b/core/src/main/java/org/apache/shiro/authc/SimpleAuthenticationInfo.java @@ -245,7 +245,8 @@ public void merge(AuthenticationInfo info) { } // At this point, the credentials should be a collection - Collection credentialCollection = (Collection) getCredentials(); + @SuppressWarnings("unchecked") + Collection credentialCollection = (Collection) getCredentials(); if (otherCredentials instanceof Collection collection) { credentialCollection.addAll(collection); } else { From abd8a2826aeb034c639dab5926e1b47189eac2cc Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Mon, 3 Mar 2025 23:46:25 +0000 Subject: [PATCH 04/11] Revert ill merge in test case --- .../java/org/apache/shiro/testing/jakarta/ee/ShiroBeansIT.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroBeansIT.java b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroBeansIT.java index 766304f7cd..01979e1c87 100644 --- a/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroBeansIT.java +++ b/integration-tests/jakarta-ee/src/test/java/org/apache/shiro/testing/jakarta/ee/ShiroBeansIT.java @@ -114,8 +114,7 @@ void checkDontCallWhenNotAuth() { webDriver.get(baseURL + "lastException"); String exceptionText = webDriver.findElement(By.tagName("body")).getText(); assertThat(exceptionText).startsWith( - "WARNING: jakarta.ejb.EJBException: Attempting to perform a user-only operation" + - String.format("capturing correct warning from the server: %s", exceptionText)); + "WARNING: jakarta.ejb.EJBException: Attempting to perform a user-only operation"); } @Test From 287ede85293af3578aaf4395c7cea1a7d1b89bac Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Mon, 3 Mar 2025 23:46:44 +0000 Subject: [PATCH 05/11] Properly disable meecrowave-based IT --- .../shiro/test/web/jakarta/JakartaAbstractContainerIT.java | 2 -- .../java/org/apache/shiro/test/web/jakarta/WebContainerIT.java | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/JakartaAbstractContainerIT.java b/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/JakartaAbstractContainerIT.java index f8ad3cefef..c6abdae9a9 100644 --- a/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/JakartaAbstractContainerIT.java +++ b/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/JakartaAbstractContainerIT.java @@ -24,11 +24,9 @@ import java.io.File; import java.io.FilenameFilter; -import org.junit.jupiter.api.Disabled; import static org.assertj.core.api.Assertions.assertThat; -@Disabled("Needs meecrowave 2.0.0") public abstract class JakartaAbstractContainerIT { protected static Meecrowave meecrowave; diff --git a/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/WebContainerIT.java b/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/WebContainerIT.java index 4074d10e69..f2934b335b 100644 --- a/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/WebContainerIT.java +++ b/samples/web-jakarta/src/test/java/org/apache/shiro/test/web/jakarta/WebContainerIT.java @@ -23,6 +23,7 @@ import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.core.Cookie; import jakarta.ws.rs.core.Response; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import java.net.URI; @@ -31,6 +32,7 @@ import static jakarta.ws.rs.core.MediaType.TEXT_HTML_TYPE; import static org.assertj.core.api.Assertions.assertThat; +@Disabled("Needs meecrowave 2.0.0") public class WebContainerIT extends JakartaAbstractContainerIT { @SuppressWarnings("checkstyle:MagicNumber") From df8107c8b47d5dca8573cbd323f5aace51098e94 Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Mon, 3 Mar 2025 23:47:24 +0000 Subject: [PATCH 06/11] Remove Shiro Spring remoting test --- .../SecureRemoteInvocationFactoryTest.java | 119 ------------------ 1 file changed, 119 deletions(-) delete mode 100644 support/spring/src/test/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactoryTest.java diff --git a/support/spring/src/test/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactoryTest.java b/support/spring/src/test/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactoryTest.java deleted file mode 100644 index e06d83ab4f..0000000000 --- a/support/spring/src/test/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactoryTest.java +++ /dev/null @@ -1,119 +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.remoting; - -import org.aopalliance.intercept.MethodInvocation; -import org.apache.shiro.session.mgt.DefaultSessionKey; -import org.apache.shiro.session.mgt.SessionKey; -import org.apache.shiro.session.mgt.SessionManager; -import org.apache.shiro.util.ThreadContext; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.remoting.support.RemoteInvocation; - -import java.lang.reflect.Method; -import java.util.UUID; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; - -/** - * //TODO - Class JavaDoc! - */ -public class SecureRemoteInvocationFactoryTest { - - @BeforeEach - public void setup() { - ThreadContext.remove(); - } - - @AfterEach - public void tearDown() { - ThreadContext.remove(); - } - - protected Method getMethod(String name, Class clazz) { - Method[] methods = clazz.getMethods(); - for (Method method : methods) { - if (method.getName().equals(name)) { - return method; - } - } - throw new IllegalStateException("'" + name + "' method should exist."); - } - - @Test - void testSessionManagerProxyStartRemoteInvocation() throws Exception { - - SecureRemoteInvocationFactory factory = new SecureRemoteInvocationFactory(); - - MethodInvocation mi = createMock(MethodInvocation.class); - Method startMethod = getMethod("start", SessionManager.class); - expect(mi.getMethod()).andReturn(startMethod).anyTimes(); - - Object[] args = {"localhost"}; - expect(mi.getArguments()).andReturn(args).anyTimes(); - - replay(mi); - - RemoteInvocation ri = factory.createRemoteInvocation(mi); - - verify(mi); - - assertThat(ri.getAttribute(SecureRemoteInvocationFactory.SESSION_ID_KEY)).isNull(); - } - - @Test - void testSessionManagerProxyNonStartRemoteInvocation() throws Exception { - - SecureRemoteInvocationFactory factory = new SecureRemoteInvocationFactory(); - - MethodInvocation mi = createMock(MethodInvocation.class); - Method method = getMethod("getSession", SessionManager.class); - expect(mi.getMethod()).andReturn(method).anyTimes(); - - String dummySessionId = UUID.randomUUID().toString(); - SessionKey sessionKey = new DefaultSessionKey(dummySessionId); - Object[] args = {sessionKey}; - expect(mi.getArguments()).andReturn(args).anyTimes(); - - replay(mi); - - RemoteInvocation ri = factory.createRemoteInvocation(mi); - - verify(mi); - - assertThat(ri.getAttribute(SecureRemoteInvocationFactory.SESSION_ID_KEY)).isEqualTo(dummySessionId); - } - - /*@Test - public void testNonSessionManagerCall() throws Exception { - - SecureRemoteInvocationFactory factory = new SecureRemoteInvocationFactory(); - - MethodInvocation mi = createMock(MethodInvocation.class); - Method method = getMethod("login", SecurityManager.class); - expect(mi.getMethod()).andReturn(method).anyTimes(); - }*/ - -} From dee03948e907a0406ed8d4f5912e43c94dc527b0 Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Tue, 4 Mar 2025 00:04:26 +0000 Subject: [PATCH 07/11] Remove lingering jetty injection argument from IT test case --- .../org/apache/shiro/samples/guice/ContainerIntegrationIT.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/samples/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java b/samples/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java index 17cc17c61b..7963a6a801 100644 --- a/samples/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java +++ b/samples/guice/src/test/java/org/apache/shiro/samples/guice/ContainerIntegrationIT.java @@ -18,7 +18,6 @@ */ package org.apache.shiro.samples.guice; -import com.github.mjeanroy.junit.servers.jetty12.EmbeddedJetty; import org.apache.shiro.testing.web.AbstractContainerIT; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -58,7 +57,7 @@ void logIn() throws FailingHttpStatusCodeException, MalformedURLException, IOExc } @Test - void logInAndRememberMe(EmbeddedJetty jetty) throws Exception { + void logInAndRememberMe() throws Exception { HtmlPage page = webClient.getPage(getBaseUri() + "login.jsp"); HtmlForm form = page.getFormByName("loginform"); form.getInputByName("username").setValueAttribute("root"); From 7a6ef291c8bb30d7028bbfe2d2128e868e2c49dc Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Tue, 4 Mar 2025 00:04:54 +0000 Subject: [PATCH 08/11] Restore dependency details lost in translation --- samples/web-jakarta/pom.xml | 1 + support/aspectj/pom.xml | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/samples/web-jakarta/pom.xml b/samples/web-jakarta/pom.xml index a04e58748b..ca241702b8 100644 --- a/samples/web-jakarta/pom.xml +++ b/samples/web-jakarta/pom.xml @@ -138,6 +138,7 @@ org.apache.meecrowave meecrowave-core + jakarta ${meecrowave.version} test diff --git a/support/aspectj/pom.xml b/support/aspectj/pom.xml index b83d352ce3..d32896189a 100644 --- a/support/aspectj/pom.xml +++ b/support/aspectj/pom.xml @@ -39,6 +39,10 @@ org.apache.shiro shiro-core + + org.aspectj + aspectjrt + org.aspectj aspectjweaver From 535a7ba5968cb9e7ac3921faacd33cd51abd5f9c Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Tue, 4 Mar 2025 00:19:12 +0000 Subject: [PATCH 09/11] Remove stray type for runtime type inference / reification attempt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Shouldn't have included this 🤦 This was a miserable attempt to obtain the concrete `Class` instance for the request key and value types for caches. Please excuse my desperation. --- .../shiro/cache/ehcache/EhCacheManager.java | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCacheManager.java b/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCacheManager.java index 659954301c..985276beaf 100644 --- a/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCacheManager.java +++ b/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCacheManager.java @@ -19,8 +19,6 @@ package org.apache.shiro.cache.ehcache; import java.io.Serializable; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; import java.net.URL; import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheException; @@ -272,29 +270,4 @@ public void destroy() { } } - private abstract static class TypeToken { - - private final Type type; - - protected TypeToken() { - Type superClass = getClass().getGenericSuperclass(); - if (superClass instanceof ParameterizedType ptype) { - type = ptype.getActualTypeArguments()[0]; - } else { - throw new IllegalStateException("Invalid TypeToken; must specify type parameters"); - } - } - - @SuppressWarnings("unchecked") - public Class getType() { - if (type instanceof Class) { - return (Class) type; - } else if (type instanceof ParameterizedType ptype) { - return (Class) ptype.getRawType(); - } else { - throw new IllegalArgumentException("Type " + type + " is not a Class or ParameterizedType"); - } - } - } - } From e5b72fe04d6b6a1e3b52e07e5d53279cf64e7429 Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Wed, 16 Jul 2025 11:56:13 +0100 Subject: [PATCH 10/11] fix(lang): Fix resource retrieval as URL instead of stream --- .../main/java/org/apache/shiro/lang/util/ClassUtils.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lang/src/main/java/org/apache/shiro/lang/util/ClassUtils.java b/lang/src/main/java/org/apache/shiro/lang/util/ClassUtils.java index 4b5ed918a9..2a9b8243b9 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/ClassUtils.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/ClassUtils.java @@ -155,15 +155,15 @@ public static URL getResource(String name) { LOGGER.trace("Resource [" + name + "] was not found via the thread context ClassLoader. Trying the " + "current ClassLoader..."); } - url = CLASS_LANG_CL_ACCESSOR.getResourceStream(name); + url = CLASS_LANG_CL_ACCESSOR.getResource(name); } - if (is == null) { + if (url == null) { if (LOGGER.isTraceEnabled()) { LOGGER.trace("Resource [" + name + "] was not found via the org.apache.shiro.lang ClassLoader. Trying the " + "additionally set ClassLoader..."); } - is = ADDITIONAL_CL_ACCESSOR.getResource(name); + url = ADDITIONAL_CL_ACCESSOR.getResource(name); } if (url == null) { From d8e103145e699358f7efa72ccfa7b7ed6b6b57ff Mon Sep 17 00:00:00 2001 From: Rui Ventura Date: Thu, 7 Aug 2025 08:39:43 +0100 Subject: [PATCH 11/11] fix: Fix typos in schema locations Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- samples/spring-hibernate/src/main/webapp/WEB-INF/web.xml | 2 +- samples/web-jakarta/src/main/webapp/WEB-INF/web.xml | 2 +- samples/web/src/main/webapp/WEB-INF/web.xml | 2 +- support/cdi/src/main/resources/META-INF/beans.xml | 2 +- support/jakarta-ee/src/main/resources/META-INF/beans.xml | 2 +- .../servlet-plugin/src/main/resources/META-INF/web-fragment.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/spring-hibernate/src/main/webapp/WEB-INF/web.xml b/samples/spring-hibernate/src/main/webapp/WEB-INF/web.xml index 0640430980..9b69c25a2a 100644 --- a/samples/spring-hibernate/src/main/webapp/WEB-INF/web.xml +++ b/samples/spring-hibernate/src/main/webapp/WEB-INF/web.xml @@ -19,7 +19,7 @@ --> diff --git a/samples/web-jakarta/src/main/webapp/WEB-INF/web.xml b/samples/web-jakarta/src/main/webapp/WEB-INF/web.xml index 2fcc7832c8..a3c09ecd4e 100644 --- a/samples/web-jakarta/src/main/webapp/WEB-INF/web.xml +++ b/samples/web-jakarta/src/main/webapp/WEB-INF/web.xml @@ -19,7 +19,7 @@ --> diff --git a/samples/web/src/main/webapp/WEB-INF/web.xml b/samples/web/src/main/webapp/WEB-INF/web.xml index 2fcc7832c8..a3c09ecd4e 100644 --- a/samples/web/src/main/webapp/WEB-INF/web.xml +++ b/samples/web/src/main/webapp/WEB-INF/web.xml @@ -19,7 +19,7 @@ --> diff --git a/support/cdi/src/main/resources/META-INF/beans.xml b/support/cdi/src/main/resources/META-INF/beans.xml index c54d976859..9d7f780c15 100644 --- a/support/cdi/src/main/resources/META-INF/beans.xml +++ b/support/cdi/src/main/resources/META-INF/beans.xml @@ -19,5 +19,5 @@ --> + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd"> diff --git a/support/jakarta-ee/src/main/resources/META-INF/beans.xml b/support/jakarta-ee/src/main/resources/META-INF/beans.xml index c54d976859..9d7f780c15 100644 --- a/support/jakarta-ee/src/main/resources/META-INF/beans.xml +++ b/support/jakarta-ee/src/main/resources/META-INF/beans.xml @@ -19,5 +19,5 @@ --> + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd"> diff --git a/support/servlet-plugin/src/main/resources/META-INF/web-fragment.xml b/support/servlet-plugin/src/main/resources/META-INF/web-fragment.xml index 06d94dc7ed..bdfc8d9fd7 100644 --- a/support/servlet-plugin/src/main/resources/META-INF/web-fragment.xml +++ b/support/servlet-plugin/src/main/resources/META-INF/web-fragment.xml @@ -20,7 +20,7 @@ ApacheShiro