فهرست منبع

update data-service to use servlet 6 jakartax namespace

Jason Rivard 2 سال پیش
والد
کامیت
069fbc5fff

+ 3 - 0
build/checkstyle-import.xml

@@ -83,6 +83,7 @@
     <allow pkg="java.awt"/>
     <allow pkg="java.awt"/>
     <allow pkg="javax.security"/>
     <allow pkg="javax.security"/>
     <allow pkg="javax.servlet"/>
     <allow pkg="javax.servlet"/>
+    <allow pkg="jakarta.servlet"/>
     <allow pkg="javax.net"/>
     <allow pkg="javax.net"/>
     <allow pkg="javax.crypto"/>
     <allow pkg="javax.crypto"/>
     <allow pkg="jakarta.mail"/>
     <allow pkg="jakarta.mail"/>
@@ -105,12 +106,14 @@
     <!--servlet -->
     <!--servlet -->
     <subpackage name="http.servlet">
     <subpackage name="http.servlet">
         <allow pkg="javax.servlet"/>
         <allow pkg="javax.servlet"/>
+        <allow pkg="jakarta.servlet"/>
     </subpackage>
     </subpackage>
 
 
     <!-- web services -->
     <!-- web services -->
     <subpackage name="ws.server">
     <subpackage name="ws.server">
         <allow pkg="javax.ws"/>
         <allow pkg="javax.ws"/>
         <allow pkg="javax.servlet"/>
         <allow pkg="javax.servlet"/>
+        <allow pkg="jakarta.servlet"/>
         <allow pkg="org.glassfish.jersey"/>
         <allow pkg="org.glassfish.jersey"/>
     </subpackage>
     </subpackage>
 
 

+ 28 - 7
data-service/pom.xml

@@ -72,6 +72,27 @@
                     </archive>
                     </archive>
                 </configuration>
                 </configuration>
             </plugin>
             </plugin>
+            <plugin>
+                <groupId>io.leonard.maven.plugins</groupId>
+                <artifactId>jspc-maven-plugin</artifactId>
+                <version>4.0.1</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                        </goals>
+                        <phase>compile</phase>
+                        <configuration>
+                            <compiler>17</compiler>
+                            <trimSpaces>true</trimSpaces>
+                            <compilerVersion>${maven.compiler.source}</compilerVersion>
+                            <keepSources>false</keepSources>
+                            <threads>20</threads>
+                            <mergeFragment>false</mergeFragment>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
             <plugin>
             <plugin>
                 <artifactId>maven-resources-plugin</artifactId>
                 <artifactId>maven-resources-plugin</artifactId>
                 <version>3.3.0</version>
                 <version>3.3.0</version>
@@ -112,7 +133,7 @@
                         <configuration>
                         <configuration>
                             <skip>${skipDocker}</skip>
                             <skip>${skipDocker}</skip>
                             <from>
                             <from>
-                                <image>tomcat:9.0-jdk17-temurin</image>
+                                <image>tomcat:10-jdk17</image>
                             </from>
                             </from>
                             <to>
                             <to>
                                 <image>pwm/pwm-data-service</image>
                                 <image>pwm/pwm-data-service</image>
@@ -174,15 +195,15 @@
 
 
         <!-- container dependencies -->
         <!-- container dependencies -->
         <dependency>
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <version>4.0.1</version>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+            <version>6.0.0</version>
             <scope>provided</scope>
             <scope>provided</scope>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
-            <groupId>javax.servlet.jsp</groupId>
-            <artifactId>javax.servlet.jsp-api</artifactId>
-            <version>2.3.3</version>
+            <groupId>jakarta.servlet.jsp</groupId>
+            <artifactId>jakarta.servlet.jsp-api</artifactId>
+            <version>3.1.0</version>
             <scope>provided</scope>
             <scope>provided</scope>
         </dependency>
         </dependency>
         <!-- / container dependencies -->
         <!-- / container dependencies -->

+ 4 - 4
data-service/src/main/java/password/pwm/receiver/ContextManager.java

@@ -20,10 +20,10 @@
 
 
 package password.pwm.receiver;
 package password.pwm.receiver;
 
 
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import javax.servlet.annotation.WebListener;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContextListener;
+import jakarta.servlet.annotation.WebListener;
 
 
 @WebListener
 @WebListener
 public class ContextManager implements ServletContextListener
 public class ContextManager implements ServletContextListener

+ 1 - 1
data-service/src/main/java/password/pwm/receiver/CsvDownloadServlet.java

@@ -20,7 +20,7 @@
 
 
 package password.pwm.receiver;
 package password.pwm.receiver;
 
 
-import javax.servlet.annotation.WebServlet;
+import jakarta.servlet.annotation.WebServlet;
 
 
 @WebServlet(
 @WebServlet(
         name = "CsvDownloadServlet",
         name = "CsvDownloadServlet",

+ 4 - 4
data-service/src/main/java/password/pwm/receiver/PublishVersionServlet.java

@@ -23,10 +23,10 @@ package password.pwm.receiver;
 import password.pwm.bean.pub.PublishVersionBean;
 import password.pwm.bean.pub.PublishVersionBean;
 import password.pwm.ws.server.RestResultBean;
 import password.pwm.ws.server.RestResultBean;
 
 
-import javax.servlet.annotation.WebServlet;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.Collections;
 
 

+ 9 - 4
data-service/src/main/java/password/pwm/receiver/ReceiverUtil.java

@@ -20,11 +20,11 @@
 
 
 package password.pwm.receiver;
 package password.pwm.receiver;
 
 
-import password.pwm.http.PwmHttpRequestWrapper;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import password.pwm.PwmConstants;
 import password.pwm.ws.server.RestResultBean;
 import password.pwm.ws.server.RestResultBean;
 
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
 
 
 public class ReceiverUtil
 public class ReceiverUtil
@@ -37,7 +37,7 @@ public class ReceiverUtil
     )
     )
             throws IOException
             throws IOException
     {
     {
-        final boolean jsonPrettyPrint = PwmHttpRequestWrapper.isPrettyPrintJsonParameterTrue( request );
+        final boolean jsonPrettyPrint = isPrettyPrintJsonParameterTrue( request );
         response.setHeader( "Content", "application/json" );
         response.setHeader( "Content", "application/json" );
         response.getWriter().print( restResultBean.toJson( jsonPrettyPrint ) );
         response.getWriter().print( restResultBean.toJson( jsonPrettyPrint ) );
     }
     }
@@ -53,4 +53,9 @@ public class ReceiverUtil
             return 0;
             return 0;
         }
         }
     }
     }
+
+    public static boolean isPrettyPrintJsonParameterTrue( final HttpServletRequest request )
+    {
+        return Boolean.parseBoolean( request.getParameter( PwmConstants.PARAM_FORMAT_JSON_PRETTY ) );
+    }
 }
 }

+ 8 - 8
data-service/src/main/java/password/pwm/receiver/RequestLoggerFilter.java

@@ -24,14 +24,14 @@ import password.pwm.util.java.AtomicLoopLongIncrementer;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.TimeDuration;
 import password.pwm.util.java.TimeDuration;
 
 
-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.annotation.WebFilter;
-import javax.servlet.http.HttpServletRequest;
+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 jakarta.servlet.annotation.WebFilter;
+import jakarta.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.InetAddress;
 import java.time.Instant;
 import java.time.Instant;

+ 23 - 7
data-service/src/main/java/password/pwm/receiver/TelemetryRestReceiver.java

@@ -20,20 +20,21 @@
 
 
 package password.pwm.receiver;
 package password.pwm.receiver;
 
 
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import password.pwm.PwmConstants;
 import password.pwm.bean.TelemetryPublishBean;
 import password.pwm.bean.TelemetryPublishBean;
 import password.pwm.error.ErrorInformation;
 import password.pwm.error.ErrorInformation;
 import password.pwm.error.PwmError;
 import password.pwm.error.PwmError;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.error.PwmUnrecoverableException;
-import password.pwm.http.ServletUtility;
 import password.pwm.i18n.Message;
 import password.pwm.i18n.Message;
+import password.pwm.util.java.JavaHelper;
 import password.pwm.util.json.JsonFactory;
 import password.pwm.util.json.JsonFactory;
 import password.pwm.ws.server.RestResultBean;
 import password.pwm.ws.server.RestResultBean;
 
 
-import javax.servlet.ServletException;
-import javax.servlet.annotation.WebServlet;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
 
 
 @WebServlet(
 @WebServlet(
@@ -57,7 +58,7 @@ public class TelemetryRestReceiver extends HttpServlet
             app.getStatisticCounterBundle().increment( PwmReceiverApp.CounterStatsKey.TelemetryPublishRequests );
             app.getStatisticCounterBundle().increment( PwmReceiverApp.CounterStatsKey.TelemetryPublishRequests );
             app.getStatisticEpsBundle().markEvent( PwmReceiverApp.EpsStatKey.TelemetryPublishRequests );
             app.getStatisticEpsBundle().markEvent( PwmReceiverApp.EpsStatKey.TelemetryPublishRequests );
 
 
-            final String input = ServletUtility.readRequestBodyAsString( req, 1024 * 1024 );
+            final String input = readRequestBodyAsString( req, 1024 * 1024 );
             final TelemetryPublishBean telemetryPublishBean = JsonFactory.get().deserialize( input, TelemetryPublishBean.class );
             final TelemetryPublishBean telemetryPublishBean = JsonFactory.get().deserialize( input, TelemetryPublishBean.class );
             final Storage storage = app.getStorage();
             final Storage storage = app.getStorage();
             storage.store( telemetryPublishBean );
             storage.store( telemetryPublishBean );
@@ -77,4 +78,19 @@ public class TelemetryRestReceiver extends HttpServlet
             ReceiverUtil.outputJsonResponse( req, resp, restResultBean );
             ReceiverUtil.outputJsonResponse( req, resp, restResultBean );
         }
         }
     }
     }
+
+    public static String readRequestBodyAsString( final HttpServletRequest req, final int maxChars )
+            throws IOException, PwmUnrecoverableException
+    {
+        final String value = JavaHelper.copyToString( req.getInputStream(), PwmConstants.DEFAULT_CHARSET, maxChars + 1 )
+                .orElse( "" );
+
+        if ( value.length() > maxChars )
+        {
+            final String msg = "input request body is to big, size=" + value.length() + ", max=" + maxChars;
+            throw new PwmUnrecoverableException( new ErrorInformation( PwmError.ERROR_INTERNAL, msg ) );
+        }
+        return value;
+    }
+
 }
 }

+ 5 - 5
data-service/src/main/java/password/pwm/receiver/TelemetryViewerServlet.java

@@ -22,11 +22,11 @@ package password.pwm.receiver;
 
 
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.StringUtil;
 
 
-import javax.servlet.ServletException;
-import javax.servlet.annotation.WebServlet;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
 import java.time.Duration;
 import java.time.Duration;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.ChronoUnit;

+ 6 - 6
data-service/src/main/webapp/WEB-INF/web.xml

@@ -19,12 +19,12 @@
   ~ limitations under the License.
   ~ limitations under the License.
   -->
   -->
 
 
-<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
-         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
-         version="3.1"
-         id="PWM-Data-Service">
+    <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaeeweb-app_6_0.xsd"
+             version="6.0"
+             id="PWM-Data-Service">
+
     <display-name>PWM Data Service</display-name>
     <display-name>PWM Data Service</display-name>
     <!-- <distributable/> Clustering/Session replication is not supported -->
     <!-- <distributable/> Clustering/Session replication is not supported -->
     <description>Password Management Servlet - Data Service</description>
     <description>Password Management Servlet - Data Service</description>

+ 1 - 1
onejar/pom.xml

@@ -16,7 +16,7 @@
     <name>PWM Password Self Service: Executable Server JAR</name>
     <name>PWM Password Self Service: Executable Server JAR</name>
 
 
     <properties>
     <properties>
-        <tomcat.version>9.0.69</tomcat.version>
+        <tomcat.version>9.0.70</tomcat.version>
     </properties>
     </properties>
 
 
     <build>
     <build>

+ 3 - 3
pom.xml

@@ -488,13 +488,13 @@
         <dependency>
         <dependency>
             <groupId>org.mockito</groupId>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
             <artifactId>mockito-core</artifactId>
-            <version>4.11.0</version>
+            <version>5.0.0</version>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>com.github.tomakehurst</groupId>
             <groupId>com.github.tomakehurst</groupId>
-            <artifactId>wiremock-jre8</artifactId>
-            <version>2.35.0</version>
+            <artifactId>wiremock</artifactId>
+            <version>3.0.0-beta-2</version>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
         <dependency>
         <dependency>

+ 1 - 1
server/pom.xml

@@ -262,7 +262,7 @@
         <dependency>
         <dependency>
             <groupId>com.blueconic</groupId>
             <groupId>com.blueconic</groupId>
             <artifactId>browscap-java</artifactId>
             <artifactId>browscap-java</artifactId>
-            <version>1.3.13</version>
+            <version>1.3.14</version>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>org.jetbrains.xodus</groupId>
             <groupId>org.jetbrains.xodus</groupId>

+ 7 - 0
server/src/test/java/password/pwm/util/localdb/LocalDBBasicTest.java

@@ -20,6 +20,7 @@
 
 
 package password.pwm.util.localdb;
 package password.pwm.util.localdb;
 
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
@@ -56,6 +57,12 @@ public class LocalDBBasicTest
         localDB = LocalDBFactory.getInstance( localDbTestFolder, false, pwmApplication.getPwmEnvironment(), pwmApplication.getConfig() );
         localDB = LocalDBFactory.getInstance( localDbTestFolder, false, pwmApplication.getPwmEnvironment(), pwmApplication.getConfig() );
     }
     }
 
 
+    @AfterEach
+    public void shutdown() throws Exception
+    {
+        localDB.close();
+    }
+
     @Test
     @Test
     public void testBasicNarrative() throws LocalDBException
     public void testBasicNarrative() throws LocalDBException
     {
     {

+ 1 - 0
webapp/pom.xml

@@ -124,6 +124,7 @@
                         </goals>
                         </goals>
                         <phase>compile</phase>
                         <phase>compile</phase>
                         <configuration>
                         <configuration>
+                            <compilerVersion>1.8</compilerVersion>
                             <trimSpaces>true</trimSpaces>
                             <trimSpaces>true</trimSpaces>
                             <compilerVersion>${maven.compiler.source}</compilerVersion>
                             <compilerVersion>${maven.compiler.source}</compilerVersion>
                             <keepSources>false</keepSources>
                             <keepSources>false</keepSources>