diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/atmosphere-websocket.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/atmosphere-websocket.json index 519bb0231ba22..3f517b9e937af 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/atmosphere-websocket.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/atmosphere-websocket.json @@ -36,7 +36,8 @@ "autowiredEnabled": { "index": 8, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, "httpBinding": { "index": 9, "kind": "property", "displayName": "Http Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.http.common.HttpBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HttpBinding to control the mapping between Camel message and HttpClient." }, "httpConfiguration": { "index": 10, "kind": "property", "displayName": "Http Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.http.common.HttpConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use the shared HttpConfiguration as base configuration." }, - "headerFilterStrategy": { "index": 11, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." } + "headerFilterStrategy": { "index": 11, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }, + "deserializationFilter": { "index": 12, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." } }, "headers": { "websocket.connectionKey": { "index": 0, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The connection key.", "constantName": "org.apache.camel.component.atmosphere.websocket.WebsocketConstants#CONNECTION_KEY" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/http.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/http.json index 017fdf1f81ff2..bdc7b56cb5c94 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/http.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/http.json @@ -69,14 +69,15 @@ "proxyAuthUsername": { "index": 39, "kind": "property", "displayName": "Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "security": "secret", "description": "Proxy server username" }, "proxyHost": { "index": 40, "kind": "property", "displayName": "Proxy Host", "group": "proxy", "label": "producer,proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy server host" }, "proxyPort": { "index": 41, "kind": "property", "displayName": "Proxy Port", "group": "proxy", "label": "producer,proxy", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy server port" }, - "hostnameVerificationPolicy": { "index": 42, "kind": "property", "displayName": "Hostname Verification Policy", "group": "security", "label": "security", "required": false, "type": "enum", "javaType": "org.apache.hc.client5.http.ssl.HostnameVerificationPolicy", "enum": [ "CLIENT", "BUILTIN", "BOTH" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CLIENT", "description": "Controls how hostname verification is performed during the TLS handshake. CLIENT (default) delegates entirely to the configured x509HostnameVerifier, preserving the behaviour of httpclient 5.5 and earlier a NoopHostnameVerifier will disable verification. BUILTIN uses the JDK SSLParameters hostname check only, ignoring the configured verifier. BOTH runs the JDK built-in check first and then the configured verifier; a NoopHostnameVerifier cannot bypass the built-in check under BUILTIN or BOTH. Prefer BOTH when no custom verifier semantics are needed for stronger out-of-the-box security." }, - "sslContextParameters": { "index": 43, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.support.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances, you need to define a new HttpComponent per instance you need." }, - "useGlobalSslContextParameters": { "index": 44, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." }, - "x509HostnameVerifier": { "index": 45, "kind": "property", "displayName": "X509 Hostname Verifier", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom X509HostnameVerifier such as DefaultHostnameVerifier or NoopHostnameVerifier." }, - "connectionRequestTimeout": { "index": 46, "kind": "property", "displayName": "Connection Request Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Returns the connection lease request timeout (in millis) used when requesting a connection from the connection manager. A timeout value of zero is interpreted as a disabled timeout." }, - "connectTimeout": { "index": 47, "kind": "property", "displayName": "Connect Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the timeout (in millis) until a new connection is fully established. A timeout value of zero is interpreted as an infinite timeout." }, - "responseTimeout": { "index": 48, "kind": "property", "displayName": "Response Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "description": "Determines the timeout (in millis) until arrival of a response from the opposite endpoint. A timeout value of zero is interpreted as an infinite timeout. Please note that response timeout may be unsupported by HTTP transports with message multiplexing." }, - "soTimeout": { "index": 49, "kind": "property", "displayName": "So Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the default socket timeout (in millis) value for blocking I\/O operations." } + "deserializationFilter": { "index": 42, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." }, + "hostnameVerificationPolicy": { "index": 43, "kind": "property", "displayName": "Hostname Verification Policy", "group": "security", "label": "security", "required": false, "type": "enum", "javaType": "org.apache.hc.client5.http.ssl.HostnameVerificationPolicy", "enum": [ "CLIENT", "BUILTIN", "BOTH" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CLIENT", "description": "Controls how hostname verification is performed during the TLS handshake. CLIENT (default) delegates entirely to the configured x509HostnameVerifier, preserving the behaviour of httpclient 5.5 and earlier a NoopHostnameVerifier will disable verification. BUILTIN uses the JDK SSLParameters hostname check only, ignoring the configured verifier. BOTH runs the JDK built-in check first and then the configured verifier; a NoopHostnameVerifier cannot bypass the built-in check under BUILTIN or BOTH. Prefer BOTH when no custom verifier semantics are needed for stronger out-of-the-box security." }, + "sslContextParameters": { "index": 44, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.support.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances, you need to define a new HttpComponent per instance you need." }, + "useGlobalSslContextParameters": { "index": 45, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." }, + "x509HostnameVerifier": { "index": 46, "kind": "property", "displayName": "X509 Hostname Verifier", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom X509HostnameVerifier such as DefaultHostnameVerifier or NoopHostnameVerifier." }, + "connectionRequestTimeout": { "index": 47, "kind": "property", "displayName": "Connection Request Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Returns the connection lease request timeout (in millis) used when requesting a connection from the connection manager. A timeout value of zero is interpreted as a disabled timeout." }, + "connectTimeout": { "index": 48, "kind": "property", "displayName": "Connect Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the timeout (in millis) until a new connection is fully established. A timeout value of zero is interpreted as an infinite timeout." }, + "responseTimeout": { "index": 49, "kind": "property", "displayName": "Response Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "description": "Determines the timeout (in millis) until arrival of a response from the opposite endpoint. A timeout value of zero is interpreted as an infinite timeout. Please note that response timeout may be unsupported by HTTP transports with message multiplexing." }, + "soTimeout": { "index": 50, "kind": "property", "displayName": "So Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the default socket timeout (in millis) value for blocking I\/O operations." } }, "headers": { "Content-Encoding": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The HTTP content encoding. Is set on both the IN and OUT message to provide a content encoding, such as gzip.", "constantName": "org.apache.camel.component.http.HttpConstants#CONTENT_ENCODING" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/https.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/https.json index 26d0e1ee3ece7..8d45f21dd4129 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/https.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/https.json @@ -69,14 +69,15 @@ "proxyAuthUsername": { "index": 39, "kind": "property", "displayName": "Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "security": "secret", "description": "Proxy server username" }, "proxyHost": { "index": 40, "kind": "property", "displayName": "Proxy Host", "group": "proxy", "label": "producer,proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy server host" }, "proxyPort": { "index": 41, "kind": "property", "displayName": "Proxy Port", "group": "proxy", "label": "producer,proxy", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy server port" }, - "hostnameVerificationPolicy": { "index": 42, "kind": "property", "displayName": "Hostname Verification Policy", "group": "security", "label": "security", "required": false, "type": "enum", "javaType": "org.apache.hc.client5.http.ssl.HostnameVerificationPolicy", "enum": [ "CLIENT", "BUILTIN", "BOTH" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CLIENT", "description": "Controls how hostname verification is performed during the TLS handshake. CLIENT (default) delegates entirely to the configured x509HostnameVerifier, preserving the behaviour of httpclient 5.5 and earlier a NoopHostnameVerifier will disable verification. BUILTIN uses the JDK SSLParameters hostname check only, ignoring the configured verifier. BOTH runs the JDK built-in check first and then the configured verifier; a NoopHostnameVerifier cannot bypass the built-in check under BUILTIN or BOTH. Prefer BOTH when no custom verifier semantics are needed for stronger out-of-the-box security." }, - "sslContextParameters": { "index": 43, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.support.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances, you need to define a new HttpComponent per instance you need." }, - "useGlobalSslContextParameters": { "index": 44, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." }, - "x509HostnameVerifier": { "index": 45, "kind": "property", "displayName": "X509 Hostname Verifier", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom X509HostnameVerifier such as DefaultHostnameVerifier or NoopHostnameVerifier." }, - "connectionRequestTimeout": { "index": 46, "kind": "property", "displayName": "Connection Request Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Returns the connection lease request timeout (in millis) used when requesting a connection from the connection manager. A timeout value of zero is interpreted as a disabled timeout." }, - "connectTimeout": { "index": 47, "kind": "property", "displayName": "Connect Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the timeout (in millis) until a new connection is fully established. A timeout value of zero is interpreted as an infinite timeout." }, - "responseTimeout": { "index": 48, "kind": "property", "displayName": "Response Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "description": "Determines the timeout (in millis) until arrival of a response from the opposite endpoint. A timeout value of zero is interpreted as an infinite timeout. Please note that response timeout may be unsupported by HTTP transports with message multiplexing." }, - "soTimeout": { "index": 49, "kind": "property", "displayName": "So Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the default socket timeout (in millis) value for blocking I\/O operations." } + "deserializationFilter": { "index": 42, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." }, + "hostnameVerificationPolicy": { "index": 43, "kind": "property", "displayName": "Hostname Verification Policy", "group": "security", "label": "security", "required": false, "type": "enum", "javaType": "org.apache.hc.client5.http.ssl.HostnameVerificationPolicy", "enum": [ "CLIENT", "BUILTIN", "BOTH" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CLIENT", "description": "Controls how hostname verification is performed during the TLS handshake. CLIENT (default) delegates entirely to the configured x509HostnameVerifier, preserving the behaviour of httpclient 5.5 and earlier a NoopHostnameVerifier will disable verification. BUILTIN uses the JDK SSLParameters hostname check only, ignoring the configured verifier. BOTH runs the JDK built-in check first and then the configured verifier; a NoopHostnameVerifier cannot bypass the built-in check under BUILTIN or BOTH. Prefer BOTH when no custom verifier semantics are needed for stronger out-of-the-box security." }, + "sslContextParameters": { "index": 44, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.support.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances, you need to define a new HttpComponent per instance you need." }, + "useGlobalSslContextParameters": { "index": 45, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." }, + "x509HostnameVerifier": { "index": 46, "kind": "property", "displayName": "X509 Hostname Verifier", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom X509HostnameVerifier such as DefaultHostnameVerifier or NoopHostnameVerifier." }, + "connectionRequestTimeout": { "index": 47, "kind": "property", "displayName": "Connection Request Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Returns the connection lease request timeout (in millis) used when requesting a connection from the connection manager. A timeout value of zero is interpreted as a disabled timeout." }, + "connectTimeout": { "index": 48, "kind": "property", "displayName": "Connect Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the timeout (in millis) until a new connection is fully established. A timeout value of zero is interpreted as an infinite timeout." }, + "responseTimeout": { "index": 49, "kind": "property", "displayName": "Response Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "description": "Determines the timeout (in millis) until arrival of a response from the opposite endpoint. A timeout value of zero is interpreted as an infinite timeout. Please note that response timeout may be unsupported by HTTP transports with message multiplexing." }, + "soTimeout": { "index": 50, "kind": "property", "displayName": "So Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the default socket timeout (in millis) value for blocking I\/O operations." } }, "headers": { "Content-Encoding": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The HTTP content encoding. Is set on both the IN and OUT message to provide a content encoding, such as gzip.", "constantName": "org.apache.camel.component.http.HttpConstants#CONTENT_ENCODING" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jetty.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jetty.json index 80b549c359cb7..eae916bd357a8 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jetty.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jetty.json @@ -54,15 +54,16 @@ "headerFilterStrategy": { "index": 26, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }, "proxyHost": { "index": 27, "kind": "property", "displayName": "Proxy Host", "group": "proxy", "label": "proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "To use a http proxy to configure the hostname." }, "proxyPort": { "index": 28, "kind": "property", "displayName": "Proxy Port", "group": "proxy", "label": "proxy", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "To use a http proxy to configure the port number." }, - "keystore": { "index": 29, "kind": "property", "displayName": "Keystore", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specifies the location of the Java keystore file, which contains the Jetty server's own X.509 certificate in a key entry." }, - "socketConnectorProperties": { "index": 30, "kind": "property", "displayName": "Socket Connector Properties", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains general HTTP connector properties. Uses the same principle as sslSocketConnectorProperties." }, - "socketConnectors": { "index": 31, "kind": "property", "displayName": "Socket Connectors", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains per port number specific HTTP connectors. Uses the same principle as sslSocketConnectors." }, - "sslContextParameters": { "index": 32, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters" }, - "sslKeyPassword": { "index": 33, "kind": "property", "displayName": "Ssl Key Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "security": "secret", "description": "The key password, which is used to access the certificate's key entry in the keystore (this is the same password that is supplied to the keystore command's -keypass option)." }, - "sslPassword": { "index": 34, "kind": "property", "displayName": "Ssl Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "security": "secret", "description": "The ssl password, which is required to access the keystore file (this is the same password that is supplied to the keystore command's -storepass option)." }, - "sslSocketConnectorProperties": { "index": 35, "kind": "property", "displayName": "Ssl Socket Connector Properties", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains general SSL connector properties." }, - "sslSocketConnectors": { "index": 36, "kind": "property", "displayName": "Ssl Socket Connectors", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains per port number specific SSL connectors." }, - "useGlobalSslContextParameters": { "index": 37, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters" } + "deserializationFilter": { "index": 29, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." }, + "keystore": { "index": 30, "kind": "property", "displayName": "Keystore", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specifies the location of the Java keystore file, which contains the Jetty server's own X.509 certificate in a key entry." }, + "socketConnectorProperties": { "index": 31, "kind": "property", "displayName": "Socket Connector Properties", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains general HTTP connector properties. Uses the same principle as sslSocketConnectorProperties." }, + "socketConnectors": { "index": 32, "kind": "property", "displayName": "Socket Connectors", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains per port number specific HTTP connectors. Uses the same principle as sslSocketConnectors." }, + "sslContextParameters": { "index": 33, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters" }, + "sslKeyPassword": { "index": 34, "kind": "property", "displayName": "Ssl Key Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "security": "secret", "description": "The key password, which is used to access the certificate's key entry in the keystore (this is the same password that is supplied to the keystore command's -keypass option)." }, + "sslPassword": { "index": 35, "kind": "property", "displayName": "Ssl Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "security": "secret", "description": "The ssl password, which is required to access the keystore file (this is the same password that is supplied to the keystore command's -storepass option)." }, + "sslSocketConnectorProperties": { "index": 36, "kind": "property", "displayName": "Ssl Socket Connector Properties", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains general SSL connector properties." }, + "sslSocketConnectors": { "index": 37, "kind": "property", "displayName": "Ssl Socket Connectors", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains per port number specific SSL connectors." }, + "useGlobalSslContextParameters": { "index": 38, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters" } }, "headers": { "CamelServletContextPath": { "index": 0, "kind": "header", "displayName": "", "group": "consumer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The servlet context path used", "constantName": "org.apache.camel.component.jetty.JettyHttpConstants#SERVLET_CONTEXT_PATH" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/servlet.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/servlet.json index 77a1b781ed15a..8dd7b138314cb 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/servlet.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/servlet.json @@ -35,7 +35,8 @@ "autowiredEnabled": { "index": 7, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, "httpBinding": { "index": 8, "kind": "property", "displayName": "Http Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.http.common.HttpBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HttpBinding to control the mapping between Camel message and HttpClient." }, "httpConfiguration": { "index": 9, "kind": "property", "displayName": "Http Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.http.common.HttpConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use the shared HttpConfiguration as base configuration." }, - "headerFilterStrategy": { "index": 10, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." } + "headerFilterStrategy": { "index": 10, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }, + "deserializationFilter": { "index": 11, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." } }, "properties": { "contextPath": { "index": 0, "kind": "path", "displayName": "Context Path", "group": "consumer", "label": "consumer", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The context-path to use" }, diff --git a/components/camel-atmosphere-websocket/src/generated/resources/META-INF/org/apache/camel/component/atmosphere/websocket/atmosphere-websocket.json b/components/camel-atmosphere-websocket/src/generated/resources/META-INF/org/apache/camel/component/atmosphere/websocket/atmosphere-websocket.json index 519bb0231ba22..3f517b9e937af 100644 --- a/components/camel-atmosphere-websocket/src/generated/resources/META-INF/org/apache/camel/component/atmosphere/websocket/atmosphere-websocket.json +++ b/components/camel-atmosphere-websocket/src/generated/resources/META-INF/org/apache/camel/component/atmosphere/websocket/atmosphere-websocket.json @@ -36,7 +36,8 @@ "autowiredEnabled": { "index": 8, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, "httpBinding": { "index": 9, "kind": "property", "displayName": "Http Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.http.common.HttpBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HttpBinding to control the mapping between Camel message and HttpClient." }, "httpConfiguration": { "index": 10, "kind": "property", "displayName": "Http Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.http.common.HttpConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use the shared HttpConfiguration as base configuration." }, - "headerFilterStrategy": { "index": 11, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." } + "headerFilterStrategy": { "index": 11, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }, + "deserializationFilter": { "index": 12, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." } }, "headers": { "websocket.connectionKey": { "index": 0, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The connection key.", "constantName": "org.apache.camel.component.atmosphere.websocket.WebsocketConstants#CONNECTION_KEY" }, diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java index 8210112d1c7eb..f334e6e0c8e9f 100644 --- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java +++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java @@ -89,6 +89,7 @@ public class DefaultHttpBinding implements HttpBinding { private boolean muteException; private boolean logException; private boolean allowJavaSerializedObject; + private String deserializationFilter; private boolean mapHttpMessageBody = true; private boolean mapHttpMessageHeaders = true; private boolean mapHttpMessageFormUrlEncodedBody = true; @@ -111,6 +112,7 @@ public DefaultHttpBinding(HttpCommonEndpoint endpoint) { this.logException = endpoint.isLogException(); if (endpoint.getComponent() != null) { this.allowJavaSerializedObject = endpoint.getComponent().isAllowJavaSerializedObject(); + this.deserializationFilter = endpoint.getComponent().getDeserializationFilter(); } } @@ -220,7 +222,8 @@ protected void readBody(HttpServletRequest request, Message message) { try { InputStream is = message.getExchange().getContext().getTypeConverter().mandatoryConvertTo(InputStream.class, body); - Object object = HttpHelper.deserializeJavaObjectFromStream(is, message.getExchange().getContext()); + Object object = HttpHelper.deserializeJavaObjectFromStream(is, message.getExchange().getContext(), + deserializationFilter); if (object != null) { message.setBody(object); } @@ -706,6 +709,16 @@ public void setAllowJavaSerializedObject(boolean allowJavaSerializedObject) { this.allowJavaSerializedObject = allowJavaSerializedObject; } + @Override + public String getDeserializationFilter() { + return deserializationFilter; + } + + @Override + public void setDeserializationFilter(String deserializationFilter) { + this.deserializationFilter = deserializationFilter; + } + @Override public HeaderFilterStrategy getHeaderFilterStrategy() { return headerFilterStrategy; diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java index 95f4a1845c260..39b0447d37dd2 100644 --- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java +++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java @@ -208,6 +208,26 @@ public interface HttpBinding { */ void setAllowJavaSerializedObject(boolean allowJavaSerializedObject); + /** + * The {@link java.io.ObjectInputFilter} pattern ({@code jdk.serialFilter} syntax) applied when deserializing Java + * objects from {@code application/x-java-serialized-object} payloads, or {@code null} to fall back to the JVM-wide + * filter or the default Camel filter. + */ + default String getDeserializationFilter() { + return null; + } + + /** + * Sets an {@link java.io.ObjectInputFilter} pattern ({@code jdk.serialFilter} syntax) applied as a defense-in-depth + * measure when deserializing Java objects from {@code application/x-java-serialized-object} payloads on the opt-in + * {@code allowJavaSerializedObject} / {@code transferException} path. + * + * @param deserializationFilter the filter pattern, or {@code null} to use the JVM-wide or default filter + */ + default void setDeserializationFilter(String deserializationFilter) { + // no-op by default for backward compatibility with external HttpBinding implementations + } + /** * Gets the header filter strategy * diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonComponent.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonComponent.java index f1a4f1eb0945d..d3d50c819cb24 100644 --- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonComponent.java +++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonComponent.java @@ -37,6 +37,14 @@ public abstract class HttpCommonComponent extends HeaderFilterStrategyComponent + " This is by default turned off. " + " If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.") protected boolean allowJavaSerializedObject; + @Metadata(label = "advanced,security", + description = "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing" + + " Java objects from requests or responses with Content-Type" + + " application/x-java-serialized-object (only used when allowJavaSerializedObject or" + + " transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if" + + " present; otherwise a conservative default filter denying java.net.* and otherwise" + + " allowing java.*, javax.* and org.apache.camel.* packages is applied.") + protected String deserializationFilter; protected HttpCommonComponent() { } @@ -155,4 +163,19 @@ public void setAllowJavaSerializedObject(boolean allowJavaSerializedObject) { this.allowJavaSerializedObject = allowJavaSerializedObject; } + public String getDeserializationFilter() { + return deserializationFilter; + } + + /** + * Sets an {@link java.io.ObjectInputFilter} pattern (same syntax as {@code jdk.serialFilter}) applied when + * deserializing Java objects from requests or responses with Content-Type + * {@code application/x-java-serialized-object}, as a defense-in-depth measure on the opt-in + * {@code allowJavaSerializedObject} / {@code transferException} path. When not set, the JVM-wide + * {@code jdk.serialFilter} is used if present, otherwise a conservative default filter is applied. + */ + public void setDeserializationFilter(String deserializationFilter) { + this.deserializationFilter = deserializationFilter; + } + } diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java index 84856171b86bb..84dc6fd9f138d 100644 --- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java +++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java @@ -278,6 +278,7 @@ public HttpBinding getHttpBinding() { httpBinding.setMuteException(isMuteException()); if (getComponent() != null) { httpBinding.setAllowJavaSerializedObject(getComponent().isAllowJavaSerializedObject()); + httpBinding.setDeserializationFilter(getComponent().getDeserializationFilter()); } httpBinding.setEagerCheckContentAvailable(isEagerCheckContentAvailable()); httpBinding.setMapHttpMessageBody(isMapHttpMessageBody()); diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java index ee5496f6e81a4..7f7a3f613e39f 100644 --- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java +++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.io.InputStream; +import java.io.ObjectInputFilter; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; @@ -40,9 +41,23 @@ import org.apache.camel.util.IOHelper; import org.apache.camel.util.URISupport; import org.apache.camel.util.UnsafeUriCharactersEncoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public final class HttpHelper { + /** + * Default {@link ObjectInputFilter} pattern applied when deserializing Java objects with Content-Type + * {@code application/x-java-serialized-object}. Allows standard Java and Apache Camel types, denies + * {@code java.net.**}, and applies JEP-290 graph-shape limits ({@code maxdepth}, {@code maxrefs}, {@code maxbytes}) + * as defense-in-depth. Can be overridden per-component via the {@code deserializationFilter} option or globally via + * the JVM system property {@code jdk.serialFilter}. + */ + static final String DEFAULT_DESERIALIZATION_FILTER + = "!java.net.**;java.**;javax.**;org.apache.camel.**;maxdepth=20;maxrefs=10000;maxbytes=10485760;!*"; + + private static final Logger LOG = LoggerFactory.getLogger(HttpHelper.class); + private HttpHelper() { // Helper class } @@ -112,12 +127,31 @@ public static Object deserializeJavaObjectFromStream(InputStream is) throws Clas */ public static Object deserializeJavaObjectFromStream(InputStream is, CamelContext context) throws ClassNotFoundException, IOException { + return deserializeJavaObjectFromStream(is, context, null); + } + + /** + * Deserializes the input stream to a Java object, applying an {@link ObjectInputFilter} as a defense-in-depth + * measure against unsafe deserialization. + * + * @param is input stream for the Java object + * @param context the camel context which could help us to apply the customer classloader + * @param deserializationFilter an {@link ObjectInputFilter} pattern (same syntax as {@code jdk.serialFilter}) to + * apply; when {@code null} or blank the JVM-wide {@code jdk.serialFilter} is used if + * present, otherwise {@link #DEFAULT_DESERIALIZATION_FILTER} is applied + * @return the java object, or null if input stream was null + * @throws ClassNotFoundException is thrown if class not found + * @throws IOException can be thrown + */ + public static Object deserializeJavaObjectFromStream(InputStream is, CamelContext context, String deserializationFilter) + throws ClassNotFoundException, IOException { if (is == null) { return null; } Object answer; ObjectInputStream ois = new CamelObjectInputStream(is, context); + ois.setObjectInputFilter(resolveDeserializationFilter(deserializationFilter)); try { answer = ois.readObject(); } finally { @@ -127,6 +161,19 @@ public static Object deserializeJavaObjectFromStream(InputStream is, CamelContex return answer; } + private static ObjectInputFilter resolveDeserializationFilter(String configuredPattern) { + if (configuredPattern != null && !configuredPattern.isBlank()) { + return ObjectInputFilter.Config.createFilter(configuredPattern); + } + ObjectInputFilter jvmFilter = ObjectInputFilter.Config.getSerialFilter(); + if (jvmFilter != null) { + return jvmFilter; + } + LOG.debug("No JVM-wide deserialization filter (jdk.serialFilter) is set; applying the default Camel filter: {}", + DEFAULT_DESERIALIZATION_FILTER); + return ObjectInputFilter.Config.createFilter(DEFAULT_DESERIALIZATION_FILTER); + } + /** * Reads the request body from the given http servlet request. * diff --git a/components/camel-http-common/src/test/java/org/apache/camel/http/common/HttpHelperDeserializationTest.java b/components/camel-http-common/src/test/java/org/apache/camel/http/common/HttpHelperDeserializationTest.java new file mode 100644 index 0000000000000..81514e3732177 --- /dev/null +++ b/components/camel-http-common/src/test/java/org/apache/camel/http/common/HttpHelperDeserializationTest.java @@ -0,0 +1,67 @@ +/* + * 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.camel.http.common; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.InvalidClassException; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class HttpHelperDeserializationTest { + + private static byte[] serialize(Serializable object) throws Exception { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try (ObjectOutputStream oos = new ObjectOutputStream(bos)) { + oos.writeObject(object); + } + return bos.toByteArray(); + } + + @Test + public void configuredFilterRejectsDeniedClass() throws Exception { + // use a real object (not a String, which is serialized as TC_STRING and bypasses the class filter) + InputStream is = new ByteArrayInputStream(serialize(new ArrayList<>(List.of("a", "b")))); + // a configured filter that denies everything must reject the ArrayList class + assertThrows(InvalidClassException.class, + () -> HttpHelper.deserializeJavaObjectFromStream(is, null, "!*")); + } + + @Test + public void configuredFilterAllowsPermittedClass() throws Exception { + InputStream is = new ByteArrayInputStream(serialize(new ArrayList<>(List.of("a", "b")))); + // a configured filter that allows the java.* packages must let the ArrayList (and its elements) through + assertEquals(List.of("a", "b"), HttpHelper.deserializeJavaObjectFromStream(is, null, "java.**;!*")); + } + + @Test + public void defaultFilterDeniesJavaNetPackage() throws Exception { + InputStream is = new ByteArrayInputStream(serialize(new InetSocketAddress("localhost", 80))); + // with no configured/JVM filter, the default Camel filter denies java.net.** + assertThrows(InvalidClassException.class, + () -> HttpHelper.deserializeJavaObjectFromStream(is, null)); + } +} diff --git a/components/camel-http/src/generated/java/org/apache/camel/component/http/HttpComponentConfigurer.java b/components/camel-http/src/generated/java/org/apache/camel/component/http/HttpComponentConfigurer.java index d67699d04c761..0a7fe2dadcb61 100644 --- a/components/camel-http/src/generated/java/org/apache/camel/component/http/HttpComponentConfigurer.java +++ b/components/camel-http/src/generated/java/org/apache/camel/component/http/HttpComponentConfigurer.java @@ -55,6 +55,8 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "copyHeaders": target.setCopyHeaders(property(camelContext, boolean.class, value)); return true; case "defaultuseragentdisabled": case "defaultUserAgentDisabled": target.setDefaultUserAgentDisabled(property(camelContext, boolean.class, value)); return true; + case "deserializationfilter": + case "deserializationFilter": target.setDeserializationFilter(property(camelContext, java.lang.String.class, value)); return true; case "followredirects": case "followRedirects": target.setFollowRedirects(property(camelContext, boolean.class, value)); return true; case "headerfilterstrategy": @@ -167,6 +169,8 @@ public Class getOptionType(String name, boolean ignoreCase) { case "copyHeaders": return boolean.class; case "defaultuseragentdisabled": case "defaultUserAgentDisabled": return boolean.class; + case "deserializationfilter": + case "deserializationFilter": return java.lang.String.class; case "followredirects": case "followRedirects": return boolean.class; case "headerfilterstrategy": @@ -275,6 +279,8 @@ public Object getOptionValue(Object obj, String name, boolean ignoreCase) { case "copyHeaders": return target.isCopyHeaders(); case "defaultuseragentdisabled": case "defaultUserAgentDisabled": return target.isDefaultUserAgentDisabled(); + case "deserializationfilter": + case "deserializationFilter": return target.getDeserializationFilter(); case "followredirects": case "followRedirects": return target.isFollowRedirects(); case "headerfilterstrategy": diff --git a/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/http.json b/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/http.json index 017fdf1f81ff2..bdc7b56cb5c94 100644 --- a/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/http.json +++ b/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/http.json @@ -69,14 +69,15 @@ "proxyAuthUsername": { "index": 39, "kind": "property", "displayName": "Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "security": "secret", "description": "Proxy server username" }, "proxyHost": { "index": 40, "kind": "property", "displayName": "Proxy Host", "group": "proxy", "label": "producer,proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy server host" }, "proxyPort": { "index": 41, "kind": "property", "displayName": "Proxy Port", "group": "proxy", "label": "producer,proxy", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy server port" }, - "hostnameVerificationPolicy": { "index": 42, "kind": "property", "displayName": "Hostname Verification Policy", "group": "security", "label": "security", "required": false, "type": "enum", "javaType": "org.apache.hc.client5.http.ssl.HostnameVerificationPolicy", "enum": [ "CLIENT", "BUILTIN", "BOTH" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CLIENT", "description": "Controls how hostname verification is performed during the TLS handshake. CLIENT (default) delegates entirely to the configured x509HostnameVerifier, preserving the behaviour of httpclient 5.5 and earlier a NoopHostnameVerifier will disable verification. BUILTIN uses the JDK SSLParameters hostname check only, ignoring the configured verifier. BOTH runs the JDK built-in check first and then the configured verifier; a NoopHostnameVerifier cannot bypass the built-in check under BUILTIN or BOTH. Prefer BOTH when no custom verifier semantics are needed for stronger out-of-the-box security." }, - "sslContextParameters": { "index": 43, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.support.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances, you need to define a new HttpComponent per instance you need." }, - "useGlobalSslContextParameters": { "index": 44, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." }, - "x509HostnameVerifier": { "index": 45, "kind": "property", "displayName": "X509 Hostname Verifier", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom X509HostnameVerifier such as DefaultHostnameVerifier or NoopHostnameVerifier." }, - "connectionRequestTimeout": { "index": 46, "kind": "property", "displayName": "Connection Request Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Returns the connection lease request timeout (in millis) used when requesting a connection from the connection manager. A timeout value of zero is interpreted as a disabled timeout." }, - "connectTimeout": { "index": 47, "kind": "property", "displayName": "Connect Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the timeout (in millis) until a new connection is fully established. A timeout value of zero is interpreted as an infinite timeout." }, - "responseTimeout": { "index": 48, "kind": "property", "displayName": "Response Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "description": "Determines the timeout (in millis) until arrival of a response from the opposite endpoint. A timeout value of zero is interpreted as an infinite timeout. Please note that response timeout may be unsupported by HTTP transports with message multiplexing." }, - "soTimeout": { "index": 49, "kind": "property", "displayName": "So Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the default socket timeout (in millis) value for blocking I\/O operations." } + "deserializationFilter": { "index": 42, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." }, + "hostnameVerificationPolicy": { "index": 43, "kind": "property", "displayName": "Hostname Verification Policy", "group": "security", "label": "security", "required": false, "type": "enum", "javaType": "org.apache.hc.client5.http.ssl.HostnameVerificationPolicy", "enum": [ "CLIENT", "BUILTIN", "BOTH" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CLIENT", "description": "Controls how hostname verification is performed during the TLS handshake. CLIENT (default) delegates entirely to the configured x509HostnameVerifier, preserving the behaviour of httpclient 5.5 and earlier a NoopHostnameVerifier will disable verification. BUILTIN uses the JDK SSLParameters hostname check only, ignoring the configured verifier. BOTH runs the JDK built-in check first and then the configured verifier; a NoopHostnameVerifier cannot bypass the built-in check under BUILTIN or BOTH. Prefer BOTH when no custom verifier semantics are needed for stronger out-of-the-box security." }, + "sslContextParameters": { "index": 44, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.support.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances, you need to define a new HttpComponent per instance you need." }, + "useGlobalSslContextParameters": { "index": 45, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." }, + "x509HostnameVerifier": { "index": 46, "kind": "property", "displayName": "X509 Hostname Verifier", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom X509HostnameVerifier such as DefaultHostnameVerifier or NoopHostnameVerifier." }, + "connectionRequestTimeout": { "index": 47, "kind": "property", "displayName": "Connection Request Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Returns the connection lease request timeout (in millis) used when requesting a connection from the connection manager. A timeout value of zero is interpreted as a disabled timeout." }, + "connectTimeout": { "index": 48, "kind": "property", "displayName": "Connect Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the timeout (in millis) until a new connection is fully established. A timeout value of zero is interpreted as an infinite timeout." }, + "responseTimeout": { "index": 49, "kind": "property", "displayName": "Response Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "description": "Determines the timeout (in millis) until arrival of a response from the opposite endpoint. A timeout value of zero is interpreted as an infinite timeout. Please note that response timeout may be unsupported by HTTP transports with message multiplexing." }, + "soTimeout": { "index": 50, "kind": "property", "displayName": "So Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the default socket timeout (in millis) value for blocking I\/O operations." } }, "headers": { "Content-Encoding": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The HTTP content encoding. Is set on both the IN and OUT message to provide a content encoding, such as gzip.", "constantName": "org.apache.camel.component.http.HttpConstants#CONTENT_ENCODING" }, diff --git a/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/https.json b/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/https.json index 26d0e1ee3ece7..8d45f21dd4129 100644 --- a/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/https.json +++ b/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/https.json @@ -69,14 +69,15 @@ "proxyAuthUsername": { "index": 39, "kind": "property", "displayName": "Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "security": "secret", "description": "Proxy server username" }, "proxyHost": { "index": 40, "kind": "property", "displayName": "Proxy Host", "group": "proxy", "label": "producer,proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy server host" }, "proxyPort": { "index": 41, "kind": "property", "displayName": "Proxy Port", "group": "proxy", "label": "producer,proxy", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Proxy server port" }, - "hostnameVerificationPolicy": { "index": 42, "kind": "property", "displayName": "Hostname Verification Policy", "group": "security", "label": "security", "required": false, "type": "enum", "javaType": "org.apache.hc.client5.http.ssl.HostnameVerificationPolicy", "enum": [ "CLIENT", "BUILTIN", "BOTH" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CLIENT", "description": "Controls how hostname verification is performed during the TLS handshake. CLIENT (default) delegates entirely to the configured x509HostnameVerifier, preserving the behaviour of httpclient 5.5 and earlier a NoopHostnameVerifier will disable verification. BUILTIN uses the JDK SSLParameters hostname check only, ignoring the configured verifier. BOTH runs the JDK built-in check first and then the configured verifier; a NoopHostnameVerifier cannot bypass the built-in check under BUILTIN or BOTH. Prefer BOTH when no custom verifier semantics are needed for stronger out-of-the-box security." }, - "sslContextParameters": { "index": 43, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.support.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances, you need to define a new HttpComponent per instance you need." }, - "useGlobalSslContextParameters": { "index": 44, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." }, - "x509HostnameVerifier": { "index": 45, "kind": "property", "displayName": "X509 Hostname Verifier", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom X509HostnameVerifier such as DefaultHostnameVerifier or NoopHostnameVerifier." }, - "connectionRequestTimeout": { "index": 46, "kind": "property", "displayName": "Connection Request Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Returns the connection lease request timeout (in millis) used when requesting a connection from the connection manager. A timeout value of zero is interpreted as a disabled timeout." }, - "connectTimeout": { "index": 47, "kind": "property", "displayName": "Connect Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the timeout (in millis) until a new connection is fully established. A timeout value of zero is interpreted as an infinite timeout." }, - "responseTimeout": { "index": 48, "kind": "property", "displayName": "Response Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "description": "Determines the timeout (in millis) until arrival of a response from the opposite endpoint. A timeout value of zero is interpreted as an infinite timeout. Please note that response timeout may be unsupported by HTTP transports with message multiplexing." }, - "soTimeout": { "index": 49, "kind": "property", "displayName": "So Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the default socket timeout (in millis) value for blocking I\/O operations." } + "deserializationFilter": { "index": 42, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." }, + "hostnameVerificationPolicy": { "index": 43, "kind": "property", "displayName": "Hostname Verification Policy", "group": "security", "label": "security", "required": false, "type": "enum", "javaType": "org.apache.hc.client5.http.ssl.HostnameVerificationPolicy", "enum": [ "CLIENT", "BUILTIN", "BOTH" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "CLIENT", "description": "Controls how hostname verification is performed during the TLS handshake. CLIENT (default) delegates entirely to the configured x509HostnameVerifier, preserving the behaviour of httpclient 5.5 and earlier a NoopHostnameVerifier will disable verification. BUILTIN uses the JDK SSLParameters hostname check only, ignoring the configured verifier. BOTH runs the JDK built-in check first and then the configured verifier; a NoopHostnameVerifier cannot bypass the built-in check under BUILTIN or BOTH. Prefer BOTH when no custom verifier semantics are needed for stronger out-of-the-box security." }, + "sslContextParameters": { "index": 44, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.support.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances, you need to define a new HttpComponent per instance you need." }, + "useGlobalSslContextParameters": { "index": 45, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." }, + "x509HostnameVerifier": { "index": 46, "kind": "property", "displayName": "X509 Hostname Verifier", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom X509HostnameVerifier such as DefaultHostnameVerifier or NoopHostnameVerifier." }, + "connectionRequestTimeout": { "index": 47, "kind": "property", "displayName": "Connection Request Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Returns the connection lease request timeout (in millis) used when requesting a connection from the connection manager. A timeout value of zero is interpreted as a disabled timeout." }, + "connectTimeout": { "index": 48, "kind": "property", "displayName": "Connect Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the timeout (in millis) until a new connection is fully established. A timeout value of zero is interpreted as an infinite timeout." }, + "responseTimeout": { "index": 49, "kind": "property", "displayName": "Response Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "description": "Determines the timeout (in millis) until arrival of a response from the opposite endpoint. A timeout value of zero is interpreted as an infinite timeout. Please note that response timeout may be unsupported by HTTP transports with message multiplexing." }, + "soTimeout": { "index": 50, "kind": "property", "displayName": "So Timeout", "group": "timeout", "label": "timeout", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 180000, "description": "Determines the default socket timeout (in millis) value for blocking I\/O operations." } }, "headers": { "Content-Encoding": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The HTTP content encoding. Is set on both the IN and OUT message to provide a content encoding, such as gzip.", "constantName": "org.apache.camel.component.http.HttpConstants#CONTENT_ENCODING" }, diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java index 45a2d2e7c8192..08b4267a25548 100644 --- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java +++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java @@ -572,7 +572,8 @@ protected Object extractResponseBody( if (contentType != null && contentType.equals(HttpConstants.CONTENT_TYPE_JAVA_SERIALIZED_OBJECT)) { // only deserialize java if allowed if (getEndpoint().getComponent().isAllowJavaSerializedObject() || getEndpoint().isTransferException()) { - return HttpHelper.deserializeJavaObjectFromStream(is, exchange.getContext()); + return HttpHelper.deserializeJavaObjectFromStream(is, exchange.getContext(), + getEndpoint().getComponent().getDeserializationFilter()); } else { // empty response return null; diff --git a/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty12/JettyHttpComponent12Configurer.java b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty12/JettyHttpComponent12Configurer.java index 13fc261e12e87..5ffaef30e1d6e 100644 --- a/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty12/JettyHttpComponent12Configurer.java +++ b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty12/JettyHttpComponent12Configurer.java @@ -31,6 +31,8 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true; case "continuationtimeout": case "continuationTimeout": target.setContinuationTimeout(property(camelContext, java.lang.Long.class, value)); return true; + case "deserializationfilter": + case "deserializationFilter": target.setDeserializationFilter(property(camelContext, java.lang.String.class, value)); return true; case "enablejmx": case "enableJmx": target.setEnableJmx(property(camelContext, boolean.class, value)); return true; case "errorhandler": @@ -113,6 +115,8 @@ public Class getOptionType(String name, boolean ignoreCase) { case "bridgeErrorHandler": return boolean.class; case "continuationtimeout": case "continuationTimeout": return java.lang.Long.class; + case "deserializationfilter": + case "deserializationFilter": return java.lang.String.class; case "enablejmx": case "enableJmx": return boolean.class; case "errorhandler": @@ -196,6 +200,8 @@ public Object getOptionValue(Object obj, String name, boolean ignoreCase) { case "bridgeErrorHandler": return target.isBridgeErrorHandler(); case "continuationtimeout": case "continuationTimeout": return target.getContinuationTimeout(); + case "deserializationfilter": + case "deserializationFilter": return target.getDeserializationFilter(); case "enablejmx": case "enableJmx": return target.isEnableJmx(); case "errorhandler": diff --git a/components/camel-jetty/src/generated/resources/META-INF/org/apache/camel/component/jetty12/jetty.json b/components/camel-jetty/src/generated/resources/META-INF/org/apache/camel/component/jetty12/jetty.json index 80b549c359cb7..eae916bd357a8 100644 --- a/components/camel-jetty/src/generated/resources/META-INF/org/apache/camel/component/jetty12/jetty.json +++ b/components/camel-jetty/src/generated/resources/META-INF/org/apache/camel/component/jetty12/jetty.json @@ -54,15 +54,16 @@ "headerFilterStrategy": { "index": 26, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }, "proxyHost": { "index": 27, "kind": "property", "displayName": "Proxy Host", "group": "proxy", "label": "proxy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "To use a http proxy to configure the hostname." }, "proxyPort": { "index": 28, "kind": "property", "displayName": "Proxy Port", "group": "proxy", "label": "proxy", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "To use a http proxy to configure the port number." }, - "keystore": { "index": 29, "kind": "property", "displayName": "Keystore", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specifies the location of the Java keystore file, which contains the Jetty server's own X.509 certificate in a key entry." }, - "socketConnectorProperties": { "index": 30, "kind": "property", "displayName": "Socket Connector Properties", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains general HTTP connector properties. Uses the same principle as sslSocketConnectorProperties." }, - "socketConnectors": { "index": 31, "kind": "property", "displayName": "Socket Connectors", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains per port number specific HTTP connectors. Uses the same principle as sslSocketConnectors." }, - "sslContextParameters": { "index": 32, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters" }, - "sslKeyPassword": { "index": 33, "kind": "property", "displayName": "Ssl Key Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "security": "secret", "description": "The key password, which is used to access the certificate's key entry in the keystore (this is the same password that is supplied to the keystore command's -keypass option)." }, - "sslPassword": { "index": 34, "kind": "property", "displayName": "Ssl Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "security": "secret", "description": "The ssl password, which is required to access the keystore file (this is the same password that is supplied to the keystore command's -storepass option)." }, - "sslSocketConnectorProperties": { "index": 35, "kind": "property", "displayName": "Ssl Socket Connector Properties", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains general SSL connector properties." }, - "sslSocketConnectors": { "index": 36, "kind": "property", "displayName": "Ssl Socket Connectors", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains per port number specific SSL connectors." }, - "useGlobalSslContextParameters": { "index": 37, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters" } + "deserializationFilter": { "index": 29, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." }, + "keystore": { "index": 30, "kind": "property", "displayName": "Keystore", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specifies the location of the Java keystore file, which contains the Jetty server's own X.509 certificate in a key entry." }, + "socketConnectorProperties": { "index": 31, "kind": "property", "displayName": "Socket Connector Properties", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains general HTTP connector properties. Uses the same principle as sslSocketConnectorProperties." }, + "socketConnectors": { "index": 32, "kind": "property", "displayName": "Socket Connectors", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains per port number specific HTTP connectors. Uses the same principle as sslSocketConnectors." }, + "sslContextParameters": { "index": 33, "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "To configure security using SSLContextParameters" }, + "sslKeyPassword": { "index": 34, "kind": "property", "displayName": "Ssl Key Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "security": "secret", "description": "The key password, which is used to access the certificate's key entry in the keystore (this is the same password that is supplied to the keystore command's -keypass option)." }, + "sslPassword": { "index": 35, "kind": "property", "displayName": "Ssl Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "security": "secret", "description": "The ssl password, which is required to access the keystore file (this is the same password that is supplied to the keystore command's -storepass option)." }, + "sslSocketConnectorProperties": { "index": 36, "kind": "property", "displayName": "Ssl Socket Connector Properties", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains general SSL connector properties." }, + "sslSocketConnectors": { "index": 37, "kind": "property", "displayName": "Ssl Socket Connectors", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map which contains per port number specific SSL connectors." }, + "useGlobalSslContextParameters": { "index": 38, "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters" } }, "headers": { "CamelServletContextPath": { "index": 0, "kind": "header", "displayName": "", "group": "consumer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The servlet context path used", "constantName": "org.apache.camel.component.jetty.JettyHttpConstants#SERVLET_CONTEXT_PATH" }, diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty12/JettyHttpEndpoint12.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty12/JettyHttpEndpoint12.java index daaa94f1973eb..d33c25fd60e58 100644 --- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty12/JettyHttpEndpoint12.java +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty12/JettyHttpEndpoint12.java @@ -57,6 +57,7 @@ public HttpBinding getHttpBinding() { this.binding.setLogException(isLogException()); if (getComponent() != null) { this.binding.setAllowJavaSerializedObject(getComponent().isAllowJavaSerializedObject()); + this.binding.setDeserializationFilter(getComponent().getDeserializationFilter()); } this.binding.setHeaderFilterStrategy(getHeaderFilterStrategy()); this.binding.setEagerCheckContentAvailable(isEagerCheckContentAvailable()); diff --git a/components/camel-servlet/src/generated/java/org/apache/camel/component/servlet/ServletComponentConfigurer.java b/components/camel-servlet/src/generated/java/org/apache/camel/component/servlet/ServletComponentConfigurer.java index df380193ef4ee..13de2ac275233 100644 --- a/components/camel-servlet/src/generated/java/org/apache/camel/component/servlet/ServletComponentConfigurer.java +++ b/components/camel-servlet/src/generated/java/org/apache/camel/component/servlet/ServletComponentConfigurer.java @@ -31,6 +31,8 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "autowiredEnabled": target.setAutowiredEnabled(property(camelContext, boolean.class, value)); return true; case "bridgeerrorhandler": case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true; + case "deserializationfilter": + case "deserializationFilter": target.setDeserializationFilter(property(camelContext, java.lang.String.class, value)); return true; case "filenameextwhitelist": case "fileNameExtWhitelist": target.setFileNameExtWhitelist(property(camelContext, java.lang.String.class, value)); return true; case "headerfilterstrategy": @@ -60,6 +62,8 @@ public Class getOptionType(String name, boolean ignoreCase) { case "autowiredEnabled": return boolean.class; case "bridgeerrorhandler": case "bridgeErrorHandler": return boolean.class; + case "deserializationfilter": + case "deserializationFilter": return java.lang.String.class; case "filenameextwhitelist": case "fileNameExtWhitelist": return java.lang.String.class; case "headerfilterstrategy": @@ -90,6 +94,8 @@ public Object getOptionValue(Object obj, String name, boolean ignoreCase) { case "autowiredEnabled": return target.isAutowiredEnabled(); case "bridgeerrorhandler": case "bridgeErrorHandler": return target.isBridgeErrorHandler(); + case "deserializationfilter": + case "deserializationFilter": return target.getDeserializationFilter(); case "filenameextwhitelist": case "fileNameExtWhitelist": return target.getFileNameExtWhitelist(); case "headerfilterstrategy": diff --git a/components/camel-servlet/src/generated/resources/META-INF/org/apache/camel/component/servlet/servlet.json b/components/camel-servlet/src/generated/resources/META-INF/org/apache/camel/component/servlet/servlet.json index 77a1b781ed15a..8dd7b138314cb 100644 --- a/components/camel-servlet/src/generated/resources/META-INF/org/apache/camel/component/servlet/servlet.json +++ b/components/camel-servlet/src/generated/resources/META-INF/org/apache/camel/component/servlet/servlet.json @@ -35,7 +35,8 @@ "autowiredEnabled": { "index": 7, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc." }, "httpBinding": { "index": 8, "kind": "property", "displayName": "Http Binding", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.http.common.HttpBinding", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HttpBinding to control the mapping between Camel message and HttpClient." }, "httpConfiguration": { "index": 9, "kind": "property", "displayName": "Http Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.http.common.HttpConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use the shared HttpConfiguration as base configuration." }, - "headerFilterStrategy": { "index": 10, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." } + "headerFilterStrategy": { "index": 10, "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }, + "deserializationFilter": { "index": 11, "kind": "property", "displayName": "Deserialization Filter", "group": "security", "label": "advanced,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied when deserializing Java objects from requests or responses with Content-Type application\/x-java-serialized-object (only used when allowJavaSerializedObject or transferException is enabled). When not set, the JVM-wide jdk.serialFilter is used if present; otherwise a conservative default filter denying java.net. and otherwise allowing java., javax. and org.apache.camel. packages is applied." } }, "properties": { "contextPath": { "index": 0, "kind": "path", "displayName": "Context Path", "group": "consumer", "label": "consumer", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The context-path to use" }, diff --git a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletEndpoint.java b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletEndpoint.java index 72e18360fd23f..d0bf271931f56 100644 --- a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletEndpoint.java +++ b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletEndpoint.java @@ -92,6 +92,7 @@ public HttpBinding getHttpBinding() { this.binding.setLogException(isLogException()); if (getComponent() != null) { this.binding.setAllowJavaSerializedObject(getComponent().isAllowJavaSerializedObject()); + this.binding.setDeserializationFilter(getComponent().getDeserializationFilter()); } this.binding.setHeaderFilterStrategy(getHeaderFilterStrategy()); this.binding.setEagerCheckContentAvailable(isEagerCheckContentAvailable()); diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc index 21730ede5e298..e23402fa19ed5 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc @@ -1055,6 +1055,18 @@ resolve to a path outside it. The containment check honours the existing `jailSt remote file that resolves outside the local work directory is now rejected with a `GenericFileOperationFailedException`. +=== camel-http, camel-jetty, camel-servlet, camel-atmosphere-websocket + +The HTTP components (which share `camel-http-common`) now apply a Java deserialization filter +(`ObjectInputFilter`) when deserializing `application/x-java-serialized-object` payloads on the opt-in +`allowJavaSerializedObject` / `transferException` path, aligning them with `camel-netty-http`, `camel-jms` +and `camel-vertx-http`. A new `deserializationFilter` component option (same syntax as `jdk.serialFilter`) +can be set to customise it; when unset, the JVM-wide `jdk.serialFilter` is used if present, otherwise a +conservative default filter (denying `java.net.**`, allowing `java.**` / `javax.**` / +`org.apache.camel.**`, with JEP-290 graph-shape limits) is applied. This is a defense-in-depth measure on +an already opt-in path; a serialized payload that was accepted before may now be rejected if it references +a denied class. + === camel-oauth `OAuthTokenRequest.refreshTokenGrant(...)` now sends the RFC 6749 `refresh_token` form parameter for diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AtmosphereWebsocketComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AtmosphereWebsocketComponentBuilderFactory.java index 09a59bcc3ee57..72d8cb4629ea3 100644 --- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AtmosphereWebsocketComponentBuilderFactory.java +++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AtmosphereWebsocketComponentBuilderFactory.java @@ -288,6 +288,27 @@ default AtmosphereWebsocketComponentBuilder headerFilterStrategy(org.apache.came doSetProperty("headerFilterStrategy", headerFilterStrategy); return this; } + + /** + * Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied + * when deserializing Java objects from requests or responses with + * Content-Type application/x-java-serialized-object (only used when + * allowJavaSerializedObject or transferException is enabled). When not + * set, the JVM-wide jdk.serialFilter is used if present; otherwise a + * conservative default filter denying java.net. and otherwise allowing + * java., javax. and org.apache.camel. packages is applied. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param deserializationFilter the value to set + * @return the dsl builder + */ + default AtmosphereWebsocketComponentBuilder deserializationFilter(java.lang.String deserializationFilter) { + doSetProperty("deserializationFilter", deserializationFilter); + return this; + } } class AtmosphereWebsocketComponentBuilderImpl @@ -315,6 +336,7 @@ protected boolean setPropertyOnComponent( case "httpBinding": ((WebsocketComponent) component).setHttpBinding((org.apache.camel.http.common.HttpBinding) value); return true; case "httpConfiguration": ((WebsocketComponent) component).setHttpConfiguration((org.apache.camel.http.common.HttpConfiguration) value); return true; case "headerFilterStrategy": ((WebsocketComponent) component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy) value); return true; + case "deserializationFilter": ((WebsocketComponent) component).setDeserializationFilter((java.lang.String) value); return true; default: return false; } } diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpComponentBuilderFactory.java index 326562318dce2..4a698fa72dc85 100644 --- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpComponentBuilderFactory.java +++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpComponentBuilderFactory.java @@ -785,6 +785,27 @@ default HttpComponentBuilder proxyPort(java.lang.Integer proxyPort) { return this; } + /** + * Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied + * when deserializing Java objects from requests or responses with + * Content-Type application/x-java-serialized-object (only used when + * allowJavaSerializedObject or transferException is enabled). When not + * set, the JVM-wide jdk.serialFilter is used if present; otherwise a + * conservative default filter denying java.net. and otherwise allowing + * java., javax. and org.apache.camel. packages is applied. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param deserializationFilter the value to set + * @return the dsl builder + */ + default HttpComponentBuilder deserializationFilter(java.lang.String deserializationFilter) { + doSetProperty("deserializationFilter", deserializationFilter); + return this; + } + /** * Controls how hostname verification is performed during the TLS @@ -995,6 +1016,7 @@ protected boolean setPropertyOnComponent( case "proxyAuthUsername": ((HttpComponent) component).setProxyAuthUsername((java.lang.String) value); return true; case "proxyHost": ((HttpComponent) component).setProxyHost((java.lang.String) value); return true; case "proxyPort": ((HttpComponent) component).setProxyPort((java.lang.Integer) value); return true; + case "deserializationFilter": ((HttpComponent) component).setDeserializationFilter((java.lang.String) value); return true; case "hostnameVerificationPolicy": ((HttpComponent) component).setHostnameVerificationPolicy((org.apache.hc.client5.http.ssl.HostnameVerificationPolicy) value); return true; case "sslContextParameters": ((HttpComponent) component).setSslContextParameters((org.apache.camel.support.jsse.SSLContextParameters) value); return true; case "useGlobalSslContextParameters": ((HttpComponent) component).setUseGlobalSslContextParameters((boolean) value); return true; diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpsComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpsComponentBuilderFactory.java index 4fd82afc2b11c..ab81bf36ef47e 100644 --- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpsComponentBuilderFactory.java +++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpsComponentBuilderFactory.java @@ -785,6 +785,27 @@ default HttpsComponentBuilder proxyPort(java.lang.Integer proxyPort) { return this; } + /** + * Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied + * when deserializing Java objects from requests or responses with + * Content-Type application/x-java-serialized-object (only used when + * allowJavaSerializedObject or transferException is enabled). When not + * set, the JVM-wide jdk.serialFilter is used if present; otherwise a + * conservative default filter denying java.net. and otherwise allowing + * java., javax. and org.apache.camel. packages is applied. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param deserializationFilter the value to set + * @return the dsl builder + */ + default HttpsComponentBuilder deserializationFilter(java.lang.String deserializationFilter) { + doSetProperty("deserializationFilter", deserializationFilter); + return this; + } + /** * Controls how hostname verification is performed during the TLS @@ -995,6 +1016,7 @@ protected boolean setPropertyOnComponent( case "proxyAuthUsername": ((HttpComponent) component).setProxyAuthUsername((java.lang.String) value); return true; case "proxyHost": ((HttpComponent) component).setProxyHost((java.lang.String) value); return true; case "proxyPort": ((HttpComponent) component).setProxyPort((java.lang.Integer) value); return true; + case "deserializationFilter": ((HttpComponent) component).setDeserializationFilter((java.lang.String) value); return true; case "hostnameVerificationPolicy": ((HttpComponent) component).setHostnameVerificationPolicy((org.apache.hc.client5.http.ssl.HostnameVerificationPolicy) value); return true; case "sslContextParameters": ((HttpComponent) component).setSslContextParameters((org.apache.camel.support.jsse.SSLContextParameters) value); return true; case "useGlobalSslContextParameters": ((HttpComponent) component).setUseGlobalSslContextParameters((boolean) value); return true; diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JettyComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JettyComponentBuilderFactory.java index 17e519c41ff49..d7a7dda3eed17 100644 --- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JettyComponentBuilderFactory.java +++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JettyComponentBuilderFactory.java @@ -564,6 +564,27 @@ default JettyComponentBuilder proxyPort(java.lang.Integer proxyPort) { return this; } + /** + * Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied + * when deserializing Java objects from requests or responses with + * Content-Type application/x-java-serialized-object (only used when + * allowJavaSerializedObject or transferException is enabled). When not + * set, the JVM-wide jdk.serialFilter is used if present; otherwise a + * conservative default filter denying java.net. and otherwise allowing + * java., javax. and org.apache.camel. packages is applied. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param deserializationFilter the value to set + * @return the dsl builder + */ + default JettyComponentBuilder deserializationFilter(java.lang.String deserializationFilter) { + doSetProperty("deserializationFilter", deserializationFilter); + return this; + } + /** * Specifies the location of the Java keystore file, which contains the * Jetty server's own X.509 certificate in a key entry. @@ -756,6 +777,7 @@ protected boolean setPropertyOnComponent( case "headerFilterStrategy": ((JettyHttpComponent12) component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy) value); return true; case "proxyHost": ((JettyHttpComponent12) component).setProxyHost((java.lang.String) value); return true; case "proxyPort": ((JettyHttpComponent12) component).setProxyPort((java.lang.Integer) value); return true; + case "deserializationFilter": ((JettyHttpComponent12) component).setDeserializationFilter((java.lang.String) value); return true; case "keystore": ((JettyHttpComponent12) component).setKeystore((java.lang.String) value); return true; case "socketConnectorProperties": ((JettyHttpComponent12) component).setSocketConnectorProperties((java.util.Map) value); return true; case "socketConnectors": ((JettyHttpComponent12) component).setSocketConnectors((java.util.Map) value); return true; diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ServletComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ServletComponentBuilderFactory.java index 50ffe3cda8c3b..769a94c42e676 100644 --- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ServletComponentBuilderFactory.java +++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ServletComponentBuilderFactory.java @@ -263,6 +263,27 @@ default ServletComponentBuilder headerFilterStrategy(org.apache.camel.spi.Header doSetProperty("headerFilterStrategy", headerFilterStrategy); return this; } + + /** + * Sets an ObjectInputFilter pattern (jdk.serialFilter syntax) applied + * when deserializing Java objects from requests or responses with + * Content-Type application/x-java-serialized-object (only used when + * allowJavaSerializedObject or transferException is enabled). When not + * set, the JVM-wide jdk.serialFilter is used if present; otherwise a + * conservative default filter denying java.net. and otherwise allowing + * java., javax. and org.apache.camel. packages is applied. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param deserializationFilter the value to set + * @return the dsl builder + */ + default ServletComponentBuilder deserializationFilter(java.lang.String deserializationFilter) { + doSetProperty("deserializationFilter", deserializationFilter); + return this; + } } class ServletComponentBuilderImpl @@ -289,6 +310,7 @@ protected boolean setPropertyOnComponent( case "httpBinding": ((ServletComponent) component).setHttpBinding((org.apache.camel.http.common.HttpBinding) value); return true; case "httpConfiguration": ((ServletComponent) component).setHttpConfiguration((org.apache.camel.http.common.HttpConfiguration) value); return true; case "headerFilterStrategy": ((ServletComponent) component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy) value); return true; + case "deserializationFilter": ((ServletComponent) component).setDeserializationFilter((java.lang.String) value); return true; default: return false; } }