From 57557212447257b83c13122c5ae93e028d5e3e19 Mon Sep 17 00:00:00 2001 From: lprimak Date: Tue, 19 Dec 2023 22:52:52 -0600 Subject: [PATCH] enh: cleaned up all compiler warnings --- .../shiro/cache/AbstractCacheManager.java | 15 ++++--- .../cache/MemoryConstrainedCacheManager.java | 4 +- .../config/ogdl/CommonsInterpolator.java | 7 ++- .../shiro/config/ogdl/ReflectionBuilder.java | 12 ++--- core/pom.xml | 4 ++ .../credential/HashedCredentialsMatcher.java | 11 ++--- .../credential/Sha256CredentialsMatcher.java | 1 + .../credential/Sha384CredentialsMatcher.java | 1 + .../credential/Sha512CredentialsMatcher.java | 1 + .../apache/shiro/env/BasicIniEnvironment.java | 4 ++ .../apache/shiro/jndi/JndiObjectFactory.java | 1 + .../shiro/realm/AuthenticatingRealm.java | 2 +- .../shiro/realm/ldap/JndiLdapRealm.java | 1 + .../mgt/eis/EnterpriseCacheSessionDAO.java | 4 +- .../apache/shiro/util/CollectionUtils.java | 2 + .../apache/shiro/util/OsgiDependencies.java | 30 +++++++++++++ .../AbstractHashedCredentialsMatcherTest.java | 4 +- .../HashedCredentialsMatcherTest.java | 1 + .../Sha256CredentialsMatcherTest.java | 5 ++- .../Sha384CredentialsMatcherTest.java | 5 ++- .../Sha512CredentialsMatcherTest.java | 5 ++- .../shiro/config/HashMapCacheManager.java | 4 +- .../shiro/realm/jdbc/JDBCRealmTest.java | 6 +-- .../shiro/realm/ldap/JndiLdapRealmTest.java | 1 + .../shiro/subject/DelegatingSubjectTest.java | 10 ++--- .../test/ExampleShiroIntegrationTest.java | 8 ++-- .../apache/shiro/crypto/hash/SimpleHash.java | 14 +++--- .../hash/format/ProvidedHashFormat.java | 2 + crypto/support/hashes/argon2/pom.xml | 11 +++++ .../hashes/argon2/OsgiDependencies.java | 30 +++++++++++++ crypto/support/hashes/bcrypt/pom.xml | 11 +++++ .../hashes/bcrypt/OsgiDependencies.java | 30 +++++++++++++ .../guice/SampleShiroServletModule.java | 1 + integration-tests/guice4/pom.xml | 4 ++ integration-tests/jakarta-ee/pom.xml | 44 +++++++++++++------ .../testing/web/AbstractContainerIT.java | 5 +-- lang/pom.xml | 5 +++ .../apache/shiro/lang/io/XmlSerializer.java | 1 + .../org/apache/shiro/lang/util/Assert.java | 2 +- .../apache/shiro/lang/util/ClassUtils.java | 31 +++++++------ .../shiro/lang/util/JspEngineDependency.java | 31 +++++++++++++ .../apache/shiro/lang/util/SoftHashMap.java | 2 + .../apache/shiro/lang/util/StringUtils.java | 1 + .../aspectj/bank/SecureBankServiceTest.java | 14 +++--- .../quickstart/src/main/java/Quickstart.java | 6 +-- .../samples/sprhib/dao/HibernateUserDAO.java | 4 +- .../shiro/samples/sprhib/model/Role.java | 7 +-- .../shiro/samples/sprhib/model/User.java | 8 ++-- .../samples/sprhib/security/SampleRealm.java | 1 + .../sprhib/web/CurrentUserInterceptor.java | 4 +- .../spring/config/RemotingServletConfig.java | 1 + samples/web/pom.xml | 2 +- support/aspectj/pom.xml | 5 +++ .../shiro/aspectj/DummyServiceTest.java | 9 ++-- .../apache/shiro/cache/ehcache/EhCache.java | 2 +- support/guice/pom.xml | 1 + .../shiro/guice/web/ShiroWebModule.java | 9 +++- .../shiro/guice/BeanTypeListenerTest.java | 3 ++ .../guice/LifecycleTypeListenerTest.java | 3 ++ .../web/AbstractInjectionProviderTest.java | 1 + .../shiro/guice/web/DefaultFiltersTest.java | 1 + .../web/FilterChainResolverProviderTest.java | 4 +- .../web/PathMatchingFilterProviderTest.java | 1 + .../shiro/guice/web/ShiroWebModuleTest.java | 4 ++ .../web/SimpleFilterChainResolverTest.java | 1 + support/jcache/pom.xml | 2 +- .../org/apache/shiro/tools/hasher/Hasher.java | 7 ++- .../config/IniFilterChainResolverFactory.java | 1 + .../shiro/web/env/IniWebEnvironment.java | 10 ++++- .../filter/mgt/DefaultFilterChainManager.java | 4 +- .../web/servlet/AbstractShiroFilter.java | 11 ++--- .../web/servlet/ShiroHttpServletRequest.java | 1 + .../web/servlet/ShiroHttpServletResponse.java | 3 +- .../shiro/web/servlet/ShiroHttpSession.java | 24 +++++----- .../WebIniSecurityManagerFactoryTest.java | 2 + .../filter/mgt/SimpleNamedFilterListTest.java | 5 +-- .../mgt/DefaultWebSecurityManagerTest.java | 4 ++ 77 files changed, 384 insertions(+), 155 deletions(-) create mode 100644 core/src/main/java/org/apache/shiro/util/OsgiDependencies.java create mode 100644 crypto/support/hashes/argon2/src/main/java/org/apache/shiro/crypto/support/hashes/argon2/OsgiDependencies.java create mode 100644 crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/OsgiDependencies.java create mode 100644 lang/src/main/java/org/apache/shiro/lang/util/JspEngineDependency.java diff --git a/cache/src/main/java/org/apache/shiro/cache/AbstractCacheManager.java b/cache/src/main/java/org/apache/shiro/cache/AbstractCacheManager.java index 3c2d6b3667..62550c2587 100644 --- a/cache/src/main/java/org/apache/shiro/cache/AbstractCacheManager.java +++ b/cache/src/main/java/org/apache/shiro/cache/AbstractCacheManager.java @@ -38,13 +38,13 @@ public abstract class AbstractCacheManager implements CacheManager, Destroyable /** * Retains all Cache objects maintained by this cache manager. */ - private final ConcurrentMap caches; + private final ConcurrentMap> caches; /** * Default no-arg constructor that instantiates an internal name-to-cache {@code ConcurrentMap}. */ public AbstractCacheManager() { - this.caches = new ConcurrentHashMap(); + this.caches = new ConcurrentHashMap<>(); } /** @@ -56,17 +56,18 @@ public AbstractCacheManager() { * @throws IllegalArgumentException if the {@code name} argument is {@code null} or does not contain text. * @throws CacheException if there is a problem lazily creating a {@code Cache} instance. */ + @SuppressWarnings("unchecked") public Cache getCache(String name) throws IllegalArgumentException, CacheException { if (!StringUtils.hasText(name)) { throw new IllegalArgumentException("Cache name cannot be null or empty."); } - Cache cache; + Cache cache; - cache = caches.get(name); + cache = (Cache) caches.get(name); if (cache == null) { cache = createCache(name); - Cache existing = caches.putIfAbsent(name, cache); + Cache existing = (Cache) caches.putIfAbsent(name, cache); if (existing != null) { cache = existing; } @@ -83,7 +84,7 @@ public Cache getCache(String name) throws IllegalArgumentException, * @return a new {@code Cache} instance associated with the specified {@code name}. * @throws CacheException if the {@code Cache} instance cannot be created. */ - protected abstract Cache createCache(String name) throws CacheException; + protected abstract Cache createCache(String name) throws CacheException; /** * Cleanup method that first {@link LifecycleUtils#destroy destroys} all of it's managed caches and then @@ -101,7 +102,7 @@ public void destroy() throws Exception { } public String toString() { - Collection values = caches.values(); + Collection> values = caches.values(); StringBuilder sb = new StringBuilder(getClass().getSimpleName()) .append(" with ") .append(caches.size()) diff --git a/cache/src/main/java/org/apache/shiro/cache/MemoryConstrainedCacheManager.java b/cache/src/main/java/org/apache/shiro/cache/MemoryConstrainedCacheManager.java index f9f683e20a..017403b91d 100644 --- a/cache/src/main/java/org/apache/shiro/cache/MemoryConstrainedCacheManager.java +++ b/cache/src/main/java/org/apache/shiro/cache/MemoryConstrainedCacheManager.java @@ -42,7 +42,7 @@ public class MemoryConstrainedCacheManager extends AbstractCacheManager { * @return a new {@link MapCache MapCache} instance backed by a {@link SoftHashMap}. */ @Override - protected Cache createCache(String name) { - return new MapCache(name, new SoftHashMap()); + protected Cache createCache(String name) { + return new MapCache<>(name, new SoftHashMap<>()); } } diff --git a/config/ogdl/src/main/java/org/apache/shiro/config/ogdl/CommonsInterpolator.java b/config/ogdl/src/main/java/org/apache/shiro/config/ogdl/CommonsInterpolator.java index 5b4da74a46..222da79cb9 100644 --- a/config/ogdl/src/main/java/org/apache/shiro/config/ogdl/CommonsInterpolator.java +++ b/config/ogdl/src/main/java/org/apache/shiro/config/ogdl/CommonsInterpolator.java @@ -20,8 +20,7 @@ import org.apache.commons.configuration2.interpol.ConfigurationInterpolator; import org.apache.commons.configuration2.interpol.ConstantLookup; -import org.apache.commons.configuration2.interpol.EnvironmentLookup; -import org.apache.commons.configuration2.interpol.SystemPropertiesLookup; +import org.apache.commons.configuration2.interpol.DefaultLookups; /** * Commons-Config interpolation wrapper. This implementation uses a {@link ConfigurationInterpolator} with the default @@ -61,8 +60,8 @@ public CommonsInterpolator() { this.interpolator = new ConfigurationInterpolator(); interpolator.registerLookup("const", new ConstantLookup()); - interpolator.addDefaultLookup(new SystemPropertiesLookup()); - interpolator.addDefaultLookup(new EnvironmentLookup()); + interpolator.addDefaultLookup(DefaultLookups.SYSTEM_PROPERTIES.getLookup()); + interpolator.addDefaultLookup(DefaultLookups.ENVIRONMENT.getLookup()); } @Override 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 06950105ec..f33163952a 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 @@ -126,9 +126,10 @@ public ReflectionBuilder(Map defaults) { // SHIRO-739 beanUtilsBean = new BeanUtilsBean(new ConvertUtilsBean() { @Override - public Object convert(String value, Class clazz) { + @SuppressWarnings("unchecked") + public Object convert(String value, Class clazz) { if (clazz.isEnum()) { - return Enum.valueOf(clazz, value); + return Enum.valueOf((Class) clazz, value); } else { return super.convert(value, clazz); } @@ -460,7 +461,7 @@ protected Object resolveReference(String reference) { return referencedObject; } - protected boolean isTypedProperty(Object object, String propertyName, Class clazz) { + protected boolean isTypedProperty(Object object, String propertyName, Class clazz) { if (clazz == null) { throw new NullPointerException("type (class) argument cannot be null."); } @@ -471,7 +472,7 @@ protected boolean isTypedProperty(Object object, String propertyName, Class claz + "type " + object.getClass().getName() + "."; throw new ConfigurationException(msg); } - Class propertyClazz = descriptor.getPropertyType(); + Class propertyClazz = descriptor.getPropertyType(); return clazz.isAssignableFrom(propertyClazz); } catch (ConfigurationException ce) { //let it propagate: @@ -666,7 +667,8 @@ protected void applyProperty(Object object, String propertyPath, Object value) { } else { //we're assigning a map or array entry. Check to see which we should call: if (isTypedProperty(object, mapPropertyPath, Map.class)) { - Map map = (Map) getProperty(object, mapPropertyPath); + @SuppressWarnings("unchecked") + var map = (Map) getProperty(object, mapPropertyPath); Object mapKey = resolveValue(keyString); //noinspection unchecked map.put(mapKey, value); diff --git a/core/pom.xml b/core/pom.xml index 57c0e5b30d..8930983363 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -143,6 +143,10 @@ provided true + + org.apache.commons + commons-configuration2 + 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 87c663079c..f735f9ad2f 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 @@ -21,7 +21,6 @@ import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SaltedAuthenticationInfo; -import org.apache.shiro.crypto.hash.AbstractHash; import org.apache.shiro.crypto.hash.Hash; import org.apache.shiro.crypto.hash.SimpleHash; import org.apache.shiro.lang.codec.Base64; @@ -294,11 +293,7 @@ public int getHashIterations() { * @param hashIterations the number of times to hash a submitted {@code AuthenticationToken}'s credentials. */ public void setHashIterations(int hashIterations) { - if (hashIterations < 1) { - this.hashIterations = 1; - } else { - this.hashIterations = hashIterations; - } + this.hashIterations = Math.max(hashIterations, 1); } /** @@ -362,7 +357,7 @@ protected Object getCredentials(AuthenticationInfo info) { storedBytes = Base64.decode(storedBytes); } } - AbstractHash hash = newHashInstance(); + SimpleHash hash = newHashInstance(); hash.setBytes(storedBytes); return hash; } @@ -460,7 +455,7 @@ protected Hash hashProvidedCredentials(Object credentials, Object salt, int hash * * @return a new, uninitialized instance, without its byte array set. */ - protected AbstractHash newHashInstance() { + protected SimpleHash newHashInstance() { String hashAlgorithmName = assertHashAlgorithmName(); return new SimpleHash(hashAlgorithmName); } diff --git a/core/src/main/java/org/apache/shiro/authc/credential/Sha256CredentialsMatcher.java b/core/src/main/java/org/apache/shiro/authc/credential/Sha256CredentialsMatcher.java index 76bd73765a..c60cdfd566 100644 --- a/core/src/main/java/org/apache/shiro/authc/credential/Sha256CredentialsMatcher.java +++ b/core/src/main/java/org/apache/shiro/authc/credential/Sha256CredentialsMatcher.java @@ -29,6 +29,7 @@ * @deprecated since 1.1 - use the HashedCredentialsMatcher directly and set its * {@link HashedCredentialsMatcher#setHashAlgorithmName(String) hashAlgorithmName} property. */ +@Deprecated public class Sha256CredentialsMatcher extends HashedCredentialsMatcher { public Sha256CredentialsMatcher() { diff --git a/core/src/main/java/org/apache/shiro/authc/credential/Sha384CredentialsMatcher.java b/core/src/main/java/org/apache/shiro/authc/credential/Sha384CredentialsMatcher.java index 8b736a16eb..880c7131b8 100644 --- a/core/src/main/java/org/apache/shiro/authc/credential/Sha384CredentialsMatcher.java +++ b/core/src/main/java/org/apache/shiro/authc/credential/Sha384CredentialsMatcher.java @@ -29,6 +29,7 @@ * @deprecated since 1.1 - use the HashedCredentialsMatcher directly and set its * {@link HashedCredentialsMatcher#setHashAlgorithmName(String) hashAlgorithmName} property. */ +@Deprecated public class Sha384CredentialsMatcher extends HashedCredentialsMatcher { public Sha384CredentialsMatcher() { diff --git a/core/src/main/java/org/apache/shiro/authc/credential/Sha512CredentialsMatcher.java b/core/src/main/java/org/apache/shiro/authc/credential/Sha512CredentialsMatcher.java index 797317ef70..3894b780d0 100644 --- a/core/src/main/java/org/apache/shiro/authc/credential/Sha512CredentialsMatcher.java +++ b/core/src/main/java/org/apache/shiro/authc/credential/Sha512CredentialsMatcher.java @@ -29,6 +29,7 @@ * @deprecated since 1.1 - use the HashedCredentialsMatcher directly and set its * {@link HashedCredentialsMatcher#setHashAlgorithmName(String) hashAlgorithmName} property. */ +@Deprecated public class Sha512CredentialsMatcher extends HashedCredentialsMatcher { public Sha512CredentialsMatcher() { diff --git a/core/src/main/java/org/apache/shiro/env/BasicIniEnvironment.java b/core/src/main/java/org/apache/shiro/env/BasicIniEnvironment.java index c4abba0b9b..5e8e8f7e7e 100644 --- a/core/src/main/java/org/apache/shiro/env/BasicIniEnvironment.java +++ b/core/src/main/java/org/apache/shiro/env/BasicIniEnvironment.java @@ -33,11 +33,15 @@ * @since 1.5 */ public class BasicIniEnvironment extends DefaultEnvironment { + @SuppressWarnings({"deprecation", "checkstyle:JavadocVariable"}) + public static final String INI_REALM_NAME = IniSecurityManagerFactory.INI_REALM_NAME; + public BasicIniEnvironment(Ini ini) { this(ini, (name) -> null); } public BasicIniEnvironment(Ini ini, Function alternateObjectSupplier) { + @SuppressWarnings("deprecation") var securityManagerFactory = new IniSecurityManagerFactory(ini); securityManagerFactory.getReflectionBuilder().setAlternateObjectSupplier(alternateObjectSupplier); setSecurityManager(securityManagerFactory.getInstance()); diff --git a/core/src/main/java/org/apache/shiro/jndi/JndiObjectFactory.java b/core/src/main/java/org/apache/shiro/jndi/JndiObjectFactory.java index 2fa72bb442..ade30b88ae 100644 --- a/core/src/main/java/org/apache/shiro/jndi/JndiObjectFactory.java +++ b/core/src/main/java/org/apache/shiro/jndi/JndiObjectFactory.java @@ -33,6 +33,7 @@ public class JndiObjectFactory extends JndiLocator implements Factory { private String resourceName; private Class requiredType; + @SuppressWarnings("unchecked") public T getInstance() { try { if (requiredType != null) { diff --git a/core/src/main/java/org/apache/shiro/realm/AuthenticatingRealm.java b/core/src/main/java/org/apache/shiro/realm/AuthenticatingRealm.java index 58ea1e9652..f463ddd230 100644 --- a/core/src/main/java/org/apache/shiro/realm/AuthenticatingRealm.java +++ b/core/src/main/java/org/apache/shiro/realm/AuthenticatingRealm.java @@ -223,7 +223,7 @@ public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) { * @return the authenticationToken class supported by this realm. * @see #setAuthenticationTokenClass */ - public Class getAuthenticationTokenClass() { + public Class getAuthenticationTokenClass() { return authenticationTokenClass; } diff --git a/core/src/main/java/org/apache/shiro/realm/ldap/JndiLdapRealm.java b/core/src/main/java/org/apache/shiro/realm/ldap/JndiLdapRealm.java index 415c97fbe4..e83191ad50 100644 --- a/core/src/main/java/org/apache/shiro/realm/ldap/JndiLdapRealm.java +++ b/core/src/main/java/org/apache/shiro/realm/ldap/JndiLdapRealm.java @@ -25,6 +25,7 @@ * @since 1.1 * @deprecated Renamed to {@link DefaultLdapRealm}, this class will be removed prior to 2.0 */ +@Deprecated public class JndiLdapRealm extends DefaultLdapRealm { } diff --git a/core/src/main/java/org/apache/shiro/session/mgt/eis/EnterpriseCacheSessionDAO.java b/core/src/main/java/org/apache/shiro/session/mgt/eis/EnterpriseCacheSessionDAO.java index c131dfa156..ee4b37cf1c 100644 --- a/core/src/main/java/org/apache/shiro/session/mgt/eis/EnterpriseCacheSessionDAO.java +++ b/core/src/main/java/org/apache/shiro/session/mgt/eis/EnterpriseCacheSessionDAO.java @@ -54,8 +54,8 @@ public class EnterpriseCacheSessionDAO extends CachingSessionDAO { public EnterpriseCacheSessionDAO() { setCacheManager(new AbstractCacheManager() { @Override - protected Cache createCache(String name) throws CacheException { - return new MapCache(name, new ConcurrentHashMap()); + protected Cache createCache(String name) throws CacheException { + return new MapCache<>(name, new ConcurrentHashMap<>()); } }); } diff --git a/core/src/main/java/org/apache/shiro/util/CollectionUtils.java b/core/src/main/java/org/apache/shiro/util/CollectionUtils.java index 61cd05b799..a1b37d3012 100644 --- a/core/src/main/java/org/apache/shiro/util/CollectionUtils.java +++ b/core/src/main/java/org/apache/shiro/util/CollectionUtils.java @@ -38,6 +38,7 @@ public final class CollectionUtils { private CollectionUtils() { } + @SafeVarargs public static Set asSet(E... elements) { if (elements == null || elements.length == 0) { return Collections.emptySet(); @@ -116,6 +117,7 @@ public static boolean isEmpty(PrincipalCollection principals) { return principals == null || principals.isEmpty(); } + @SafeVarargs public static List asList(E... elements) { if (elements == null || elements.length == 0) { return Collections.emptyList(); diff --git a/core/src/main/java/org/apache/shiro/util/OsgiDependencies.java b/core/src/main/java/org/apache/shiro/util/OsgiDependencies.java new file mode 100644 index 0000000000..f6e9f48073 --- /dev/null +++ b/core/src/main/java/org/apache/shiro/util/OsgiDependencies.java @@ -0,0 +1,30 @@ +/* + * 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.util; + +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.configuration2.BaseConfiguration; + +/** + * This class only exists to satisfy the OSGi plugin + */ +class OsgiDependencies { + BeanUtils bu; + BaseConfiguration bc; +} diff --git a/core/src/test/java/org/apache/shiro/authc/credential/AbstractHashedCredentialsMatcherTest.java b/core/src/test/java/org/apache/shiro/authc/credential/AbstractHashedCredentialsMatcherTest.java index 50fdb3a58c..98802c87bc 100644 --- a/core/src/test/java/org/apache/shiro/authc/credential/AbstractHashedCredentialsMatcherTest.java +++ b/core/src/test/java/org/apache/shiro/authc/credential/AbstractHashedCredentialsMatcherTest.java @@ -25,7 +25,7 @@ import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; -import org.apache.shiro.crypto.hash.AbstractHash; +import org.apache.shiro.crypto.hash.SimpleHash; import org.apache.shiro.lang.util.ClassUtils; import org.junit.jupiter.api.Test; @@ -36,7 +36,7 @@ public abstract class AbstractHashedCredentialsMatcherTest { public abstract Class getMatcherClass(); - public abstract AbstractHash hash(Object credentials); + public abstract SimpleHash hash(Object credentials); @Test void testBasic() { diff --git a/core/src/test/java/org/apache/shiro/authc/credential/HashedCredentialsMatcherTest.java b/core/src/test/java/org/apache/shiro/authc/credential/HashedCredentialsMatcherTest.java index 73d270d9ea..f6a0c20640 100644 --- a/core/src/test/java/org/apache/shiro/authc/credential/HashedCredentialsMatcherTest.java +++ b/core/src/test/java/org/apache/shiro/authc/credential/HashedCredentialsMatcherTest.java @@ -95,6 +95,7 @@ public Object getCredentials() { * SHIRO-186 edits. */ @Test + @SuppressWarnings("deprecation") void testBackwardsCompatibleSaltedAuthenticationInfo() { HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(Sha512Hash.ALGORITHM_NAME); //enable this for Shiro 1.0 backwards compatibility: diff --git a/core/src/test/java/org/apache/shiro/authc/credential/Sha256CredentialsMatcherTest.java b/core/src/test/java/org/apache/shiro/authc/credential/Sha256CredentialsMatcherTest.java index 5e4c5cd3dd..d4e3715e70 100644 --- a/core/src/test/java/org/apache/shiro/authc/credential/Sha256CredentialsMatcherTest.java +++ b/core/src/test/java/org/apache/shiro/authc/credential/Sha256CredentialsMatcherTest.java @@ -18,20 +18,21 @@ */ package org.apache.shiro.authc.credential; -import org.apache.shiro.crypto.hash.AbstractHash; import org.apache.shiro.crypto.hash.Sha256Hash; +import org.apache.shiro.crypto.hash.SimpleHash; /** * @since Jun 10, 2008 5:01:00 PM */ +@Deprecated public class Sha256CredentialsMatcherTest extends AbstractHashedCredentialsMatcherTest { public Class getMatcherClass() { return Sha256CredentialsMatcher.class; } - public AbstractHash hash(Object credentials) { + public SimpleHash hash(Object credentials) { return new Sha256Hash(credentials); } } diff --git a/core/src/test/java/org/apache/shiro/authc/credential/Sha384CredentialsMatcherTest.java b/core/src/test/java/org/apache/shiro/authc/credential/Sha384CredentialsMatcherTest.java index e3cc6cec23..0c9b7437fd 100644 --- a/core/src/test/java/org/apache/shiro/authc/credential/Sha384CredentialsMatcherTest.java +++ b/core/src/test/java/org/apache/shiro/authc/credential/Sha384CredentialsMatcherTest.java @@ -18,20 +18,21 @@ */ package org.apache.shiro.authc.credential; -import org.apache.shiro.crypto.hash.AbstractHash; import org.apache.shiro.crypto.hash.Sha384Hash; +import org.apache.shiro.crypto.hash.SimpleHash; /** * @since Jun 10, 2008 5:02:27 PM */ +@Deprecated public class Sha384CredentialsMatcherTest extends AbstractHashedCredentialsMatcherTest { public Class getMatcherClass() { return Sha384CredentialsMatcher.class; } - public AbstractHash hash(Object credentials) { + public SimpleHash hash(Object credentials) { return new Sha384Hash(credentials); } } diff --git a/core/src/test/java/org/apache/shiro/authc/credential/Sha512CredentialsMatcherTest.java b/core/src/test/java/org/apache/shiro/authc/credential/Sha512CredentialsMatcherTest.java index 3da3eba199..dd96ea27d8 100644 --- a/core/src/test/java/org/apache/shiro/authc/credential/Sha512CredentialsMatcherTest.java +++ b/core/src/test/java/org/apache/shiro/authc/credential/Sha512CredentialsMatcherTest.java @@ -18,20 +18,21 @@ */ package org.apache.shiro.authc.credential; -import org.apache.shiro.crypto.hash.AbstractHash; import org.apache.shiro.crypto.hash.Sha512Hash; +import org.apache.shiro.crypto.hash.SimpleHash; /** * @since Jun 10, 2008 5:02:58 PM */ +@Deprecated public class Sha512CredentialsMatcherTest extends AbstractHashedCredentialsMatcherTest { public Class getMatcherClass() { return Sha512CredentialsMatcher.class; } - public AbstractHash hash(Object credentials) { + public SimpleHash hash(Object credentials) { return new Sha512Hash(credentials); } } diff --git a/core/src/test/java/org/apache/shiro/config/HashMapCacheManager.java b/core/src/test/java/org/apache/shiro/config/HashMapCacheManager.java index 853d1e7220..ce5f8dd7a7 100644 --- a/core/src/test/java/org/apache/shiro/config/HashMapCacheManager.java +++ b/core/src/test/java/org/apache/shiro/config/HashMapCacheManager.java @@ -35,8 +35,8 @@ public class HashMapCacheManager extends AbstractCacheManager { @Override - protected Cache createCache(String name) throws CacheException { - return new HashMapCache(name); + protected Cache createCache(String name) throws CacheException { + return new HashMapCache<>(name); } //This class is not strictly necessary - it exists to verify a test case only. diff --git a/core/src/test/java/org/apache/shiro/realm/jdbc/JDBCRealmTest.java b/core/src/test/java/org/apache/shiro/realm/jdbc/JDBCRealmTest.java index 2ff5dcec46..58e9d31d9f 100644 --- a/core/src/test/java/org/apache/shiro/realm/jdbc/JDBCRealmTest.java +++ b/core/src/test/java/org/apache/shiro/realm/jdbc/JDBCRealmTest.java @@ -22,10 +22,10 @@ import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.IncorrectCredentialsException; import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.env.BasicIniEnvironment; import org.apache.shiro.lang.codec.Base64; import org.apache.shiro.lang.codec.CodecSupport; import org.apache.shiro.config.Ini; -import org.apache.shiro.ini.IniSecurityManagerFactory; import org.apache.shiro.crypto.hash.Sha256Hash; import org.apache.shiro.mgt.DefaultSecurityManager; import org.apache.shiro.realm.AuthorizingRealm; @@ -84,8 +84,8 @@ public void setup(TestInfo testInfo) { config.setSectionProperty("main", "myRealm.credentialsMatcher", "$myRealmCredentialsMatcher"); config.setSectionProperty("main", "securityManager.sessionManager.sessionValidationSchedulerEnabled", "false"); - IniSecurityManagerFactory factory = new IniSecurityManagerFactory(config); - securityManager = (DefaultSecurityManager) factory.createInstance(); + var basicIniEnvironment = new BasicIniEnvironment(config); + securityManager = (DefaultSecurityManager) basicIniEnvironment.getSecurityManager(); SecurityUtils.setSecurityManager(securityManager); // Create a database and realm for the test diff --git a/core/src/test/java/org/apache/shiro/realm/ldap/JndiLdapRealmTest.java b/core/src/test/java/org/apache/shiro/realm/ldap/JndiLdapRealmTest.java index 03f3c6c9f2..1426e8e8f2 100644 --- a/core/src/test/java/org/apache/shiro/realm/ldap/JndiLdapRealmTest.java +++ b/core/src/test/java/org/apache/shiro/realm/ldap/JndiLdapRealmTest.java @@ -29,6 +29,7 @@ * @deprecated Replaced by {@link DefaultLdapRealmTest} */ @SuppressWarnings({"ThrowableInstanceNeverThrown", "deprecation"}) +@Deprecated public class JndiLdapRealmTest extends DefaultLdapRealmTest { protected DefaultLdapRealm getNewRealmUnderTest() { diff --git a/core/src/test/java/org/apache/shiro/subject/DelegatingSubjectTest.java b/core/src/test/java/org/apache/shiro/subject/DelegatingSubjectTest.java index 311b3591d8..6dc41fca64 100644 --- a/core/src/test/java/org/apache/shiro/subject/DelegatingSubjectTest.java +++ b/core/src/test/java/org/apache/shiro/subject/DelegatingSubjectTest.java @@ -21,7 +21,7 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.Ini; -import org.apache.shiro.ini.IniSecurityManagerFactory; +import org.apache.shiro.env.BasicIniEnvironment; import org.apache.shiro.mgt.DefaultSecurityManager; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.session.Session; @@ -35,6 +35,7 @@ import java.io.Serializable; import java.util.concurrent.Callable; +import static org.apache.shiro.env.BasicIniEnvironment.INI_REALM_NAME; import static org.easymock.EasyMock.createNiceMock; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -149,8 +150,7 @@ void testRunAs() { users.put("user1", "user1,role1"); users.put("user2", "user2,role2"); users.put("user3", "user3,role3"); - IniSecurityManagerFactory factory = new IniSecurityManagerFactory(ini); - SecurityManager sm = factory.getInstance(); + SecurityManager sm = new BasicIniEnvironment(ini).getSecurityManager(); //login as user1 Subject subject = new Subject.Builder(sm).buildSubject(); @@ -165,7 +165,7 @@ void testRunAs() { assertNull(subject.getPreviousPrincipals()); //runAs user2: - subject.runAs(new SimplePrincipalCollection("user2", IniSecurityManagerFactory.INI_REALM_NAME)); + subject.runAs(new SimplePrincipalCollection("user2", INI_REALM_NAME)); assertTrue(subject.isRunAs()); assertEquals("user2", subject.getPrincipal()); assertTrue(subject.hasRole("role2")); @@ -178,7 +178,7 @@ void testRunAs() { assertTrue(previous.getPrimaryPrincipal().equals("user1")); //test the stack functionality: While as user2, run as user3: - subject.runAs(new SimplePrincipalCollection("user3", IniSecurityManagerFactory.INI_REALM_NAME)); + subject.runAs(new SimplePrincipalCollection("user3", INI_REALM_NAME)); assertTrue(subject.isRunAs()); assertEquals("user3", subject.getPrincipal()); assertTrue(subject.hasRole("role3")); diff --git a/core/src/test/java/org/apache/shiro/test/ExampleShiroIntegrationTest.java b/core/src/test/java/org/apache/shiro/test/ExampleShiroIntegrationTest.java index 202d1dc62d..0559a6703f 100644 --- a/core/src/test/java/org/apache/shiro/test/ExampleShiroIntegrationTest.java +++ b/core/src/test/java/org/apache/shiro/test/ExampleShiroIntegrationTest.java @@ -18,10 +18,8 @@ */ package org.apache.shiro.test; -import org.apache.shiro.ini.IniSecurityManagerFactory; -import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.env.BasicIniEnvironment; import org.apache.shiro.subject.Subject; -import org.apache.shiro.lang.util.Factory; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -38,8 +36,8 @@ public static void beforeClass() { //0. Build and set the SecurityManager used to build Subject instances used in your tests // This typically only needs to be done once per class if your shiro.ini doesn't change, // otherwise, you'll need to do this logic in each test that is different - Factory factory = new IniSecurityManagerFactory("classpath:test.shiro.ini"); - setSecurityManager(factory.getInstance()); + var basicIniEnvironment = new BasicIniEnvironment("classpath:test.shiro.ini"); + setSecurityManager(basicIniEnvironment.getSecurityManager()); } @Test 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 ed70ba2067..8764117b78 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 @@ -21,6 +21,7 @@ import org.apache.shiro.crypto.UnknownAlgorithmException; import org.apache.shiro.lang.codec.Base64; import org.apache.shiro.lang.codec.CodecException; +import org.apache.shiro.lang.codec.CodecSupport; import org.apache.shiro.lang.codec.Hex; import org.apache.shiro.lang.util.ByteSource; import org.apache.shiro.lang.util.SimpleByteSource; @@ -28,6 +29,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.Serializable; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; @@ -40,12 +42,12 @@ * (e.g. {@link Sha512Hash}, etc.), but it does allow for any algorithm name to be specified in case the other subclass * implementations do not represent an algorithm that you may want to use. *

- * As of Shiro 1.1, this class effectively replaces the (now-deprecated) {@link AbstractHash} class. It subclasses + * As of Shiro 1.1, this class effectively replaces the (now-deprecated) {@code AbstractHash} class. It subclasses * {@code AbstractHash} only to retain backwards-compatibility. * * @since 1.1 */ -public class SimpleHash extends AbstractHash { +public class SimpleHash extends CodecSupport implements Hash, Serializable { private static final int DEFAULT_ITERATIONS = 1; private static final long serialVersionUID = -6689895264902387303L; @@ -122,7 +124,6 @@ public SimpleHash(String algorithmName) { * @throws UnknownAlgorithmException if the {@code algorithmName} is not available. */ public SimpleHash(String algorithmName, Object source) throws CodecException, UnknownAlgorithmException { - //noinspection NullableProblems this(algorithmName, source, SimpleByteSource.empty(), DEFAULT_ITERATIONS); } @@ -302,7 +303,6 @@ public byte[] getBytes() { * * @param alreadyHashedBytes the raw already-hashed bytes to store in this instance. */ - @Override public void setBytes(byte[] alreadyHashedBytes) { this.bytes = alreadyHashedBytes; this.hexEncoded = null; @@ -342,7 +342,6 @@ public void setSalt(ByteSource salt) { * @return the MessageDigest object for the specified {@code algorithm}. * @throws UnknownAlgorithmException if the specified algorithm name is not available. */ - @Override protected MessageDigest getDigest(String algorithmName) throws UnknownAlgorithmException { try { return MessageDigest.getInstance(algorithmName); @@ -359,9 +358,8 @@ protected MessageDigest getDigest(String algorithmName) throws UnknownAlgorithmE * @return the hashed bytes. * @throws UnknownAlgorithmException if the configured {@link #getAlgorithmName() algorithmName} is not available. */ - @Override protected byte[] hash(byte[] bytes) throws UnknownAlgorithmException { - return hash(bytes, null, DEFAULT_ITERATIONS); + return hash(bytes, new byte[0], DEFAULT_ITERATIONS); } /** @@ -372,7 +370,6 @@ protected byte[] hash(byte[] bytes) throws UnknownAlgorithmException { * @return the hashed bytes * @throws UnknownAlgorithmException if the configured {@link #getAlgorithmName() algorithmName} is not available. */ - @Override protected byte[] hash(byte[] bytes, byte[] salt) throws UnknownAlgorithmException { return hash(bytes, salt, DEFAULT_ITERATIONS); } @@ -386,7 +383,6 @@ protected byte[] hash(byte[] bytes, byte[] salt) throws UnknownAlgorithmExceptio * @return the hashed bytes. * @throws UnknownAlgorithmException if the {@link #getAlgorithmName() algorithmName} is not available. */ - @Override protected byte[] hash(byte[] bytes, byte[] salt, int hashIterations) throws UnknownAlgorithmException { MessageDigest digest = getDigest(getAlgorithmName()); if (salt.length != 0) { diff --git a/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/format/ProvidedHashFormat.java b/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/format/ProvidedHashFormat.java index 9ed5246d86..746f165bac 100644 --- a/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/format/ProvidedHashFormat.java +++ b/crypto/hash/src/main/java/org/apache/shiro/crypto/hash/format/ProvidedHashFormat.java @@ -30,11 +30,13 @@ public enum ProvidedHashFormat { /** * Value representing the {@link HexFormat} implementation. */ + @Deprecated HEX(HexFormat.class), /** * Value representing the {@link Base64Format} implementation. */ + @Deprecated BASE64(Base64Format.class), /** diff --git a/crypto/support/hashes/argon2/pom.xml b/crypto/support/hashes/argon2/pom.xml index 60fd6b6154..22e1617ba6 100644 --- a/crypto/support/hashes/argon2/pom.xml +++ b/crypto/support/hashes/argon2/pom.xml @@ -43,6 +43,17 @@ org.apache.shiro shiro-crypto-hash + + aopalliance + aopalliance + 1.0 + true + + + com.google.inject + guice + true + diff --git a/crypto/support/hashes/argon2/src/main/java/org/apache/shiro/crypto/support/hashes/argon2/OsgiDependencies.java b/crypto/support/hashes/argon2/src/main/java/org/apache/shiro/crypto/support/hashes/argon2/OsgiDependencies.java new file mode 100644 index 0000000000..2b080bb6a7 --- /dev/null +++ b/crypto/support/hashes/argon2/src/main/java/org/apache/shiro/crypto/support/hashes/argon2/OsgiDependencies.java @@ -0,0 +1,30 @@ +/* + * 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.crypto.support.hashes.argon2; + +import com.google.inject.Inject; +import org.aopalliance.aop.Advice; + +/** + * only present to satisfy OSGi plugin + */ +class OsgiDependencies { + Advice advice; + Inject inject; +} diff --git a/crypto/support/hashes/bcrypt/pom.xml b/crypto/support/hashes/bcrypt/pom.xml index d832b50b76..079cb59742 100644 --- a/crypto/support/hashes/bcrypt/pom.xml +++ b/crypto/support/hashes/bcrypt/pom.xml @@ -43,6 +43,17 @@ org.apache.shiro shiro-crypto-hash + + aopalliance + aopalliance + 1.0 + true + + + com.google.inject + guice + true + diff --git a/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/OsgiDependencies.java b/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/OsgiDependencies.java new file mode 100644 index 0000000000..c0a520bdf7 --- /dev/null +++ b/crypto/support/hashes/bcrypt/src/main/java/org/apache/shiro/crypto/support/hashes/bcrypt/OsgiDependencies.java @@ -0,0 +1,30 @@ +/* + * 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.crypto.support.hashes.bcrypt; + +import com.google.inject.Inject; +import org.aopalliance.aop.Advice; + +/** + * only present to satisfy OSGi plugin + */ +class OsgiDependencies { + Advice advice; + Inject inject; +} 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 index 6254a0d1db..2003537de1 100644 --- 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 @@ -45,6 +45,7 @@ public SampleShiroServletModule(ServletContext servletContext) { } @Override + @SuppressWarnings({"unchecked", "deprecation"}) protected void configureShiroWeb() { bindConstant().annotatedWith(Names.named("shiro.loginUrl")).to("/login.jsp"); try { diff --git a/integration-tests/guice4/pom.xml b/integration-tests/guice4/pom.xml index e3dc2e706f..323486a573 100644 --- a/integration-tests/guice4/pom.xml +++ b/integration-tests/guice4/pom.xml @@ -31,6 +31,10 @@ Apache Shiro :: ITs :: Guice 4 war + + none() + + diff --git a/integration-tests/jakarta-ee/pom.xml b/integration-tests/jakarta-ee/pom.xml index c4cac66e03..76f61495ed 100644 --- a/integration-tests/jakarta-ee/pom.xml +++ b/integration-tests/jakarta-ee/pom.xml @@ -279,27 +279,15 @@ org.projectlombok lombok-maven-plugin - 1.18.20.0 - ${project.build.sourceDirectory} false - true - generate-sources - - delombok - + lombok-preprocess + none - - - org.projectlombok - lombok - ${lombok.version} - - maven-dependency-plugin @@ -482,6 +470,34 @@ + + + + org.projectlombok + lombok-maven-plugin + 1.18.20.0 + + ${project.build.sourceDirectory} + + + + lombok-preprocess + generate-sources + + delombok + + + + + + org.projectlombok + lombok + ${lombok.version} + + + + + 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 8936d97431..429de1ccbb 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 @@ -30,7 +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.FileResource; +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; @@ -55,7 +55,6 @@ import java.nio.file.StandardCopyOption; import static org.apache.commons.lang3.StringUtils.isNotBlank; -import static org.eclipse.jetty.util.resource.Resource.newResource; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -113,7 +112,7 @@ protected WebAppContext createdWebAppContext() throws Exception { // 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); - FileResource containerResources = new FileResource(classes.toURI()); + var containerResources = new PathResource(classes.toURI()); ctx.getMetaData().addContainerResource(containerResources); } diff --git a/lang/pom.xml b/lang/pom.xml index dc6d6c58bf..3bfca83c45 100644 --- a/lang/pom.xml +++ b/lang/pom.xml @@ -56,6 +56,11 @@ log4j-core test + + javax.servlet.jsp + jsp-api + true + diff --git a/lang/src/main/java/org/apache/shiro/lang/io/XmlSerializer.java b/lang/src/main/java/org/apache/shiro/lang/io/XmlSerializer.java index 4788c63821..8783264b08 100644 --- a/lang/src/main/java/org/apache/shiro/lang/io/XmlSerializer.java +++ b/lang/src/main/java/org/apache/shiro/lang/io/XmlSerializer.java @@ -36,6 +36,7 @@ * @since 0.9 * @deprecated This class should not be used directly because of unsecure XMLEncoder/XMLDecoder usage. */ +@Deprecated(forRemoval = true) public class XmlSerializer implements Serializer { /** diff --git a/lang/src/main/java/org/apache/shiro/lang/util/Assert.java b/lang/src/main/java/org/apache/shiro/lang/util/Assert.java index 7bb651e8c7..0f8bb4af57 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/Assert.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/Assert.java @@ -388,7 +388,7 @@ public static void isAssignable(Class superType, Class subType) { * ok when prepended to it. * @throws IllegalArgumentException if the classes are not assignable */ - public static void isAssignable(Class superType, Class subType, String message) { + public static void isAssignable(Class superType, Class subType, String message) { notNull(superType, "Type to check against must not be null"); if (subType == null || !superType.isAssignableFrom(subType)) { throw new IllegalArgumentException(message + subType + " is not assignable to " + superType); 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 10d2705e24..dafbf7e8cb 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 @@ -148,9 +148,9 @@ public static InputStream getResourceAsStream(String name) { * @return the located class * @throws UnknownClassException if the class cannot be found. */ - public static Class forName(String fqcn) throws UnknownClassException { - - Class clazz = THREAD_CL_ACCESSOR.loadClass(fqcn); + @SuppressWarnings("unchecked") + public static Class forName(String fqcn) throws UnknownClassException { + Class clazz = THREAD_CL_ACCESSOR.loadClass(fqcn); if (clazz == null) { if (LOGGER.isTraceEnabled()) { @@ -179,7 +179,7 @@ public static Class forName(String fqcn) throws UnknownClassException { throw new UnknownClassException(msg); } - return clazz; + return (Class) clazz; } public static boolean isAvailable(String fullyQualifiedClassName) { @@ -199,37 +199,36 @@ public static Object newInstance(String fqcn, Object... args) { return newInstance(forName(fqcn), args); } - public static Object newInstance(Class clazz) { + public static Object newInstance(Class clazz) { if (clazz == null) { String msg = "Class method parameter cannot be null."; throw new IllegalArgumentException(msg); } try { - return clazz.newInstance(); + return clazz.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw new InstantiationException("Unable to instantiate class [" + clazz.getName() + "]", e); } } - public static Object newInstance(Class clazz, Object... args) { - Class[] argTypes = new Class[args.length]; + public static Object newInstance(Class clazz, Object... args) { + var argTypes = new Class[args.length]; for (int i = 0; i < args.length; i++) { argTypes[i] = args[i].getClass(); } - Constructor ctor = getConstructor(clazz, argTypes); + Constructor ctor = getConstructor(clazz, argTypes); return instantiate(ctor, args); } - public static Constructor getConstructor(Class clazz, Class... argTypes) { + public static Constructor getConstructor(Class clazz, Class... argTypes) { try { return clazz.getConstructor(argTypes); } catch (NoSuchMethodException e) { throw new IllegalStateException(e); } - } - public static Object instantiate(Constructor ctor, Object... args) { + public static Object instantiate(Constructor ctor, Object... args) { try { return ctor.newInstance(args); } catch (Exception e) { @@ -245,7 +244,7 @@ public static Object instantiate(Constructor ctor, Object... args) { * @since 1.3 */ public static List getAnnotatedMethods(final Class type, final Class annotation) { - final List methods = new ArrayList(); + final List methods = new ArrayList<>(); Class clazz = type; while (!Object.class.equals(clazz)) { Method[] currentClassMethods = clazz.getDeclaredMethods(); @@ -264,7 +263,7 @@ public static List getAnnotatedMethods(final Class type, final Class< * @since 1.0 */ private interface ClassLoaderAccessor { - Class loadClass(String fqcn); + Class loadClass(String fqcn); InputStream getResourceStream(String name); } @@ -274,8 +273,8 @@ private interface ClassLoaderAccessor { */ private abstract static class ExceptionIgnoringAccessor implements ClassLoaderAccessor { - public Class loadClass(String fqcn) { - Class clazz = null; + public Class loadClass(String fqcn) { + Class clazz = null; ClassLoader cl = getClassLoader(); if (cl != null) { try { 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 new file mode 100644 index 0000000000..92b7fc94a4 --- /dev/null +++ b/lang/src/main/java/org/apache/shiro/lang/util/JspEngineDependency.java @@ -0,0 +1,31 @@ +/* + * 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.lang.util; + +import javax.servlet.jsp.JspEngineInfo; + +/** + * This only exists so bundle plugin doesn't complain about redundant dependencies + */ +class JspEngineDependency extends JspEngineInfo { + @Override + public String getSpecificationVersion() { + return null; + } +} diff --git a/lang/src/main/java/org/apache/shiro/lang/util/SoftHashMap.java b/lang/src/main/java/org/apache/shiro/lang/util/SoftHashMap.java index 47145e5c95..a5a33b8c5d 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/SoftHashMap.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/SoftHashMap.java @@ -236,6 +236,7 @@ public Set keySet() { return map.keySet(); } + @SuppressWarnings("unchecked") public Collection values() { processQueue(); Collection keys = map.keySet(); @@ -289,6 +290,7 @@ public int size() { return map.size(); } + @SuppressWarnings("unchecked") public Set> entrySet() { // throw out garbage collected values first processQueue(); diff --git a/lang/src/main/java/org/apache/shiro/lang/util/StringUtils.java b/lang/src/main/java/org/apache/shiro/lang/util/StringUtils.java index fb444958fc..a3a1256fb9 100644 --- a/lang/src/main/java/org/apache/shiro/lang/util/StringUtils.java +++ b/lang/src/main/java/org/apache/shiro/lang/util/StringUtils.java @@ -535,6 +535,7 @@ public static String uppercaseFirstChar(String in) { // CollectionUtils cannot be removed from shiro-core until 2.0 as it has a dependency on PrincipalCollection + @SafeVarargs private static Set asSet(E... elements) { if (elements == null || elements.length == 0) { return Collections.emptySet(); diff --git a/samples/aspectj/src/test/java/org/apache/shiro/samples/aspectj/bank/SecureBankServiceTest.java b/samples/aspectj/src/test/java/org/apache/shiro/samples/aspectj/bank/SecureBankServiceTest.java index 416e9e8a75..bf9209ae89 100644 --- a/samples/aspectj/src/test/java/org/apache/shiro/samples/aspectj/bank/SecureBankServiceTest.java +++ b/samples/aspectj/src/test/java/org/apache/shiro/samples/aspectj/bank/SecureBankServiceTest.java @@ -21,9 +21,8 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authz.UnauthorizedException; -import org.apache.shiro.ini.IniSecurityManagerFactory; -import org.apache.shiro.lang.util.Factory; -import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.authz.annotation.RequiresGuest; +import org.apache.shiro.env.BasicIniEnvironment; import org.apache.shiro.subject.Subject; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; @@ -47,9 +46,7 @@ public class SecureBankServiceTest { @BeforeAll public static void setUpClass() throws Exception { - Factory factory = new IniSecurityManagerFactory("classpath:shiroBankServiceTest.ini"); - SecurityManager securityManager = factory.getInstance(); - SecurityUtils.setSecurityManager(securityManager); + SecurityUtils.setSecurityManager(new BasicIniEnvironment("classpath:shiroBankServiceTest.ini").getSecurityManager()); service = new SecureBankService(); service.start(); @@ -251,4 +248,9 @@ public static void assertAccount(String eOwnerName, boolean eIsActive, int eBala Assertions.assertEquals(eBalance, (int) service.getBalanceOf(actualAccountId)); Assertions.assertEquals(eTxLogCount, service.getTxHistoryFor(actualAccountId).length); } + + @RequiresGuest + void dontComplainAboutMissingAspects() { + + } } diff --git a/samples/quickstart/src/main/java/Quickstart.java b/samples/quickstart/src/main/java/Quickstart.java index af82f6f261..3d5743ea05 100644 --- a/samples/quickstart/src/main/java/Quickstart.java +++ b/samples/quickstart/src/main/java/Quickstart.java @@ -19,6 +19,7 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.*; +import org.apache.shiro.env.BasicIniEnvironment; import org.apache.shiro.ini.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.session.Session; @@ -46,14 +47,13 @@ public static void main(String[] args) { // Use the shiro.ini file at the root of the classpath // (file: and url: prefixes load from files and urls respectively): - Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini"); - SecurityManager securityManager = factory.getInstance(); + SecurityManager securityManager = new BasicIniEnvironment("classpath:shiro.ini").getSecurityManager(); // for this simple example quickstart, make the SecurityManager // accessible as a JVM singleton. Most applications wouldn't do this // and instead rely on their container configuration or web.xml for // webapps. That is outside the scope of this simple quickstart, so - // we'll just do the bare minimum so you can continue to get a feel + // we'll just do the bare minimum, so you can continue to get a feel // for things. SecurityUtils.setSecurityManager(securityManager); 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 6306b590b0..4d9b927e3f 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 @@ -18,9 +18,9 @@ */ package org.apache.shiro.samples.sprhib.dao; +import org.apache.shiro.lang.util.Assert; import org.apache.shiro.samples.sprhib.model.User; import org.springframework.stereotype.Repository; -import org.springframework.util.Assert; import java.util.List; @@ -35,7 +35,7 @@ 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).setString("username", username).uniqueResult(); + return (User) getSession().createQuery(query).setParameter("username", username).uniqueResult(); } public void createUser(User 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 6b6f144311..bb87f7f9a9 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 @@ -20,7 +20,6 @@ import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; -import org.hibernate.annotations.Index; import javax.persistence.Basic; import javax.persistence.Column; @@ -28,6 +27,7 @@ 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 java.util.Set; @@ -36,7 +36,9 @@ * Model object that represents a security role. */ @Entity -@Table(name = "roles") +@Table(name = "roles", indexes = { + @Index(name = "idx_roles_name", columnList = "name") +}) @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Role { @@ -68,7 +70,6 @@ public void setId(Long id) { @Basic(optional = false) @Column(length = 100) - @Index(name = "idx_roles_name") public String getName() { return name; } 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 d6946ac524..1bd70928cd 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 @@ -20,7 +20,6 @@ import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; -import org.hibernate.annotations.Index; import javax.persistence.Basic; import javax.persistence.Column; @@ -28,6 +27,7 @@ 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; @@ -43,7 +43,9 @@ * does in fact do this for your reference (see User.hbm.xml - the 'roles' declaration).

*/ @Entity -@Table(name = "users") +@Table(name = "users", indexes = { + @Index(name = "idx_users_username", columnList = "username"), + @Index(name = "idx_users_email", columnList = "email")}) @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class User { @@ -71,7 +73,6 @@ public void setId(Long id) { */ @Basic(optional = false) @Column(length = 100) - @Index(name = "idx_users_username") public String getUsername() { return username; } @@ -81,7 +82,6 @@ public void setUsername(String username) { } @Basic(optional = false) - @Index(name = "idx_users_email") public String getEmail() { return email; } diff --git a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/security/SampleRealm.java b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/security/SampleRealm.java index 51860c0d8d..08b3be4053 100644 --- a/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/security/SampleRealm.java +++ b/samples/spring-hibernate/src/main/java/org/apache/shiro/samples/sprhib/security/SampleRealm.java @@ -49,6 +49,7 @@ public class SampleRealm extends AuthorizingRealm { protected UserDAO userDAO; + @SuppressWarnings("deprecation") public SampleRealm() { //This name must match the name in the User class's getPrincipals() method setName("SampleRealm"); 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 7c3c024430..0cd64e1f10 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 @@ -22,8 +22,8 @@ import org.apache.shiro.samples.sprhib.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -34,7 +34,7 @@ * cached in the Hibernate second-level cache. */ @Component -public class CurrentUserInterceptor extends HandlerInterceptorAdapter { +public class CurrentUserInterceptor implements HandlerInterceptor { private UserService userService; 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 index 9d79bca98d..403f0761b1 100644 --- 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 @@ -33,6 +33,7 @@ public class RemotingServletConfig { @Bean(name = "/sampleManager") + @SuppressWarnings("deprecation") public HttpInvokerServiceExporter accountServiceExporter(SampleManager sampleManager, SecureRemoteInvocationExecutor secureRemoteInvocationExecutor) { diff --git a/samples/web/pom.xml b/samples/web/pom.xml index 6d66ec0ef6..135ef4ac78 100644 --- a/samples/web/pom.xml +++ b/samples/web/pom.xml @@ -110,7 +110,7 @@
org.slf4j - slf4j-log4j12 + slf4j-reload4j ${slf4j.version} runtime diff --git a/support/aspectj/pom.xml b/support/aspectj/pom.xml index 9f52698f6e..1f87b9227e 100644 --- a/support/aspectj/pom.xml +++ b/support/aspectj/pom.xml @@ -69,6 +69,11 @@ org.codehaus.mojo aspectj-maven-plugin + + + -Xlint:adviceDidNotMatch=ignore + + aspectj-compile diff --git a/support/aspectj/src/test/java/org/apache/shiro/aspectj/DummyServiceTest.java b/support/aspectj/src/test/java/org/apache/shiro/aspectj/DummyServiceTest.java index 06b544bb75..b4d5bb0a54 100644 --- a/support/aspectj/src/test/java/org/apache/shiro/aspectj/DummyServiceTest.java +++ b/support/aspectj/src/test/java/org/apache/shiro/aspectj/DummyServiceTest.java @@ -22,10 +22,8 @@ import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authz.UnauthenticatedException; import org.apache.shiro.authz.UnauthorizedException; -import org.apache.shiro.ini.IniSecurityManagerFactory; -import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.env.BasicIniEnvironment; import org.apache.shiro.subject.Subject; -import org.apache.shiro.lang.util.Factory; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; @@ -47,9 +45,8 @@ public class DummyServiceTest { @BeforeAll public static void setUpClass() throws Exception { - Factory factory = new IniSecurityManagerFactory("classpath:shiroDummyServiceTest.ini"); - SecurityManager securityManager = factory.getInstance(); - SecurityUtils.setSecurityManager(securityManager); + var basicIniEnvironment = new BasicIniEnvironment("classpath:shiroDummyServiceTest.ini"); + SecurityUtils.setSecurityManager(basicIniEnvironment.getSecurityManager()); securedService = new SecuredDummyService(); restrictedService = new RestrictedDummyService(); 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 86b2de3985..b2f34e1923 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 @@ -69,6 +69,7 @@ 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()) { @@ -84,7 +85,6 @@ public V get(K key) throws CacheException { } return null; } else { - //noinspection unchecked return (V) element.getObjectValue(); } } diff --git a/support/guice/pom.xml b/support/guice/pom.xml index 36e2406c2a..bd3358bd11 100644 --- a/support/guice/pom.xml +++ b/support/guice/pom.xml @@ -34,6 +34,7 @@ guice true + none() 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 e1790ed6ed..c867f38c8a 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 @@ -129,6 +129,7 @@ public List> globalFilters() { } @Override + @SuppressWarnings("unchecked") protected final void configureShiro() { bindBeanType(TypeLiteral.get(ServletContext.class), Key.get(ServletContext.class, Names.named(NAME))); bind(Key.get(ServletContext.class, Names.named(NAME))).toInstance(this.servletContext); @@ -148,6 +149,7 @@ protected final void configureShiro() { bind(FilterChainResolver.class).toProvider(new FilterChainResolverProvider(setupFilterChainConfigs())); } + @SuppressWarnings("unchecked") private Map[]> setupFilterChainConfigs() { // loop through and build a map of Filter Key -> Map @@ -271,6 +273,7 @@ protected void bindWebEnvironment(AnnotatedBindingBuilder key) { // check for legacy API if (key instanceof FilterConfigKey) { @@ -290,6 +293,7 @@ protected final void addFilterChain(String pattern, Key key) { * and config to be used when processing resources on pattern. * @since 1.4 */ + @SafeVarargs protected final void addFilterChain(String pattern, FilterConfig... filterConfigs) { filterChains.put(pattern, filterConfigs); } @@ -383,9 +387,9 @@ static boolean isGuiceVersion3() { } } + @SuppressWarnings("unchecked") private void addLegacyFilterChain(String pattern, FilterConfigKey filterConfigKey) { - - FilterConfig filterConfig = new FilterConfig(filterConfigKey.getKey(), filterConfigKey.getConfigValue()); + FilterConfig filterConfig = new FilterConfig<>(filterConfigKey.getKey(), filterConfigKey.getConfigValue()); addFilterChain(pattern, filterConfig); } @@ -399,6 +403,7 @@ private void addLegacyFilterChain(String pattern, FilterConfigKey filterConfigKe * @param keys */ @Deprecated + @SuppressWarnings("unchecked") protected final void addFilterChain(String pattern, Key... keys) { // We need to extract the keys and FilterConfigKey and convert to the new format. diff --git a/support/guice/src/test/java/org/apache/shiro/guice/BeanTypeListenerTest.java b/support/guice/src/test/java/org/apache/shiro/guice/BeanTypeListenerTest.java index 00f615fae2..09b2a84e76 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/BeanTypeListenerTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/BeanTypeListenerTest.java @@ -73,8 +73,10 @@ void testMatchedPackage() throws Exception { @Test void testPropertySetting() throws Exception { + @SuppressWarnings("unchecked") TypeEncounter encounter = mock(TypeEncounter.class); + @SuppressWarnings("unchecked") Provider injectorProvider = mock(Provider.class); Injector injector = mock(Injector.class); @@ -82,6 +84,7 @@ void testPropertySetting() throws Exception { when(injectorProvider.get()).then(args -> injector); + @SuppressWarnings("unchecked") ArgumentCaptor> captor = ArgumentCaptor.forClass(MembersInjector.class); SecurityManager securityManager = mock(SecurityManager.class); diff --git a/support/guice/src/test/java/org/apache/shiro/guice/LifecycleTypeListenerTest.java b/support/guice/src/test/java/org/apache/shiro/guice/LifecycleTypeListenerTest.java index 76ea107fa1..e145f03c6c 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/LifecycleTypeListenerTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/LifecycleTypeListenerTest.java @@ -33,6 +33,7 @@ public class LifecycleTypeListenerTest { @Test + @SuppressWarnings({"unchecked", "rawtypes"}) void testHearInitializable() throws Exception { TypeEncounter encounter = createMock(TypeEncounter.class); @@ -48,7 +49,9 @@ void testHearInitializable() throws Exception { } @Test + @SuppressWarnings("unchecked") void testHearDestroyable() throws Exception { + @SuppressWarnings("rawtypes") TypeEncounter encounter = createMock(TypeEncounter.class); encounter.register(anyObject(DestroyableInjectionListener.class)); diff --git a/support/guice/src/test/java/org/apache/shiro/guice/web/AbstractInjectionProviderTest.java b/support/guice/src/test/java/org/apache/shiro/guice/web/AbstractInjectionProviderTest.java index d1fb4edbd1..77b4abf166 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/web/AbstractInjectionProviderTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/web/AbstractInjectionProviderTest.java @@ -49,6 +49,7 @@ public class AbstractInjectionProviderTest { static Key keyF1 = Key.get(Object.class, Names.named("field1")); @Test + @SuppressWarnings("unchecked") void testGet() throws Exception { Injector mockInjector = createMock(Injector.class); 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 613c651671..453e13ffab 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 @@ -36,6 +36,7 @@ void checkDefaultFilters() throws Exception { EnumSet defaultFilters = EnumSet.allOf(DefaultFilter.class); for (Field field : ShiroWebModule.class.getFields()) { if (Modifier.isStatic(field.getModifiers()) && Key.class.isAssignableFrom(field.getType())) { + @SuppressWarnings("unchecked") Class filterType = ((Key) field.get(null)).getTypeLiteral().getRawType(); boolean found = false; for (DefaultFilter filter : defaultFilters) { 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 203876a7f2..889adb24a5 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 @@ -51,8 +51,9 @@ public class FilterChainResolverProviderTest { private FilterChainResolverProvider underTest; @BeforeEach + @SuppressWarnings("unchecked") public void setup() { - chains = new LinkedHashMap[]>(); + chains = new LinkedHashMap<>(); key1a = Key.get(Filter.class, Names.named("key1a")); key1b = Key.get(Filter.class, Names.named("key1b")); @@ -66,6 +67,7 @@ public void setup() { } @Test + @SuppressWarnings("unchecked") void testGetDependencies() throws Exception { Set> dependencySet = underTest.getDependencies(); diff --git a/support/guice/src/test/java/org/apache/shiro/guice/web/PathMatchingFilterProviderTest.java b/support/guice/src/test/java/org/apache/shiro/guice/web/PathMatchingFilterProviderTest.java index 2620cbf40d..09f1929008 100644 --- a/support/guice/src/test/java/org/apache/shiro/guice/web/PathMatchingFilterProviderTest.java +++ b/support/guice/src/test/java/org/apache/shiro/guice/web/PathMatchingFilterProviderTest.java @@ -32,6 +32,7 @@ public class PathMatchingFilterProviderTest { @Test + @SuppressWarnings("unchecked") void testPostProcess() { PathMatchingFilter filter = createMock(PathMatchingFilter.class); 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 452d37b458..1c0416896d 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 @@ -45,6 +45,7 @@ import org.apache.shiro.web.session.mgt.ServletContainerSessionManager; import org.easymock.EasyMock; import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import javax.inject.Named; @@ -270,6 +271,7 @@ public ShiroModuleTest.MockRealm createRealm() { * @since 1.4 */ @Test + @Tag("Guice3") void testAddFilterChainGuice3Only() { Assumptions.assumeTrue(ShiroWebModule.isGuiceVersion3(), "This test only runs against Guice 3.x"); @@ -290,6 +292,8 @@ void testAddFilterChainGuice3Only() { Injector injector = Guice.createInjector(new ShiroWebModule(servletContext) { @Override + @SuppressWarnings("unchecked") + @Deprecated protected void configureShiroWeb() { bindRealm().to(ShiroModuleTest.MockRealm.class); expose(FilterChainResolver.class); 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 7a9f9a5a87..ea00352684 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 @@ -49,6 +49,7 @@ public class SimpleFilterChainResolverTest { @Test + @SuppressWarnings("unchecked") void testGetChain() throws Exception { // test that it uses the pattern matcher - check // test that the FIRST chain found is the one that gets returned - check diff --git a/support/jcache/pom.xml b/support/jcache/pom.xml index bdfdb28990..4266492374 100644 --- a/support/jcache/pom.xml +++ b/support/jcache/pom.xml @@ -74,7 +74,7 @@ org.apache.shiro.jcache - org.apache.shiro.jcache*;version=${project.version} + org.apache.shiro.cache.jcache*;version=${project.version} org.apache.shiro*;version="${shiro.osgi.importRange}", javax.cache*;version="${jcache.osgi.importRange}", diff --git a/tools/hasher/src/main/java/org/apache/shiro/tools/hasher/Hasher.java b/tools/hasher/src/main/java/org/apache/shiro/tools/hasher/Hasher.java index f9bdb58809..83ae0926e1 100644 --- a/tools/hasher/src/main/java/org/apache/shiro/tools/hasher/Hasher.java +++ b/tools/hasher/src/main/java/org/apache/shiro/tools/hasher/Hasher.java @@ -266,7 +266,7 @@ public static void main(String[] args) { if (password) { formatString = Shiro2CryptFormat.class.getName(); } else { - formatString = HexFormat.class.getName(); + formatString = getHexFormatString(); } } @@ -297,6 +297,11 @@ public static void main(String[] args) { } } + @SuppressWarnings("deprecation") + private static String getHexFormatString() { + return HexFormat.class.getName(); + } + private static String createMutexMessage(Option... options) { StringBuilder sb = new StringBuilder(); sb.append("The "); 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 d452e30ac9..07dfbbad6a 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 @@ -43,6 +43,7 @@ * * @since 1.0 */ +@SuppressWarnings("deprecation") public class IniFilterChainResolverFactory extends IniFactorySupport { /** 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 da02f19980..a98fe05f44 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 @@ -70,8 +70,10 @@ public class IniWebEnvironment extends ResourceBasedWebEnvironment implements In */ private Ini ini; + @SuppressWarnings("deprecation") private WebIniSecurityManagerFactory factory; + @SuppressWarnings("deprecation") public IniWebEnvironment() { factory = new WebIniSecurityManagerFactory(); } @@ -278,6 +280,7 @@ protected ShiroFilterConfiguration createFilterConfiguration() { return (ShiroFilterConfiguration) this.objects.get(SHIRO_FILTER_CONFIG_NAME); } + @SuppressWarnings("deprecation") protected FilterChainResolver createFilterChainResolver() { FilterChainResolver resolver = null; @@ -285,9 +288,10 @@ protected FilterChainResolver createFilterChainResolver() { Ini ini = getIni(); if (!CollectionUtils.isEmpty(ini)) { + @SuppressWarnings("unchecked") Factory factory = (Factory) this.objects.get(FILTER_CHAIN_RESOLVER_NAME); if (factory instanceof IniFactorySupport) { - IniFactorySupport iniFactory = (IniFactorySupport) factory; + var iniFactory = (IniFactorySupport) factory; iniFactory.setIni(ini); iniFactory.setDefaults(this.objects); } @@ -326,6 +330,7 @@ protected WebSecurityManager createWebSecurityManager() { * * @return an array with two elements, {@code /WEB-INF/shiro.ini} and {@code classpath:shiro.ini}. */ + @SuppressWarnings("deprecation") protected String[] getDefaultConfigLocations() { return new String[] { DEFAULT_WEB_INI_RESOURCE_PATH, @@ -429,7 +434,7 @@ protected Map getDefaults() { * @return the SecurityManager factory used by this WebEnvironment. * @since 1.4 */ - @SuppressWarnings("unused") + @SuppressWarnings({"unused", "deprecation"}) protected WebIniSecurityManagerFactory getSecurityManagerFactory() { return factory; } @@ -440,6 +445,7 @@ protected WebIniSecurityManagerFactory getSecurityManagerFactory() { * @param factory the SecurityManager factory to used. * @since 1.4 */ + @SuppressWarnings("deprecation") protected void setSecurityManagerFactory(WebIniSecurityManagerFactory factory) { this.factory = factory; } 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 087d580366..59893db959 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 @@ -31,7 +31,6 @@ import javax.servlet.FilterConfig; import javax.servlet.ServletException; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -359,8 +358,7 @@ public boolean hasChains() { } public Set getChainNames() { - //noinspection unchecked - return this.filterChains != null ? this.filterChains.keySet() : Collections.EMPTY_SET; + return this.filterChains != null ? this.filterChains.keySet() : Set.of(); } public FilterChain proxy(FilterChain original, String chainName) { 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 eb7fbf9b77..0b1304347c 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 @@ -373,13 +373,10 @@ protected void doFilterInternal(ServletRequest servletRequest, ServletResponse s final Subject subject = createSubject(request, response); - //noinspection unchecked - subject.execute(new Callable() { - public Object call() throws Exception { - updateSessionLastAccessTime(request, response); - executeChain(request, response, chain); - return null; - } + subject.execute((Callable) () -> { + updateSessionLastAccessTime(request, response); + executeChain(request, response, chain); + return null; }); } catch (ExecutionException ex) { t = ex.getCause(); 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 72c4a9974c..664014f576 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 @@ -222,6 +222,7 @@ public boolean isRequestedSessionIdFromURL() { } } + @Deprecated public boolean isRequestedSessionIdFromUrl() { return isRequestedSessionIdFromURL(); } 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 22899471c2..9b16b51a72 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 @@ -91,7 +91,7 @@ public String encodeRedirectURL(String url) { } } - + @Deprecated public String encodeRedirectUrl(String s) { return encodeRedirectURL(s); } @@ -116,6 +116,7 @@ public String encodeURL(String url) { } } + @Deprecated public String encodeUrl(String s) { return encodeURL(s); } 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 871cdb1cba..3223eb4b0b 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 @@ -28,7 +28,6 @@ import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; import java.util.Collection; -import java.util.Collections; import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; @@ -50,12 +49,12 @@ public class ShiroHttpSession implements HttpSession { */ public static final String DEFAULT_SESSION_ID_NAME = "JSESSIONID"; - private static final Enumeration EMPTY_ENUMERATION = new Enumeration() { + private static final Enumeration EMPTY_ENUMERATION = new Enumeration<>() { public boolean hasMoreElements() { return false; } - public Object nextElement() { + public String nextElement() { return null; } }; @@ -67,7 +66,7 @@ public HttpSession getSession(String s) { return null; } - public Enumeration getIds() { + public Enumeration getIds() { return EMPTY_ENUMERATION; } }; @@ -141,11 +140,12 @@ public Object getAttribute(String s) { } } + @Deprecated + @Override public Object getValue(String s) { return getAttribute(s); } - @SuppressWarnings({"unchecked"}) protected Set getKeyNames() { Collection keySet; try { @@ -160,25 +160,27 @@ protected Set getKeyNames() { keyNames.add(o.toString()); } } else { - keyNames = Collections.EMPTY_SET; + keyNames = Set.of(); } return keyNames; } - public Enumeration getAttributeNames() { + @Override + public Enumeration getAttributeNames() { Set keyNames = getKeyNames(); - final Iterator iterator = keyNames.iterator(); - return new Enumeration() { + final Iterator iterator = keyNames.iterator(); + return new Enumeration<>() { public boolean hasMoreElements() { return iterator.hasNext(); } - public Object nextElement() { + public String nextElement() { return iterator.next(); } }; } + @Deprecated public String[] getValueNames() { Set keyNames = getKeyNames(); String[] array = new String[keyNames.size()]; @@ -219,6 +221,7 @@ public void setAttribute(String s, Object o) { } } + @Deprecated public void putValue(String s, Object o) { setAttribute(s, o); } @@ -232,6 +235,7 @@ public void removeAttribute(String s) { } } + @Deprecated public void removeValue(String s) { removeAttribute(s); } 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 a1071fe16f..ed99d9d1b6 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 @@ -47,9 +47,11 @@ void testDefaultFiltersPresent() { Ini ini = new Ini(); //just a normal configuration line in the MAIN section for any of the default filters should work //out of the box. So, create the main section and just config one of them: + @SuppressWarnings("deprecation") Ini.Section section = ini.addSection(IniSecurityManagerFactory.MAIN_SECTION_NAME); section.put("authc.loginUrl", "/login.jsp"); + @SuppressWarnings("deprecation") WebIniSecurityManagerFactory factory = new WebIniSecurityManagerFactory(ini); org.apache.shiro.mgt.SecurityManager sm = factory.getInstance(); assertNotNull(sm); 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 2eb965a8b1..1b187f3630 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 @@ -160,9 +160,6 @@ void testListMethods() { assertEquals(3, list.size()); list.retainAll(multipleFilters); assertEquals(2, list.size()); - //noinspection unchecked - assertEquals(new ArrayList(list), multipleFilters); + assertEquals(new ArrayList<>(list), multipleFilters); } - - } 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 1c351dedee..ac1196b239 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 @@ -61,6 +61,7 @@ public class DefaultWebSecurityManagerTest extends AbstractWebSecurityManagerTes private DefaultWebSecurityManager sm; @BeforeEach + @SuppressWarnings("deprecation") public void setup() { sm = new DefaultWebSecurityManager(); sm.setSessionMode(DefaultWebSecurityManager.NATIVE_SESSION_MODE); @@ -82,6 +83,7 @@ protected Subject newSubject(ServletRequest request, ServletResponse response) { } @Test + @SuppressWarnings("deprecation") void checkSessionManagerDeterminesContainerSessionMode() { sm.setSessionMode(DefaultWebSecurityManager.NATIVE_SESSION_MODE); WebSessionManager sessionManager = mock(WebSessionManager.class); @@ -96,6 +98,7 @@ void checkSessionManagerDeterminesContainerSessionMode() { } @Test + @SuppressWarnings("deprecation") void shiroSessionModeInit() { sm.setSessionMode(DefaultWebSecurityManager.NATIVE_SESSION_MODE); } @@ -211,6 +214,7 @@ void testBuildNonWebSubjectWithDefaultServletContainerSessionManager() { Ini.Section section = ini.addSection(IniRealm.USERS_SECTION_NAME); section.put("user1", "user1"); + @SuppressWarnings("deprecation") WebIniSecurityManagerFactory factory = new WebIniSecurityManagerFactory(ini); WebSecurityManager securityManager = (WebSecurityManager) factory.getInstance();