This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/master by this push:
     new 92df3c4d0f FELIX-6576 : Update SSLFilter to Jakarta Servlet API
92df3c4d0f is described below

commit 92df3c4d0f98de3d09575da5b4d1946fd91cc19a
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri Oct 28 15:57:20 2022 +0200

    FELIX-6576 : Update SSLFilter to Jakarta Servlet API
---
 http/sslfilter/pom.xml                             |  69 +++---
 .../main/appended-resources/META-INF/DEPENDENCIES  |   2 +-
 .../http/sslfilter/internal/LogServiceTracker.java |  72 ------
 .../felix/http/sslfilter/internal/SslFilter.java   | 234 +++++++----------
 .../sslfilter/internal/SslFilterActivator.java     | 116 ---------
 .../http/sslfilter/internal/SslFilterRequest.java  |  45 ++--
 .../http/sslfilter/internal/SslFilterResponse.java | 102 +++-----
 .../http/sslfilter/internal/SystemLogger.java      |  82 ------
 ...pache.felix.http.sslfilter.SslFilter.properties |  26 --
 .../org.apache.felix.http.sslfilter.SslFilter.xml  |  34 ---
 .../sslfilter/internal/SslFilterJettyTest.java     |  59 ++---
 .../sslfilter/internal/SslFilterRequestTest.java   |  21 +-
 .../sslfilter/internal/SslFilterResponseTest.java  | 276 +++++++++++----------
 13 files changed, 344 insertions(+), 794 deletions(-)

diff --git a/http/sslfilter/pom.xml b/http/sslfilter/pom.xml
index 39d78e0643..a457abb6a0 100644
--- a/http/sslfilter/pom.xml
+++ b/http/sslfilter/pom.xml
@@ -28,7 +28,7 @@
 
     <name>Apache Felix Http SSL Filter</name>
     <artifactId>org.apache.felix.http.sslfilter</artifactId>
-    <version>1.2.7-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
     <packaging>bundle</packaging>
 
     <scm>
@@ -42,25 +42,8 @@
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
+                <version>5.1.4</version>
                 <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-Activator>
-                            
org.apache.felix.http.sslfilter.internal.SslFilterActivator
-                        </Bundle-Activator>
-                        <Import-Package>
-                            javax.servlet.*;version="[3,5)",
-                            org.osgi.service.cm;resolution:=optional,
-                            *
-                        </Import-Package>
-                        <DynamicImport-Package>
-                            org.osgi.service.cm;version="[1.2,2)"
-                        </DynamicImport-Package>
-                        <Require-Capability>
-                            
osgi.implementation;filter:="(&amp;(osgi.implementation=osgi.http)(version&gt;=1.1)(!(version&gt;=2.0)))"
-                        </Require-Capability>
-                    </instructions>
-                </configuration>
             </plugin>
         </plugins>
     </build>
@@ -70,31 +53,43 @@
             <groupId>org.osgi</groupId>
             <artifactId>osgi.core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.7.36</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
+            <version>1.4.0</version>
+            <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.service.http.whiteboard</artifactId>
-            <version>1.1.0</version>
+            <artifactId>org.osgi.service.metatype.annotations</artifactId>
+            <version>1.4.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.http.servlet-api</artifactId>
-            <version>1.1.0</version>
+            <artifactId>org.apache.felix.http.base</artifactId>
+            <version>5.0.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
-           <groupId>org.osgi</groupId>
-           <artifactId>org.osgi.service.cm</artifactId>
-           <version>1.5.0</version>
-           <scope>provided</scope>
-       </dependency>
-       <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.service.log</artifactId>
-            <version>1.3.0</version>
-           <scope>provided</scope>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+            <version>5.0.0</version>
+            <scope>provided</scope>
         </dependency>
         <!-- Test Dependencies -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>1.7.36</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
@@ -103,16 +98,10 @@
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
         </dependency>
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-            <version>3.2.2</version>
-            <scope>test</scope>
-        </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-servlet</artifactId>
-          <version>9.4.35.v20201120</version>
+          <version>11.0.12</version>
           <scope>test</scope>
         </dependency>
 
diff --git a/http/sslfilter/src/main/appended-resources/META-INF/DEPENDENCIES 
b/http/sslfilter/src/main/appended-resources/META-INF/DEPENDENCIES
index 2559e95bbc..f2abec2e83 100644
--- a/http/sslfilter/src/main/appended-resources/META-INF/DEPENDENCIES
+++ b/http/sslfilter/src/main/appended-resources/META-INF/DEPENDENCIES
@@ -6,7 +6,7 @@ II. Used Third-Party Software
 
 This product uses software developed at
 The OSGi Alliance (http://www.osgi.org).
-Copyright (c) OSGi Alliance (2000, 2012).
+Copyright (c) OSGi Alliance (2000, 2018).
 Licensed under the Apache License 2.0.
 
 III. License Summary
diff --git 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/LogServiceTracker.java
 
b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/LogServiceTracker.java
deleted file mode 100644
index 8f1effd7b6..0000000000
--- 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/LogServiceTracker.java
+++ /dev/null
@@ -1,72 +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.felix.http.sslfilter.internal;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- *
- *
- * @author <a href="mailto:[email protected]";>Felix Project Team</a>
- */
-public class LogServiceTracker extends ServiceTracker
-{
-    private final Map<ServiceReference, LogService> logServices = new 
TreeMap<ServiceReference, LogService>(Collections.reverseOrder());
-
-    public LogServiceTracker(BundleContext context)
-    {
-        super(context, LogService.class.getName(), null);
-    }
-
-    @Override
-    public Object addingService(final ServiceReference reference)
-    {
-        final LogService result = (LogService) super.addingService(reference);
-        if ( result != null ) {
-            synchronized ( logServices ) {
-                logServices.put(reference, result);
-                
SystemLogger.setLogService(logServices.values().iterator().next());
-            }
-        }
-        return result;
-    }
-
-    @Override
-    public void removedService(final ServiceReference reference, final Object 
service)
-    {
-        synchronized ( logServices ) {
-            logServices.remove(reference);
-            final Collection<LogService> services = logServices.values();
-            if ( services.isEmpty() ) {
-                SystemLogger.setLogService(null);
-            } else {
-                SystemLogger.setLogService(services.iterator().next());
-            }
-        }
-        super.removedService(reference, service);
-    }
-}
diff --git 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilter.java
 
b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilter.java
index 86a6951f87..8bb5759c93 100644
--- 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilter.java
+++ 
b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilter.java
@@ -23,173 +23,113 @@ import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_X_
 
 import java.io.IOException;
 import java.security.cert.CertificateException;
-import java.util.Dictionary;
-
-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 javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.osgi.service.cm.ConfigurationException;
-import org.osgi.service.http.whiteboard.Preprocessor;
-import org.osgi.service.log.LogService;
-
-@SuppressWarnings("rawtypes")
-public class SslFilter implements  Preprocessor
-{
-    public static final String PID = 
"org.apache.felix.http.sslfilter.SslFilter";
-
-    private static final String DEFAULT_SSL_HEADER = HDR_X_FORWARDED_SSL;
-    private static final String DEFAULT_SSL_VALUE = "on";
-    private static final String DEFAULT_CERT_HEADER = 
HDR_X_FORWARDED_SSL_CERTIFICATE;
-    private static final boolean DEFAULT_REWRITE_ABSOLUTE_URLS = false;
-
-    private static final String PROP_SSL_HEADER = "ssl-forward.header";
-    private static final String PROP_SSL_VALUE = "ssl-forward.value";
-    private static final String PROP_SSL_CERT_KEY = "ssl-forward-cert.header";
-    private static final String PROP_REWRITE_ABSOLUTE_URLS = 
"rewrite.absolute.urls";
-
-    private volatile ConfigHolder config;
-
-    SslFilter()
-    {
-        this.config = new ConfigHolder(DEFAULT_SSL_HEADER,
-                DEFAULT_SSL_VALUE,
-                DEFAULT_CERT_HEADER,
-                DEFAULT_REWRITE_ABSOLUTE_URLS);
+
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Modified;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import org.osgi.service.servlet.whiteboard.HttpWhiteboardConstants;
+import org.osgi.service.servlet.whiteboard.Preprocessor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Designate(ocd = SslFilter.Config.class)
+@Component( service = Preprocessor.class,
+    configurationPid = "org.apache.felix.http.sslfilter.Configuration",
+    property = {
+        HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT + "=(" + 
HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=*)",
+        HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN + "=/"
+    })
+public class SslFilter implements  Preprocessor {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @ObjectClassDefinition(name = "Apache Felix Http Service SSL Filter",
+        description = "Configuration for the Http Service SSL Filter. Please 
consult the documentation of your proxy for the actual headers and values to 
use.")
+    public @interface Config {
+
+        @AttributeDefinition(name = "SSL forward header",
+            description = "HTTP Request header name that indicates a request 
is a SSL request terminated at a" +
+                          " proxy between the client and the originating 
server. The default value is 'X-Forwarded-SSL' as is " +
+                          "customarily used in the wild. Other commonly used 
names are: 'X-Forwarded-Proto' (Amazon ELB), " +
+                          "'X-Forwarded-Protocol' (alternative), and 
'Front-End-Https' (Microsoft IIS).")
+        String ssl_forward_header() default HDR_X_FORWARDED_SSL ;
+        
+        @AttributeDefinition(name = "SSL forward value",
+            description = "HTTP Request header value that indicates a request 
is a SSL request terminated at a proxy. " +
+                          "The default value is 'on'. Another commonly used 
value is 'https'.")
+        String ssl_forward_value() default "on";
+
+        @AttributeDefinition(name = "SSL client header",
+            description = "HTTP Request header name that contains the client 
certificate forwarded by a proxy. The default " +
+                          "value is 'X-Forwarded-SSL-Certificate'. Another 
commonly used value is 'X-Forwarded-SSL-Client-Cert'.")
+        String ssl_forward_cert_header() default 
HDR_X_FORWARDED_SSL_CERTIFICATE;
+
+        @AttributeDefinition(name = "Rewrite Absolute URLs",
+            description = "If enabled, absolute URLs passed to either 
sendRedirect or by setting the location header are rewritten as well.")
+        boolean rewrite_absolute_urls() default false;
+    }
+
+    private volatile Config config;
+
+    @Activate
+    public SslFilter(final Config config) {
+        updateConfig(config);
+    }
+
+    @Modified
+    public void updateConfig(final Config config) {
+        this.config = config;
+        logger.info("SSL filter (re)configured with: " +
+            "rewrite absolute urls = {}; SSL forward header = '{}'; SSL 
forward value = '{}'; SSL certificate header = '{}'",
+            config.rewrite_absolute_urls(), config.ssl_forward_header(), 
config.ssl_forward_value(), config.ssl_forward_cert_header());
+    }
+
+    @Override
+    public void init(final FilterConfig config) {
+        // No explicit init needed...
     }
 
     @Override
-    public void destroy()
-    {
+    public void destroy() {
         // No explicit destroy needed...
     }
 
     @Override
-    public void doFilter(ServletRequest req, ServletResponse res, FilterChain 
chain) throws IOException, ServletException
-    {
-        final ConfigHolder cfg = this.config;
+    public void doFilter(final ServletRequest req, final ServletResponse res, 
final FilterChain chain)
+    throws IOException, ServletException {
+        final Config cfg = this.config;
 
         HttpServletRequest httpReq = (HttpServletRequest) req;
         HttpServletResponse httpResp = (HttpServletResponse) res;
 
-        if (cfg.sslValue.equalsIgnoreCase(httpReq.getHeader(cfg.sslHeader)))
-        {
-            try
-            {
+        if 
(cfg.ssl_forward_value().equalsIgnoreCase(httpReq.getHeader(cfg.ssl_forward_header())))
 {
+            try {
                 httpResp = new SslFilterResponse(httpResp, httpReq, cfg);
                 // In case this fails, we fall back to the original HTTP 
request, which is better than nothing...
-                httpReq = new SslFilterRequest(httpReq, 
httpReq.getHeader(cfg.certHeader));
-            }
-            catch (CertificateException e)
-            {
-                SystemLogger.log(LogService.LOG_WARNING, "Failed to create SSL 
filter request! Problem parsing client certificates?! Client certificate will 
*not* be forwarded...", e);
+                httpReq = new SslFilterRequest(httpReq, 
httpReq.getHeader(cfg.ssl_forward_cert_header()));
+            } catch (final CertificateException e) {
+                logger.warn("Failed to create SSL filter request! Problem 
parsing client certificates?! Client certificate will *not* be forwarded...", 
e);
             }
         }
 
         // forward the request making sure any certificate is removed again 
after the request processing gets back here
-        try
-        {
+        try {
             chain.doFilter(httpReq, httpResp);
-        }
-        finally
-        {
-            if (httpReq instanceof SslFilterRequest)
-            {
+        } finally {
+            if (httpReq instanceof SslFilterRequest) {
                 ((SslFilterRequest) httpReq).done();
             }
         }
     }
-
-    @Override
-    public void init(FilterConfig config)
-    {
-        // make sure there is some configuration
-    }
-
-    void configure(Dictionary properties) throws ConfigurationException
-    {
-        String certHeader = DEFAULT_CERT_HEADER;
-        String sslHeader = DEFAULT_SSL_HEADER;
-        String sslValue = DEFAULT_SSL_VALUE;
-        boolean rewriteUrls = DEFAULT_REWRITE_ABSOLUTE_URLS;
-
-        if (properties != null)
-        {
-            certHeader = getOptionalString(properties, PROP_SSL_CERT_KEY);
-            sslHeader = getMandatoryString(properties, PROP_SSL_HEADER);
-            sslValue = getMandatoryString(properties, PROP_SSL_VALUE);
-            rewriteUrls = getOptionalBoolean(properties, 
PROP_REWRITE_ABSOLUTE_URLS, rewriteUrls);
-        }
-
-        this.config = new ConfigHolder(sslHeader, sslValue, certHeader, 
rewriteUrls);
-
-        SystemLogger.log(LogService.LOG_INFO, "SSL filter (re)configured with: 
" + "SSL forward header = '" + sslHeader + "'; SSL forward value = '" + 
sslValue + "'; SSL certificate header = '"
-            + certHeader + "'.");
-    }
-
-    private boolean getOptionalBoolean(Dictionary properties,
-            String key,
-            boolean defaultValue) throws ConfigurationException
-    {
-        Object raw = properties.get(key);
-        if (raw == null)
-        {
-            return defaultValue;
-        }
-        if ( raw instanceof Boolean )
-        {
-            return (Boolean)raw;
-        }
-        if (!(raw instanceof String))
-        {
-            throw new ConfigurationException(key, "invalid value");
-        }
-        return Boolean.valueOf((String)raw);
-    }
-
-    private String getOptionalString(Dictionary properties, String key) throws 
ConfigurationException
-    {
-        Object raw = properties.get(key);
-        if (raw == null || "".equals(((String) raw).trim()))
-        {
-            return null;
-        }
-        if (!(raw instanceof String))
-        {
-            throw new ConfigurationException(key, "invalid value");
-        }
-        return ((String) raw).trim();
-    }
-
-    private String getMandatoryString(Dictionary properties, String key) 
throws ConfigurationException
-    {
-        String value = getOptionalString(properties, key);
-        if (value == null)
-        {
-            throw new ConfigurationException(key, "missing value");
-        }
-        return value;
-    }
-
-    static class ConfigHolder
-    {
-        final String certHeader;
-        final String sslHeader;
-        final String sslValue;
-        final boolean rewriteAbsoluteUrls;
-
-        public ConfigHolder(String sslHeader, String sslValue, String 
certHeader,
-                boolean rewriteAbsoluteUrls)
-        {
-            this.sslHeader = sslHeader;
-            this.sslValue = sslValue;
-            this.certHeader = certHeader;
-            this.rewriteAbsoluteUrls = rewriteAbsoluteUrls;
-        }
-    }
 }
diff --git 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterActivator.java
 
b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterActivator.java
deleted file mode 100644
index ba83473404..0000000000
--- 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterActivator.java
+++ /dev/null
@@ -1,116 +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.felix.http.sslfilter.internal;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceFactory;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.cm.ConfigurationException;
-import org.osgi.service.cm.ManagedService;
-import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
-import org.osgi.service.http.whiteboard.Preprocessor;
-import org.osgi.service.log.LogService;
-
-public class SslFilterActivator implements BundleActivator
-{
-    /** Singleton filter to be registered with all http services. */
-    private final SslFilter filter = new SslFilter();
-
-    private volatile ServiceRegistration configReceiver;
-
-    private volatile ServiceRegistration filterReg;
-
-    private LogServiceTracker logTracker;
-
-    @Override
-    public void start(final BundleContext context)
-    {
-        this.logTracker = new LogServiceTracker(context);
-        this.logTracker.open();
-
-        final Dictionary<String, Object> props = new Hashtable<String, 
Object>();
-        props.put(Constants.SERVICE_PID, SslFilter.PID);
-
-        this.configReceiver = 
context.registerService(ManagedService.class.getName(), new ServiceFactory()
-        {
-            @Override
-            public Object getService(Bundle bundle, ServiceRegistration 
registration)
-            {
-                return new ManagedService()
-                {
-                    @Override
-                    public void updated(@SuppressWarnings("rawtypes") 
Dictionary properties) throws ConfigurationException
-                    {
-                        configureFilters(properties);
-                    }
-                };
-            }
-
-            @Override
-            public void ungetService(Bundle bundle, ServiceRegistration 
registration, Object service)
-            {
-                // Nop
-            }
-        }, props);
-
-        final Dictionary<String, Object> properties = new Hashtable<String, 
Object>();
-        properties.put(Constants.SERVICE_VENDOR, "The Apache Software 
Foundation");
-        properties.put(Constants.SERVICE_DESCRIPTION, "Apache Felix HTTP SSL 
Filter");
-
-        // any context
-        properties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT, 
"(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=*)");
-        properties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN, 
"/");
-
-        this.filterReg = context.registerService(Preprocessor.class.getName(), 
filter, properties);
-
-        SystemLogger.log(LogService.LOG_DEBUG, "SSL filter registered...");
-    }
-
-    @Override
-    public void stop(final BundleContext context)
-    {
-        if ( this.filterReg != null )
-        {
-            this.filterReg.unregister();
-            this.filterReg = null;
-            SystemLogger.log(LogService.LOG_DEBUG, "SSL filter 
unregistered...");
-        }
-        if (this.configReceiver != null)
-        {
-            this.configReceiver.unregister();
-            this.configReceiver = null;
-        }
-        if (this.logTracker != null)
-        {
-            this.logTracker.close();
-            this.logTracker = null;
-        }
-    }
-
-    void configureFilters(@SuppressWarnings("rawtypes") final Dictionary 
properties) throws ConfigurationException
-    {
-        this.filter.configure(properties);
-    }
-}
diff --git 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterRequest.java
 
b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterRequest.java
index ff7a17d37e..93357b3e24 100644
--- 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterRequest.java
+++ 
b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterRequest.java
@@ -33,11 +33,10 @@ import java.security.cert.X509Certificate;
 import java.util.Collection;
 import java.util.regex.Pattern;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
 
-class SslFilterRequest extends HttpServletRequestWrapper
-{
+class SslFilterRequest extends HttpServletRequestWrapper {
     // The HTTP scheme prefix in an URL
     private static final String HTTP_SCHEME_PREFIX = "http://";;
 
@@ -46,77 +45,63 @@ class SslFilterRequest extends HttpServletRequestWrapper
     private static final Pattern HEADER_TO_CERT = Pattern.compile("(?! 
CERTIFICATE)(?= ) ");
 
     @SuppressWarnings("unchecked")
-    SslFilterRequest(HttpServletRequest request, String clientCertHeader) 
throws CertificateException
-    {
+    SslFilterRequest(final HttpServletRequest request, final String 
clientCertHeader) throws CertificateException {
         super(request);
 
         // TODO jawi: perhaps we should make this class a little smarter wrt 
the given request:
         // it now always assumes it should rewrite its URL, while this might 
not always be the
         // case...
 
-        if (clientCertHeader != null && !"".equals(clientCertHeader.trim()))
-        {
+        if (clientCertHeader != null && !"".equals(clientCertHeader.trim())) {
             final String clientCert = 
HEADER_TO_CERT.matcher(clientCertHeader).replaceAll("\n");
 
-            try
-            {
+            try {
                 CertificateFactory fac = CertificateFactory.getInstance(X_509);
 
                 InputStream instream = new 
ByteArrayInputStream(clientCert.getBytes(UTF_8));
 
                 Collection<X509Certificate> certs = 
(Collection<X509Certificate>) fac.generateCertificates(instream);
                 request.setAttribute(ATTR_SSL_CERTIFICATE, certs.toArray(new 
X509Certificate[certs.size()]));
-            }
-            catch (UnsupportedEncodingException e)
-            {
+            } catch (UnsupportedEncodingException e) {
                 // Any JRE should support UTF-8...
                 throw new InternalError("UTF-8 not supported?!");
             }
         }
     }
 
-    void done()
-    {
+    void done() {
         getRequest().removeAttribute(ATTR_SSL_CERTIFICATE);
     }
 
     @Override
-    public String getScheme()
-    {
+    public String getScheme() {
         return HTTPS;
     }
 
     @Override
-    public boolean isSecure()
-    {
+    public boolean isSecure() {
         return true;
     }
 
     @Override
-    public StringBuffer getRequestURL()
-    {
+    public StringBuffer getRequestURL() {
         StringBuffer tmp = new StringBuffer(super.getRequestURL());
         // In case the request happened over http, simply insert an additional 
's'
         // to make the request appear to be done over https...
-        if (tmp.indexOf(HTTP_SCHEME_PREFIX) == 0)
-        {
+        if (tmp.indexOf(HTTP_SCHEME_PREFIX) == 0) {
             tmp.insert(4, 's');
         }
         return tmp;
     }
 
     @Override
-    public int getServerPort()
-    {
+    public int getServerPort() {
         int port;
 
-        try
-        {
+        try {
             String fwdPort = getHeader(HDR_X_FORWARDED_PORT);
             port = Integer.parseInt(fwdPort);
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             // Use default port
             port = 443;
         }
diff --git 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterResponse.java
 
b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterResponse.java
index a1a485cd5a..89ae257e23 100644
--- 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterResponse.java
+++ 
b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SslFilterResponse.java
@@ -33,17 +33,16 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponseWrapper;
 
-import org.apache.felix.http.sslfilter.internal.SslFilter.ConfigHolder;
+import org.apache.felix.http.sslfilter.internal.SslFilter.Config;
 
 /**
  * Provides a custom {@link HttpServletResponse} for use in SSL filter.
  */
-class SslFilterResponse extends HttpServletResponseWrapper
-{
+class SslFilterResponse extends HttpServletResponseWrapper {
     private final URL requestURL;
     private final String serverName;
     private final String serverProto;
@@ -53,8 +52,7 @@ class SslFilterResponse extends HttpServletResponseWrapper
 
     private final boolean rewriteAbsoluteUrls;
 
-    public SslFilterResponse(HttpServletResponse response, HttpServletRequest 
request, ConfigHolder config) throws MalformedURLException
-    {
+    public SslFilterResponse(final HttpServletResponse response, final 
HttpServletRequest request, final Config config) throws MalformedURLException {
         super(response);
 
         this.requestURL = new URL(request.getRequestURL().toString());
@@ -63,49 +61,40 @@ class SslFilterResponse extends HttpServletResponseWrapper
         this.serverName = request.getServerName();
         this.serverPort = request.getServerPort();
 
-        String value = request.getHeader(config.sslHeader);
+        String value = request.getHeader(config.ssl_forward_header());
 
-        if ((HDR_X_FORWARDED_PROTO.equalsIgnoreCase(config.sslHeader) && 
HTTP.equalsIgnoreCase(value)) ||
-                (HDR_X_FORWARDED_SSL.equalsIgnoreCase(config.sslHeader) && 
!config.sslValue.equalsIgnoreCase(value)))
-        {
+        if 
((HDR_X_FORWARDED_PROTO.equalsIgnoreCase(config.ssl_forward_header()) && 
HTTP.equalsIgnoreCase(value)) ||
+                
(HDR_X_FORWARDED_SSL.equalsIgnoreCase(config.ssl_forward_header()) && 
!config.ssl_forward_value().equalsIgnoreCase(value))) {
             // Not really a useful scenario: client is talking HTTP to proxy, 
and we should rewrite all HTTPS-based URLs...
             this.clientProto = HTTP;
             this.serverProto = HTTPS;
-        }
-        else
-        {
+        } else {
             // Client is talking HTTPS to proxy, so we should rewrite all 
HTTP-based URLs...
             this.clientProto = HTTPS;
             this.serverProto = HTTP;
         }
 
         int port;
-        try
-        {
+        try {
             String fwdPort = request.getHeader(HDR_X_FORWARDED_PORT);
             port = Integer.valueOf(fwdPort);
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             // Use default port for the used protocol...
             port = -1;
         }
         // Normalize the protocol port...
-        if ((port > 0) && ((HTTPS.equals(this.clientProto) && (port == 
HTTPS_PORT)) || (HTTP.equals(this.clientProto) && (port == HTTP_PORT))))
-        {
+        if ((port > 0) && ((HTTPS.equals(this.clientProto) && (port == 
HTTPS_PORT)) || (HTTP.equals(this.clientProto) && (port == HTTP_PORT)))) {
             // Port is the default one, do not use it...
             port = -1;
         }
 
         this.clientPort = port;
-        this.rewriteAbsoluteUrls = config.rewriteAbsoluteUrls;
+        this.rewriteAbsoluteUrls = config.rewrite_absolute_urls();
     }
 
     @Override
-    public void setHeader(String name, String value)
-    {
-        if (HDR_LOCATION.equalsIgnoreCase(name))
-        {
+    public void setHeader(String name, String value) {
+        if (HDR_LOCATION.equalsIgnoreCase(name)) {
                String rewritten = null;
                try {
                        rewritten = rewriteUrlIfNeeded(value);
@@ -113,8 +102,7 @@ class SslFilterResponse extends HttpServletResponseWrapper
                        // ignore
                }
             // Trying to set a redirect location to the original client-side 
URL, which should be https...
-            if (rewritten != null)
-            {
+            if (rewritten != null) {
                 value = rewritten;
             }
         }
@@ -122,65 +110,52 @@ class SslFilterResponse extends HttpServletResponseWrapper
     }
 
     @Override
-    public void sendRedirect(String location) throws IOException
-    {
+    public void sendRedirect(String location) throws IOException {
        String rewritten = null;
        try {
                rewritten = rewriteUrlIfNeeded(location);
        } catch (URISyntaxException e) {
                throw new IOException (e);
        }
-        if (rewritten != null)
-        {
+        if (rewritten != null) {
             location = rewritten;
         }
         super.sendRedirect(location);
     }
 
-    private int normalizePort(String protocol, int port)
-    {
-        if (port > 0)
-        {
+    private int normalizePort(String protocol, int port) {
+        if (port > 0) {
             return port;
         }
-        if (HTTPS.equalsIgnoreCase(protocol))
-        {
+        if (HTTPS.equalsIgnoreCase(protocol)) {
             return HTTPS_PORT;
         }
         return HTTP_PORT;
     }
 
-    private String rewriteUrlIfNeeded(String value) throws URISyntaxException
-    {
-        if (value == null || (!this.rewriteAbsoluteUrls && 
value.contains("://")) )
-        {
+    private String rewriteUrlIfNeeded(String value) throws URISyntaxException {
+        if (value == null || (!this.rewriteAbsoluteUrls && 
value.contains("://")) ) {
             return null;
         }
 
-        try
-        {
+        try {           
             URI uri;
-            if (value.startsWith(this.serverProto.concat("://")))
-            {
+            if (value.startsWith(this.serverProto.concat("://"))) {
 
                 uri = new URI (value);
-            }
-            else
-            {
+            } else {
                 URL url = new URL(this.requestURL, value);
                 uri = url.toURI();
             }
 
             String actualProto = uri.getScheme();
 
-            if (!this.serverName.equals(uri.getHost()))
-            {
+            if (!this.serverName.equals(uri.getHost())) {
                 // going to a different host
                 return null;
             }
 
-            if (normalizePort(this.serverProto, this.serverPort) != 
normalizePort(actualProto, uri.getPort()))
-            {
+            if (normalizePort(this.serverProto, this.serverPort) != 
normalizePort(actualProto, uri.getPort())) {
                 // not to default port
                 return null;
             }
@@ -189,33 +164,24 @@ class SslFilterResponse extends HttpServletResponseWrapper
             sb.append(this.clientProto);
             sb.append("://");
             sb.append(this.serverName);
-            if ( this.clientPort != -1 )
-            {
+            if ( this.clientPort != -1 ) {
                 sb.append(':');
                 sb.append(this.clientPort);
             }
-            if ( uri.getRawPath() != null )
-            {
+            if ( uri.getRawPath() != null ) {
                 sb.append(uri.getRawPath());
             }
-            if ( uri.getRawQuery() != null )
-            {
+            if ( uri.getRawQuery() != null ) {
                 sb.append('?');
                 sb.append(uri.getRawQuery());
             }
-            if ( uri.getRawFragment() != null )
-            {
+            if ( uri.getRawFragment() != null ) {
                 sb.append('#');
                 sb.append(uri.getRawFragment());
             }
             return sb.toString();
-        }
-        catch (MalformedURLException e)
-        {
+        } catch (MalformedURLException e) {
             return null;
         }
     }
-
-
-
 }
diff --git 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SystemLogger.java
 
b/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SystemLogger.java
deleted file mode 100644
index 8193165bd6..0000000000
--- 
a/http/sslfilter/src/main/java/org/apache/felix/http/sslfilter/internal/SystemLogger.java
+++ /dev/null
@@ -1,82 +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.felix.http.sslfilter.internal;
-
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogService;
-
-/**
- * @author <a href="mailto:[email protected]";>Felix Project Team</a>
- */
-final class SystemLogger
-{
-    private static volatile LogService log;
-
-    private SystemLogger()
-    {
-        // Nop
-    }
-
-    static void setLogService(LogService _log)
-    {
-        log = _log;
-    }
-
-    static LogService getLogService()
-    {
-        return log;
-    }
-
-    public static void log(int level, String message)
-    {
-        LogService service = getLogService();
-        if (service != null)
-        {
-            service.log(level, message);
-        }
-    }
-
-    public static void log(int level, String message, Throwable exception)
-    {
-        LogService service = getLogService();
-        if (service != null)
-        {
-            service.log(level, message, exception);
-        }
-    }
-
-    public static void log(ServiceReference sr, int level, String message)
-    {
-        LogService service = getLogService();
-        if (service != null)
-        {
-            service.log(sr, level, message);
-        }
-    }
-
-    public static void log(ServiceReference sr, int level, String message, 
Throwable exception)
-    {
-        LogService service = getLogService();
-        if (service != null)
-        {
-            service.log(sr, level, message, exception);
-        }
-    }
-}
diff --git 
a/http/sslfilter/src/main/resources/OSGI-INF/metatype/org.apache.felix.http.sslfilter.SslFilter.properties
 
b/http/sslfilter/src/main/resources/OSGI-INF/metatype/org.apache.felix.http.sslfilter.SslFilter.properties
deleted file mode 100644
index c39b9f9437..0000000000
--- 
a/http/sslfilter/src/main/resources/OSGI-INF/metatype/org.apache.felix.http.sslfilter.SslFilter.properties
+++ /dev/null
@@ -1,26 +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.
-name=Apache Felix Http Service SSL Filter
-description=Configuration for the Http Service SSL Filter. Please consult the 
documentation of your proxy for the actual headers and values to use. 
-ssl-forward.header.name=SSL forward header
-ssl-forward.header.description=HTTP Request header name that indicates a 
request is a SSL request terminated at a proxy between the client and the 
originating server. The default value is 'X-Forwarded-SSL' as is customarily 
used in the wild. Other commonly used names are\: 'X-Forwarded-Proto' (Amazon 
ELB), 'X-Forwarded-Protocol' (alternative), and 'Front-End-Https' (Microsoft 
IIS).
-ssl-forward.value.name=SSL forward value
-ssl-forward.value.description=HTTP Request header value that indicates a 
request is a SSL request terminated at a proxy. The default value is 'on'. 
Another commonly used value is 'https'.
-ssl-forward-cert.header.name=SSL client header
-ssl-forward-cert.header.description=HTTP Request header name that contains the 
client certificate forwarded by a proxy. The default value is 
'X-Forwarded-SSL-Certificate'. Another commonly used value is 
'X-Forwarded-SSL-Client-Cert'.
-rewrite.absolute.urls.name=Rewrite Absolute URLs
-rewrite.absolute.urls.description=If enabled, absolute URLs passed to either 
sendRedirect or by setting the location header are rewritten as well.
diff --git 
a/http/sslfilter/src/main/resources/OSGI-INF/metatype/org.apache.felix.http.sslfilter.SslFilter.xml
 
b/http/sslfilter/src/main/resources/OSGI-INF/metatype/org.apache.felix.http.sslfilter.SslFilter.xml
deleted file mode 100644
index 91a82b3d1e..0000000000
--- 
a/http/sslfilter/src/main/resources/OSGI-INF/metatype/org.apache.felix.http.sslfilter.SslFilter.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0"; 
localization="OSGI-INF/metatype/org.apache.felix.http.sslfilter.SslFilter">
-    <OCD id="org.apache.felix.http.sslfilter.SslFilter" name="%name" 
description="%description">
-        <AD id="ssl-forward.header" name="%ssl-forward.header.name" 
description="%ssl-forward.header.description"
-               type="String" default="X-Forwarded-SSL" required="true" />
-        <AD id="ssl-forward.value" name="%ssl-forward.value.name" 
description="%ssl-forward.value.description"
-               type="String" default="on" required="true" />
-        <AD id="ssl-forward-cert.header" name="%ssl-forward-cert.header.name" 
description="%ssl-forward-cert.header.description"
-               type="String" default="X-Forwarded-SSL-Certificate" 
required="false"/>
-        <AD id="rewrite.absolute.urls" name="%rewrite.absolute.urls.name" 
description="%rewrite.absolute.urls.description"
-            type="Boolean" default="false" required="false"/>
-    </OCD>
-    <Designate pid="org.apache.felix.http.sslfilter.SslFilter">
-        <Object ocdref="org.apache.felix.http.sslfilter.SslFilter"/>
-    </Designate>
-</metatype:MetaData>
-<!--
-    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.
--->
diff --git 
a/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterJettyTest.java
 
b/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterJettyTest.java
index 81d8ec8dba..e67dc3166f 100644
--- 
a/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterJettyTest.java
+++ 
b/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterJettyTest.java
@@ -21,6 +21,7 @@ package org.apache.felix.http.sslfilter.internal;
 import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_LOCATION;
 import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_X_FORWARDED_PROTO;
 import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_X_FORWARDED_SSL;
+import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_X_FORWARDED_SSL_CERTIFICATE;
 import static org.apache.felix.http.sslfilter.internal.SslFilterConstants.HTTP;
 import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HTTPS;
 import static org.junit.Assert.assertEquals;
@@ -33,11 +34,11 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.EnumSet;
 
-import javax.servlet.DispatcherType;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.FilterHolder;
@@ -46,9 +47,9 @@ import org.eclipse.jetty.servlet.ServletHolder;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 
-public class SslFilterJettyTest
-{
+public class SslFilterJettyTest {
     private InetSocketAddress serverAddress;
 
     private Server server;
@@ -56,13 +57,18 @@ public class SslFilterJettyTest
     private boolean originalFollowRedirects;
 
     @Before
-    public void setupServer() throws Exception
-    {
+    public void setupServer() throws Exception {
+        final SslFilter.Config config = Mockito.mock(SslFilter.Config.class);
+        Mockito.when(config.rewrite_absolute_urls()).thenReturn(false);
+        
Mockito.when(config.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_SSL);
+        Mockito.when(config.ssl_forward_value()).thenReturn("on");
+        
Mockito.when(config.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
+
         this.serverAddress = new InetSocketAddress("localhost", 8080);
 
         this.context = new 
ServletContextHandler(ServletContextHandler.SESSIONS);
         this.context.setContextPath("/");
-        this.context.addFilter(new FilterHolder(new SslFilter()), "/*", 
EnumSet.of(DispatcherType.REQUEST));
+        this.context.addFilter(new FilterHolder(new SslFilter(config)), "/*", 
EnumSet.of(DispatcherType.REQUEST));
 
         this.server = new Server(this.serverAddress);
         this.server.setHandler(this.context);
@@ -72,19 +78,16 @@ public class SslFilterJettyTest
     }
 
     @After
-    public void tearDown() throws Exception
-    {
+    public void tearDown() throws Exception {
         HttpURLConnection.setFollowRedirects(this.originalFollowRedirects);
 
-        if (this.server != null)
-        {
+        if (this.server != null) {
             this.server.stop();
         }
     }
 
     @Test
-    public void testSslFilterWithRelativeRedirectURL() throws Exception
-    {
+    public void testSslFilterWithRelativeRedirectURL() throws Exception {
         String servletPath = "/test";
         String redirectPath = "/foo";
 
@@ -99,8 +102,7 @@ public class SslFilterJettyTest
     }
 
     @Test
-    public void testSslFilterWithAbsoluteRedirectURL() throws Exception
-    {
+    public void testSslFilterWithAbsoluteRedirectURL() throws Exception {
         String servletPath = "/test";
         String redirectPath = String.format("http://%s:%d/foo";, 
this.serverAddress.getHostName(), this.serverAddress.getPort());
 
@@ -116,8 +118,7 @@ public class SslFilterJettyTest
     }
 
     @Test
-    public void testSslFilterWithAbsoluteRedirectURLWithoutScheme() throws 
Exception
-    {
+    public void testSslFilterWithAbsoluteRedirectURLWithoutScheme() throws 
Exception {
         String servletPath = "/test";
         String redirectPath = String.format("//%s:%d/foo", 
this.serverAddress.getHostName(), this.serverAddress.getPort());
 
@@ -133,8 +134,7 @@ public class SslFilterJettyTest
     }
 
     @Test
-    public void testSslFilterWithAbsoluteRedirectURLWithHttpsScheme() throws 
Exception
-    {
+    public void testSslFilterWithAbsoluteRedirectURLWithHttpsScheme() throws 
Exception {
         String servletPath = "/test";
         String redirectPath = String.format("https://%s:%d/foo";, 
this.serverAddress.getHostName(), this.serverAddress.getPort());
 
@@ -149,8 +149,7 @@ public class SslFilterJettyTest
         assertTrue(location, location.startsWith(HTTPS));
     }
 
-    private HttpURLConnection openConnection(URL url) throws IOException
-    {
+    private HttpURLConnection openConnection(URL url) throws IOException {
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
         conn.setRequestProperty(HDR_X_FORWARDED_PROTO, HTTPS);
         conn.setRequestProperty(HDR_X_FORWARDED_SSL, "on");
@@ -158,23 +157,19 @@ public class SslFilterJettyTest
         return conn;
     }
 
-    private URL createURL(String path) throws MalformedURLException
-    {
+    private URL createURL(String path) throws MalformedURLException {
         return new URL(HTTP, this.serverAddress.getHostName(), 
this.serverAddress.getPort(), path);
     }
 
-    private static class RedirectServlet extends HttpServlet
-    {
+    private static class RedirectServlet extends HttpServlet {
         private final String redirectPath;
 
-        private RedirectServlet(String redirectPath)
-        {
+        private RedirectServlet(String redirectPath) {
             this.redirectPath = redirectPath;
         }
 
         @Override
-        protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException
-        {
+        protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
             resp.sendRedirect(redirectPath);
             assertEquals(HTTPS, req.getScheme());
         }
diff --git 
a/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterRequestTest.java
 
b/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterRequestTest.java
index a92d5ce28b..8cc4f43855 100644
--- 
a/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterRequestTest.java
+++ 
b/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterRequestTest.java
@@ -18,14 +18,14 @@
  */
 package org.apache.felix.http.sslfilter.internal;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_X_FORWARDED_PORT;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -33,8 +33,7 @@ import org.mockito.Mockito;
 public class SslFilterRequestTest
 {
     @Test
-    public void test_isSecure() throws Exception
-    {
+    public void test_isSecure() throws Exception {
         HttpServletRequest req = mock(HttpServletRequest.class);
         SslFilterRequest sreq = new SslFilterRequest(req, null);
 
@@ -50,8 +49,7 @@ public class SslFilterRequestTest
     }
 
     @Test
-    public void test_getScheme() throws Exception
-    {
+    public void test_getScheme() throws Exception {
         HttpServletRequest req = Mockito.mock(HttpServletRequest.class);
         SslFilterRequest sreq = new SslFilterRequest(req, null);
 
@@ -67,8 +65,7 @@ public class SslFilterRequestTest
     }
 
     @Test
-    public void test_getRequestURL() throws Exception
-    {
+    public void test_getRequestURL() throws Exception {
         HttpServletRequest req = Mockito.mock(HttpServletRequest.class);
         SslFilterRequest sreq = new SslFilterRequest(req, null);
 
@@ -84,8 +81,7 @@ public class SslFilterRequestTest
     }
     
     @Test
-    public void test_getServerPort() throws Exception
-    {
+    public void test_getServerPort() throws Exception {
         HttpServletRequest req = Mockito.mock(HttpServletRequest.class);
         SslFilterRequest sreq = new SslFilterRequest(req, null);
         
@@ -113,6 +109,5 @@ public class SslFilterRequestTest
         
         when(req.getHeader(HDR_X_FORWARDED_PORT)).thenReturn("4502");        
         assertEquals(4502, sreq.getServerPort());
-        
     }
 }
diff --git 
a/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterResponseTest.java
 
b/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterResponseTest.java
index cebc0feb63..945b988845 100644
--- 
a/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterResponseTest.java
+++ 
b/http/sslfilter/src/test/java/org/apache/felix/http/sslfilter/internal/SslFilterResponseTest.java
@@ -18,8 +18,9 @@
  */
 package org.apache.felix.http.sslfilter.internal;
 
-import static junit.framework.Assert.assertEquals;
+import static org.junit.Assert.assertEquals;
 import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_X_FORWARDED_PROTO;
+import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HDR_X_FORWARDED_SSL_CERTIFICATE;
 import static org.apache.felix.http.sslfilter.internal.SslFilterConstants.HTTP;
 import static 
org.apache.felix.http.sslfilter.internal.SslFilterConstants.HTTPS;
 import static org.mockito.Mockito.mock;
@@ -33,12 +34,11 @@ import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
-import org.apache.felix.http.sslfilter.internal.SslFilter.ConfigHolder;
 import org.junit.Test;
 
 public class SslFilterResponseTest
@@ -56,11 +56,15 @@ public class SslFilterResponseTest
     private static final String LOCATION = "Location";
 
     @Test
-    public void testSetHttpLocationHeaderToNullValue() throws Exception
-    {
+    public void testSetHttpLocationHeaderToNullValue() throws Exception {
         TestHttpServletResponse resp = createServletResponse();
         HttpServletRequest req = createServletRequest(BACKEND_SERVER, PATH);
-        ConfigHolder cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", 
null, false);
+
+        final SslFilter.Config cfg = mock(SslFilter.Config.class);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
 
         SslFilterResponse sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -70,13 +74,16 @@ public class SslFilterResponseTest
     }
 
     @Test
-    public void testSetHttpsLocationHeaderToOriginalRequestURI() throws 
Exception
-    {
+    public void testSetHttpsLocationHeaderToOriginalRequestURI() throws 
Exception {
         String location, expected;
 
         TestHttpServletResponse resp = createServletResponse();
         HttpServletRequest req = createServletRequest(BACKEND_SERVER, PATH);
-        ConfigHolder cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", 
null, false);
+        final SslFilter.Config cfg = mock(SslFilter.Config.class);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
 
         SslFilterResponse sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -88,7 +95,8 @@ public class SslFilterResponseTest
         assertEquals(expected, resp.getHeader(LOCATION));
 
         req = createServletRequest(BACKEND_SERVER, PATH);
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
 
         sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -101,14 +109,17 @@ public class SslFilterResponseTest
     }
 
     @Test
-    public void testSetHttpLocationHeaderToOriginalRequestURI() throws 
Exception
-    {
+    public void testSetHttpLocationHeaderToOriginalRequestURI() throws 
Exception {
         String location, expected;
 
         TestHttpServletResponse resp = createServletResponse();
         HttpServletRequest req = createServletRequest(BACKEND_SERVER, PATH);
 
-        ConfigHolder cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", 
null, false);
+        final SslFilter.Config cfg = mock(SslFilter.Config.class);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
 
         SslFilterResponse sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -119,7 +130,7 @@ public class SslFilterResponseTest
 
         assertEquals(expected, resp.getHeader(LOCATION));
 
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
 
         sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -132,13 +143,17 @@ public class SslFilterResponseTest
     }
 
     @Test
-    public void testSetHttpLocationHeaderToOriginalRequestWithExplicitPort() 
throws Exception
-    {
+    public void testSetHttpLocationHeaderToOriginalRequestWithExplicitPort() 
throws Exception {
         String location, expected;
 
         TestHttpServletResponse resp = createServletResponse();
         HttpServletRequest req = createServletRequest(BACKEND_SERVER, PATH);
-        ConfigHolder cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", 
null, false);
+
+        final SslFilter.Config cfg = mock(SslFilter.Config.class);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
 
         SslFilterResponse sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -151,7 +166,7 @@ public class SslFilterResponseTest
 
         resp = createServletResponse();
         req = createServletRequest(BACKEND_SERVER, PATH);
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
 
         sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -164,13 +179,16 @@ public class SslFilterResponseTest
     }
 
     @Test
-    public void testSetHttpLocationHeaderToOriginalRequestWithForwardedPort() 
throws Exception
-    {
+    public void testSetHttpLocationHeaderToOriginalRequestWithForwardedPort() 
throws Exception {
         String location, expected;
 
         TestHttpServletResponse resp = createServletResponse();
         HttpServletRequest req = createServletRequest(BACKEND_SERVER, 
DEFAULT_HTTP_PORT, HTTPS, ALT_HTTPS_PORT, PATH);
-        ConfigHolder cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", 
null, false);
+        final SslFilter.Config cfg = mock(SslFilter.Config.class);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
 
         SslFilterResponse sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -183,7 +201,7 @@ public class SslFilterResponseTest
 
         resp = createServletResponse();
         req = createServletRequest(BACKEND_SERVER, DEFAULT_HTTP_PORT, HTTPS, 
ALT_HTTPS_PORT, PATH);
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
 
         sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -196,13 +214,16 @@ public class SslFilterResponseTest
     }
 
     @Test
-    public void testSetHttpLocationHeaderToOriginalRequestWithDifferentPort() 
throws Exception
-    {
+    public void testSetHttpLocationHeaderToOriginalRequestWithDifferentPort() 
throws Exception {
         String location, expected;
 
         TestHttpServletResponse resp = createServletResponse();
         HttpServletRequest req = createServletRequest(BACKEND_SERVER, PATH);
-        ConfigHolder cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", 
null, false);
+        final SslFilter.Config cfg = mock(SslFilter.Config.class);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
 
         SslFilterResponse sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -215,7 +236,7 @@ public class SslFilterResponseTest
 
         resp = createServletResponse();
         req = createServletRequest(BACKEND_SERVER, PATH);
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
 
         sresp = new SslFilterResponse(resp, req, cfg);
 
@@ -228,11 +249,14 @@ public class SslFilterResponseTest
     }
 
     @Test
-    public void testSetHttpLocationHeaderToOtherRequestURI() throws Exception
-    {
+    public void testSetHttpLocationHeaderToOtherRequestURI() throws Exception {
         TestHttpServletResponse resp = createServletResponse();
         HttpServletRequest req = createServletRequest(BACKEND_SERVER, PATH);
-        ConfigHolder cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", 
null, false);
+        final SslFilter.Config cfg = mock(SslFilter.Config.class);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
 
         SslFilterResponse sresp = new SslFilterResponse(resp, req,cfg);
 
@@ -245,7 +269,7 @@ public class SslFilterResponseTest
 
         resp = createServletResponse();
         req = createServletRequest(BACKEND_SERVER, PATH);
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
 
         sresp = new SslFilterResponse(resp, req,cfg);
 
@@ -258,33 +282,33 @@ public class SslFilterResponseTest
     }
 
     @Test
-    public void testFragment() throws Exception
-    {
+    public void testFragment() throws Exception {
         test("/foo#abc");
     }
 
     @Test
-    public void testQueryString() throws Exception
-    {
+    public void testQueryString() throws Exception {
         final String queryString = 
"?resource=%2Fen.html%3FpbOpen%3Dtrue&$$login$$=%24%24login%24%24&j_reason=errors.login.account.not.found";
         test("/" + queryString);
     }
 
     @Test
-    public void testPathEncoding() throws Exception
-    {
+    public void testPathEncoding() throws Exception {
         test("/apps/test/content/%E4%B8%83%E6%9C%88%E5%8F%B7.redirect");
     }
 
 
-    private void test(final String path) throws Exception
-    {
+    private void test(final String path) throws Exception {
         TestHttpServletResponse response = createServletResponse();
         HttpServletRequest req = createServletRequest(BACKEND_SERVER, PATH);
 
         // test - don't rewrite absolute urls / absolute http url / 
sendRedirect
         // expected: no rewrite
-        ConfigHolder cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", 
null, false);
+        SslFilter.Config cfg = mock(SslFilter.Config.class);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         SslFilterResponse sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.sendRedirect("http://"; + BACKEND_SERVER + path);
@@ -292,7 +316,10 @@ public class SslFilterResponseTest
 
         // test - don't rewrite absolute urls / absolute http url / setHeader
         // expected: no rewrite
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, false);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.setHeader(SslFilterConstants.HDR_LOCATION, "http://"; + 
BACKEND_SERVER + path);
@@ -300,7 +327,10 @@ public class SslFilterResponseTest
 
         // test - don't rewrite absolute urls / absolute https url / 
sendRedirect
         // expected: no rewrite
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, false);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.sendRedirect("https://"; + BACKEND_SERVER + path);
@@ -308,7 +338,10 @@ public class SslFilterResponseTest
 
         // test - don't rewrite absolute urls / absolute https url / setHeader
         // expected: no rewrite
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, false);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.setHeader(SslFilterConstants.HDR_LOCATION, "https://"; + 
BACKEND_SERVER + path);
@@ -316,7 +349,10 @@ public class SslFilterResponseTest
 
         // test - rewrite absolute urls / absolute http url / sendRedirect
         // expected: rewrite
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.sendRedirect("http://"; + BACKEND_SERVER + path);
@@ -324,7 +360,10 @@ public class SslFilterResponseTest
 
         // test - rewrite absolute urls / absolute http url / setHeader
         // expected: rewrite
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.setHeader(SslFilterConstants.HDR_LOCATION, "http://"; + 
BACKEND_SERVER + path);
@@ -332,7 +371,10 @@ public class SslFilterResponseTest
 
         // test - rewrite absolute urls / absolute https url / sendRedirect
         // expected: no rewrite
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.sendRedirect("https://"; + BACKEND_SERVER + path);
@@ -340,7 +382,10 @@ public class SslFilterResponseTest
 
         // test - rewrite absolute urls / absolute https url / setHeader
         // expected: no rewrite
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.setHeader(SslFilterConstants.HDR_LOCATION, "https://"; + 
BACKEND_SERVER + path);
@@ -348,7 +393,10 @@ public class SslFilterResponseTest
 
         // test - don't rewrite absolute urls / relative path / setHeader
         // expected: rewrite
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, false);
+        when(cfg.rewrite_absolute_urls()).thenReturn(false);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.sendRedirect(path);
@@ -356,20 +404,21 @@ public class SslFilterResponseTest
 
         // test - rewrite absolute urls / relative path / sendRedirect
         // expected: rewrite
-        cfg = new ConfigHolder(HDR_X_FORWARDED_PROTO, "https", null, true);
+        when(cfg.rewrite_absolute_urls()).thenReturn(true);
+        when(cfg.ssl_forward_header()).thenReturn(HDR_X_FORWARDED_PROTO);
+        when(cfg.ssl_forward_value()).thenReturn("https");
+        
when(cfg.ssl_forward_cert_header()).thenReturn(HDR_X_FORWARDED_SSL_CERTIFICATE);
         sresp = new SslFilterResponse(response, req, cfg);
 
         sresp.setHeader(SslFilterConstants.HDR_LOCATION, path);
         assertEquals("https://"; + BACKEND_SERVER + path, 
sresp.getHeader(SslFilterConstants.HDR_LOCATION));
     }
 
-    private HttpServletRequest createServletRequest(String serverName, String 
requestURL)
-    {
+    private HttpServletRequest createServletRequest(String serverName, String 
requestURL) {
         return createServletRequest(serverName, DEFAULT_HTTP_PORT, HTTPS, 
DEFAULT_HTTPS_PORT, requestURL);
     }
 
-    private HttpServletRequest createServletRequest(String serverName, String 
serverPort, String forwardedProto, String forwardedPort, String requestURL)
-    {
+    private HttpServletRequest createServletRequest(String serverName, String 
serverPort, String forwardedProto, String forwardedPort, String requestURL) {
         HttpServletRequest req = mock(HttpServletRequest.class);
         when(req.getServerName()).thenReturn(serverName);
         when(req.getServerPort()).thenReturn(Integer.parseInt(serverPort));
@@ -379,239 +428,200 @@ public class SslFilterResponseTest
         return req;
     }
 
-    private TestHttpServletResponse createServletResponse()
-    {
+    private TestHttpServletResponse createServletResponse() {
         return new TestHttpServletResponse();
     }
 
-    private static class TestHttpServletResponse implements HttpServletResponse
-    {
+    private static class TestHttpServletResponse implements 
HttpServletResponse {
         private final Map<String, String> headers = new HashMap<String, 
String>();
         private int status = -1;
         private boolean committed = false;
 
         @Override
-        public void setLocale(Locale loc)
-        {
+        public void setLocale(Locale loc) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setContentType(String type)
-        {
+        public void setContentType(String type) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setContentLength(int len)
-        {
+        public void setContentLength(int len) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setContentLengthLong(long len)
-        {
+        public void setContentLengthLong(long len) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setCharacterEncoding(String charset)
-        {
+        public void setCharacterEncoding(String charset) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void setBufferSize(int size)
-        {
+        public void setBufferSize(int size) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void resetBuffer()
-        {
+        public void resetBuffer() {
         }
 
         @Override
-        public void reset()
-        {
+        public void reset() {
         }
 
         @Override
-        public boolean isCommitted()
-        {
+        public boolean isCommitted() {
             return this.committed;
         }
 
         @Override
-        public PrintWriter getWriter() throws IOException
-        {
+        public PrintWriter getWriter() throws IOException {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public ServletOutputStream getOutputStream() throws IOException
-        {
+        public ServletOutputStream getOutputStream() throws IOException {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public Locale getLocale()
-        {
+        public Locale getLocale() {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public String getContentType()
-        {
+        public String getContentType() {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public String getCharacterEncoding()
-        {
+        public String getCharacterEncoding() {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public int getBufferSize()
-        {
+        public int getBufferSize() {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void flushBuffer() throws IOException
-        {
+        public void flushBuffer() throws IOException {
             committed = true;
         }
 
         @SuppressWarnings("deprecation")
         @Override
-        public void setStatus(int sc, String sm)
-        {
+        public void setStatus(int sc, String sm) {
             status = sc;
             committed = true;
         }
 
         @Override
-        public void setStatus(int sc)
-        {
+        public void setStatus(int sc) {
             status = sc;
             committed = true;
         }
 
         @Override
-        public void setIntHeader(String name, int value)
-        {
+        public void setIntHeader(String name, int value) {
             headers.put(name, Integer.toString(value));
         }
 
         @Override
-        public void setHeader(String name, String value)
-        {
+        public void setHeader(String name, String value) {
             headers.put(name, value);
         }
 
         @Override
-        public void setDateHeader(String name, long date)
-        {
+        public void setDateHeader(String name, long date) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void sendRedirect(String location) throws IOException
-        {
+        public void sendRedirect(String location) throws IOException {
             this.setHeader(SslFilterConstants.HDR_LOCATION, location);
         }
 
         @Override
-        public void sendError(int sc, String msg) throws IOException
-        {
+        public void sendError(int sc, String msg) throws IOException {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void sendError(int sc) throws IOException
-        {
+        public void sendError(int sc) throws IOException {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public int getStatus()
-        {
+        public int getStatus() {
             return status;
         }
 
         @Override
-        public Collection<String> getHeaders(String name)
-        {
+        public Collection<String> getHeaders(String name) {
             return Collections.singleton(headers.get(name));
         }
 
         @Override
-        public Collection<String> getHeaderNames()
-        {
+        public Collection<String> getHeaderNames() {
             return headers.keySet();
         }
 
         @Override
-        public String getHeader(String name)
-        {
+        public String getHeader(String name) {
             return headers.get(name);
         }
 
         @SuppressWarnings("deprecation")
         @Override
-        public String encodeUrl(String url)
-        {
+        public String encodeUrl(String url) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public String encodeURL(String url)
-        {
+        public String encodeURL(String url) {
             throw new UnsupportedOperationException();
         }
 
         @SuppressWarnings("deprecation")
         @Override
-        public String encodeRedirectUrl(String url)
-        {
+        public String encodeRedirectUrl(String url) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public String encodeRedirectURL(String url)
-        {
+        public String encodeRedirectURL(String url) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public boolean containsHeader(String name)
-        {
+        public boolean containsHeader(String name) {
             return headers.containsKey(name);
         }
 
         @Override
-        public void addIntHeader(String name, int value)
-        {
+        public void addIntHeader(String name, int value) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void addHeader(String name, String value)
-        {
+        public void addHeader(String name, String value) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void addDateHeader(String name, long date)
-        {
+        public void addDateHeader(String name, long date) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public void addCookie(Cookie cookie)
-        {
+        public void addCookie(Cookie cookie) {
             throw new UnsupportedOperationException();
         }
     }

Reply via email to