Provide way to configure servlet filters in Jira 10.x

XMLWordPrintable

    • 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&gt;org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class&gt;
          <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.

            Assignee:
            Unassigned
            Reporter:
            Adrian Castillo
            Votes:
            7 Vote for this issue
            Watchers:
            10 Start watching this issue

              Created:
              Updated: