You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by fm...@apache.org on 2025/01/17 15:55:31 UTC
(camel-spring-boot) 01/03: CSB-5888: implemented cookie handler for Spring Boot HTTP platform
This is an automated email from the ASF dual-hosted git repository.
fmariani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git
commit 83370ee2560183cceb9e8ff84db6d8e96012e0c9
Author: Nikita Konovalov <nk...@redhat.com>
AuthorDate: Wed Jan 15 17:17:56 2025 +0100
CSB-5888: implemented cookie handler for Spring Boot HTTP platform
---
.../springboot/SpringBootPlatformHttpConsumer.java | 64 ++++++++++++++++++++--
.../SpringBootPlatformHttpCertificationTest.java | 7 ++-
2 files changed, 65 insertions(+), 6 deletions(-)
diff --git a/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpConsumer.java b/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpConsumer.java
index d5e5909c3bb..285926cdfd3 100644
--- a/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpConsumer.java
+++ b/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpConsumer.java
@@ -16,15 +16,23 @@
*/
package org.apache.camel.component.platform.http.springboot;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
import jakarta.servlet.ServletException;
+import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
+
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Processor;
import org.apache.camel.Suspendable;
import org.apache.camel.SuspendableService;
import org.apache.camel.component.platform.http.PlatformHttpEndpoint;
+import org.apache.camel.component.platform.http.cookie.CookieConfiguration;
+import org.apache.camel.component.platform.http.cookie.CookieHandler;
import org.apache.camel.component.platform.http.spi.PlatformHttpConsumer;
import org.apache.camel.http.common.HttpBinding;
import org.apache.camel.http.common.HttpHelper;
@@ -33,10 +41,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-
public class SpringBootPlatformHttpConsumer extends DefaultConsumer implements PlatformHttpConsumer, Suspendable, SuspendableService {
private static final Logger LOG = LoggerFactory.getLogger(SpringBootPlatformHttpConsumer.class);
@@ -44,6 +48,7 @@ public class SpringBootPlatformHttpConsumer extends DefaultConsumer implements P
private HttpBinding binding;
private final boolean handleWriteResponseError;
private Executor executor;
+ private CookieConfiguration cookieConfiguration;
public SpringBootPlatformHttpConsumer(PlatformHttpEndpoint endpoint, Processor processor) {
super(endpoint, processor);
@@ -115,6 +120,10 @@ public class SpringBootPlatformHttpConsumer extends DefaultConsumer implements P
if (contextPath != null && httpPath.startsWith(contextPath)) {
exchange.getIn().setHeader(Exchange.HTTP_PATH, httpPath.substring(contextPath.length()));
}
+ if (getEndpoint().isUseCookieHandler()) {
+ cookieConfiguration = getEndpoint().getCookieConfiguration();
+ exchange.setProperty(Exchange.COOKIE_HANDLER, new SpringBootCookieHandler(request, response));
+ }
// we want to handle the UoW
try {
@@ -173,4 +182,51 @@ public class SpringBootPlatformHttpConsumer extends DefaultConsumer implements P
}
}
+ class SpringBootCookieHandler implements CookieHandler {
+
+ private final HttpServletRequest request;
+ private final HttpServletResponse response;
+
+ public SpringBootCookieHandler(HttpServletRequest request, HttpServletResponse response) {
+ this.request = request;
+ this.response = response;
+ }
+
+ @Override
+ public void addCookie(String cookieName, String cookieValue) {
+ Cookie cookie = new Cookie(cookieName, cookieValue);
+ cookie.setPath(cookieConfiguration.getCookiePath());
+ cookie.setDomain(cookieConfiguration.getCookieDomain());
+ cookie.setSecure(cookieConfiguration.isCookieSecure());
+ cookie.setHttpOnly(cookieConfiguration.isCookieHttpOnly());
+ cookie.setAttribute("SameSite", cookieConfiguration.getCookieSameSite().getValue());
+ if (cookieConfiguration.getCookieMaxAge() != null) {
+ cookie.setMaxAge(Math.toIntExact(cookieConfiguration.getCookieMaxAge()));
+ }
+ response.addCookie(cookie);
+ }
+
+ @Override
+ public String removeCookie(String cookieName) {
+ Cookie cookieToRemove = new Cookie(cookieName, null);
+ cookieToRemove.setPath(cookieConfiguration.getCookiePath());
+ // set max age to 0 to delete the cookie
+ cookieToRemove.setMaxAge(0);
+ response.addCookie(cookieToRemove);
+ return cookieName;
+ }
+
+ @Override
+ public String getCookieValue(String cookieName) {
+ Cookie[] cookie = request.getCookies();
+ for (Cookie c : cookie) {
+ if (c.getName().equals(cookieName)) {
+ return c.getValue();
+ }
+ }
+ return null;
+ }
+ }
}
+
+
diff --git a/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpCertificationTest.java b/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpCertificationTest.java
index 39c9305bc6b..44e87f60632 100644
--- a/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpCertificationTest.java
+++ b/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpCertificationTest.java
@@ -42,6 +42,10 @@ import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.annotation.DirtiesContext;
+import org.apache.camel.component.platform.http.springboot.SpringBootPlatformHttpConsumer;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -64,7 +68,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
@CamelSpringBootTest
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = { CamelAutoConfiguration.class,
SpringBootPlatformHttpCertificationTest.class, SpringBootPlatformHttpCertificationTest.TestConfiguration.class,
- PlatformHttpComponentAutoConfiguration.class, SpringBootPlatformHttpAutoConfiguration.class, })
+ PlatformHttpComponentAutoConfiguration.class, SpringBootPlatformHttpAutoConfiguration.class})
public class SpringBootPlatformHttpCertificationTest extends PlatformHttpBase {
private static final String postRouteId = "SpringBootPlatformHttpRestDSLTest_mypost";
@@ -373,7 +377,6 @@ public class SpringBootPlatformHttpCertificationTest extends PlatformHttpBase {
}
@Test
- @Disabled("Test is failing, work in progress")
public void testAddCookie() throws Exception {
given()
.when()