You are currently logged in.
- - - - - - - \ 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" %> - - - - "/> -Hi
Welcome to the Apache Shiro Quickstart sample application. - This page represents the home page of any web application.
- -If you want to access the user-only ">account page, - you will need to log-in first.
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.
- -
-
-
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? ;)
- - - - - -| Username | -Password | -
|---|---|
| root | -secret | -
| presidentskroob | -12345 | -
| darkhelmet | -ludicrousspeed | -
| lonestarr | -vespa | -
#{of:printStackTrace(requestScope['javax.servlet.error.exception'])}
+ #{of:printStackTrace(requestScope['jakarta.servlet.error.exception'])}
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_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.getResourceStream(name);
+ url = ADDITIONAL_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;
}
/**
@@ -315,6 +341,8 @@ private interface ClassLoaderAccessor {
Class> loadClass(String fqcn);
InputStream getResourceStream(String name);
+
+ URL getResource(String name);
}
/**
@@ -347,6 +375,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 79cffb4ffe..13151798af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,7 +83,7 @@
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 +61,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 +81,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 +145,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
* 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 extends Annotation> scopeType;
private final Class extends Annotation> webScopeType;
@@ -45,7 +47,7 @@ public class ShiroScopeContext implements Context, Serializable {
public ShiroScopeContext(Class extends Annotation> scopeType, Class extends Annotation> 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
- * <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 MapgetFilters() { * * 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/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(); - }*/ - -} 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
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 @@
* Authorization: Basic Base64_encoded_username_and_password
AuthenticationToken via the
- * {@link #createToken(String, String, javax.servlet.ServletRequest, javax.servlet.ServletResponse) createToken} methodAuthenticationToken is returned.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 8d1a12706d..50a16c60c7 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) {
* {@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
* 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 3c8fc06e0b..a355c0030f 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 8e436e62c7..fbdaee5885 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 @@
-
+