-
Type:
Suggestion
-
Resolution: Unresolved
-
None
-
Component/s: Tomcat
-
None
-
44
-
24
Issue Summary
In Jira 10.x, servlet filters can no longer be configured in web.xml in order to improve security and standardize filter management. This feature request is to provide a way for filters to still be configurable by users.
For example, some users have ways to enable additional logging for UrlRewriteFilter and to reload the configuration at a set interval to avoid restarting Jira when making changes to it:
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> <init-param> <param-name>confReloadCheckInterval</param-name> <param-value>60</param-value> </init-param> <init-param> <param-name>logLevel</param-name> <param-value>sysout:INFO</param-value> </init-param> </filter>
With Jira 10.x, when attempting to configure this via the web.xml file, the following error message will be displayed on start up:
2025-02-28 08:57:22,231+0000 main ERROR [c.a.jira.startup.LauncherContextListener] Unable to start JIRA.
java.lang.IllegalStateException: All Jira Core servlet filters should be registered in com.atlassian.jira.web.filters.ServletFilters. Remove configuration for the following filters from web.xml: [org.tuckey.web.filters.urlrewrite.UrlRewriteFilter]
at com.google.common.base.Preconditions.checkState(Preconditions.java:838)
at com.atlassian.jira.web.filters.ServletsInitializer.onStartup(ServletsInitializer.java:22)
at com.atlassian.jira.startup.LauncherContextListener.registerServlets(LauncherContextListener.java:116)
at com.atlassian.jira.startup.LauncherContextListener.contextInitialized(LauncherContextListener.java:104)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4018)
... 4 filtered
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
... 5 filtered
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
... 8 filtered
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
... 2 filtered
Workaround
We have developer documentation on how to set servlet filters in Jira which involves setting up a third-party plugin instead. There's also a guide for developers mentioning that they'll need to include and bundle dependencies if needed.