diff --git a/bom/application/pom.xml b/bom/application/pom.xml
index 34dccce7014d8..0d55e5e754476 100644
--- a/bom/application/pom.xml
+++ b/bom/application/pom.xml
@@ -186,7 +186,7 @@
2.17.2
1.3.0.Final
1.11.0
- 2.2.3.Final
+ 2.2.4.Final
0.1.9.Final
0.8.8
1.17.2
@@ -1385,16 +1385,31 @@
quarkus-smallrye-reactive-messaging-amqp
${project.version}
+
+ io.quarkus
+ quarkus-smallrye-reactive-messaging-amqp-deployment
+ ${project.version}
+
io.quarkus
quarkus-smallrye-reactive-messaging-mqtt
${project.version}
+
+ io.quarkus
+ quarkus-smallrye-reactive-messaging-mqtt-deployment
+ ${project.version}
+
io.quarkus
quarkus-smallrye-reactive-messaging-rabbitmq
${project.version}
+
+ io.quarkus
+ quarkus-smallrye-reactive-messaging-rabbitmq-deployment
+ ${project.version}
+
io.quarkus
quarkus-smallrye-metrics
diff --git a/build-parent/pom.xml b/build-parent/pom.xml
index 8a29b67c29b2f..69917457461c2 100644
--- a/build-parent/pom.xml
+++ b/build-parent/pom.xml
@@ -89,13 +89,13 @@
http
- docker.io/postgres:14.2
- docker.io/mariadb:10.7
+ docker.io/postgres:14
+ docker.io/mariadb:10.6
docker.io/ibmcom/db2:11.5.7.0a
- mcr.microsoft.com/mssql/server:2019-CU15-ubuntu-20.04
+ mcr.microsoft.com/mssql/server:2019-latest
docker.io/mysql:8.0
docker.io/gvenzl/oracle-xe:21-slim
- docker.io/mongo:4.4.13
+ docker.io/mongo:4.4
4.13.2
diff --git a/extensions/hibernate-orm/deployment-spi/src/main/java/io.quarkus.hibernate.orm.deployment.spi/DatabaseKindDialectBuildItem.java b/extensions/hibernate-orm/deployment-spi/src/main/java/io/quarkus/hibernate/orm/deployment/spi/DatabaseKindDialectBuildItem.java
similarity index 100%
rename from extensions/hibernate-orm/deployment-spi/src/main/java/io.quarkus.hibernate.orm.deployment.spi/DatabaseKindDialectBuildItem.java
rename to extensions/hibernate-orm/deployment-spi/src/main/java/io/quarkus/hibernate/orm/deployment/spi/DatabaseKindDialectBuildItem.java
diff --git a/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java b/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java
index ce114af8a5eda..d86446af0144d 100644
--- a/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java
+++ b/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java
@@ -186,39 +186,47 @@ void processTemplateErrors(TemplatesAnalysisBuildItem analysis, List {
- assertTrue(t.getMessage().contains("Incorrect expression"));
+ assertTrue(t.getMessage().contains("Found incorrect expressions"));
assertTrue(t.getMessage().contains("name.foo()"));
});
diff --git a/extensions/resteasy-reactive/quarkus-resteasy-reactive-qute/deployment/src/test/java/io/quarkus/resteasy/reactive/qute/deployment/TypeErrorTest.java b/extensions/resteasy-reactive/quarkus-resteasy-reactive-qute/deployment/src/test/java/io/quarkus/resteasy/reactive/qute/deployment/TypeErrorTest.java
index cbaf3ab513024..ac8a13836298f 100644
--- a/extensions/resteasy-reactive/quarkus-resteasy-reactive-qute/deployment/src/test/java/io/quarkus/resteasy/reactive/qute/deployment/TypeErrorTest.java
+++ b/extensions/resteasy-reactive/quarkus-resteasy-reactive-qute/deployment/src/test/java/io/quarkus/resteasy/reactive/qute/deployment/TypeErrorTest.java
@@ -20,7 +20,7 @@ public class TypeErrorTest {
.addAsResource("templates/HelloResource/typedTemplatePrimitives.txt")
.addAsResource(new StringAsset("Hello {name}!"), "templates/hello.txt"))
.assertException(t -> {
- assertTrue(t.getMessage().contains("Incorrect expression"));
+ assertTrue(t.getMessage().contains("Found incorrect expressions"));
assertTrue(t.getMessage().contains("name.foo()"));
});
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/qute/QuteErrorPageTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/qute/QuteErrorPageTest.java
index be9814850f204..effa9b27abe78 100644
--- a/integration-tests/devmode/src/test/java/io/quarkus/test/qute/QuteErrorPageTest.java
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/qute/QuteErrorPageTest.java
@@ -22,7 +22,7 @@ public class QuteErrorPageTest {
public void testErrorPage() {
config.modifyResourceFile("templates/hello.txt", file -> "{@java.lang.String hello}{hello.foo}");
RestAssured.when().get("/hello").then()
- .body(containsString("Incorrect expression found: {hello.foo}"))
+ .body(containsString("hello.txt:1"), containsString("{hello.foo}"))
.statusCode(Status.INTERNAL_SERVER_ERROR.getStatusCode());
}
diff --git a/integration-tests/oidc-token-propagation-reactive/pom.xml b/integration-tests/oidc-token-propagation-reactive/pom.xml
index af5b04910e051..93212dbcab094 100644
--- a/integration-tests/oidc-token-propagation-reactive/pom.xml
+++ b/integration-tests/oidc-token-propagation-reactive/pom.xml
@@ -15,6 +15,15 @@
Module that contains OpenID Connect Token Propagation Reactive tests
+
+ io.quarkus
+ quarkus-resteasy-reactive-jackson
+
+
+ io.quarkus
+ quarkus-test-security-oidc
+ test
+
io.quarkus
quarkus-junit5
@@ -34,6 +43,19 @@
io.quarkus
quarkus-resteasy-reactive
+
+ io.quarkus
+ quarkus-resteasy-reactive-jackson-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
io.quarkus
quarkus-resteasy-reactive-deployment
diff --git a/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedJwtResource.java b/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedJwtResource.java
new file mode 100644
index 0000000000000..791c4232fd35a
--- /dev/null
+++ b/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedJwtResource.java
@@ -0,0 +1,52 @@
+package io.quarkus.it.keycloak;
+
+import javax.annotation.security.RolesAllowed;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.SecurityContext;
+
+import org.eclipse.microprofile.jwt.JsonWebToken;
+
+import io.quarkus.security.Authenticated;
+import io.quarkus.security.identity.SecurityIdentity;
+
+@Path("/web-app")
+@Authenticated
+public class ProtectedJwtResource {
+
+ @Inject
+ SecurityIdentity identity;
+
+ @Inject
+ JsonWebToken accessToken;
+
+ @Context
+ SecurityContext securityContext;
+
+ @GET
+ @Path("test-security")
+ @RolesAllowed("viewer")
+ public String testSecurity() {
+ return securityContext.getUserPrincipal().getName();
+ }
+
+ @POST
+ @Path("test-security")
+ @Consumes("application/json")
+ @RolesAllowed("viewer")
+ public String testSecurityJson(User user) {
+ return user.getName() + ":" + securityContext.getUserPrincipal().getName();
+ }
+
+ @GET
+ @Path("test-security-jwt")
+ @RolesAllowed("viewer")
+ public String testSecurityJwt() {
+ return accessToken.getName() + ":" + accessToken.getGroups().iterator().next()
+ + ":" + accessToken.getClaim("email");
+ }
+}
diff --git a/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/User.java b/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/User.java
new file mode 100644
index 0000000000000..d84af41bcdf4d
--- /dev/null
+++ b/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/User.java
@@ -0,0 +1,15 @@
+package io.quarkus.it.keycloak;
+
+public class User {
+
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
diff --git a/integration-tests/oidc-token-propagation-reactive/src/test/java/io/quarkus/it/keycloak/TestSecurityLazyAuthTest.java b/integration-tests/oidc-token-propagation-reactive/src/test/java/io/quarkus/it/keycloak/TestSecurityLazyAuthTest.java
new file mode 100644
index 0000000000000..2f4ea6ffb2440
--- /dev/null
+++ b/integration-tests/oidc-token-propagation-reactive/src/test/java/io/quarkus/it/keycloak/TestSecurityLazyAuthTest.java
@@ -0,0 +1,56 @@
+package io.quarkus.it.keycloak;
+
+import static org.hamcrest.Matchers.is;
+
+import org.junit.jupiter.api.Test;
+
+import io.quarkus.test.common.http.TestHTTPEndpoint;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.security.TestSecurity;
+import io.quarkus.test.security.oidc.Claim;
+import io.quarkus.test.security.oidc.OidcSecurity;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+
+@QuarkusTest
+@TestHTTPEndpoint(ProtectedJwtResource.class)
+public class TestSecurityLazyAuthTest {
+
+ @Test
+ @TestSecurity(user = "user1", roles = "viewer")
+ public void testWithDummyUser() {
+ RestAssured.when().get("test-security").then()
+ .body(is("user1"));
+ }
+
+ @Test
+ @TestSecurity(user = "user1", roles = "tester")
+ public void testWithDummyUserForbidden() {
+ RestAssured.when().get("test-security").then().statusCode(403);
+ }
+
+ @Test
+ @TestSecurity(user = "user1", roles = "viewer")
+ public void testPostWithDummyUser() {
+ RestAssured.given().contentType(ContentType.JSON).when().body("{\"name\":\"user1\"}").post("test-security").then()
+ .body(is("user1:user1"));
+ }
+
+ @Test
+ @TestSecurity(user = "user1", roles = "tester")
+ public void testPostWithDummyUserForbidden() {
+ RestAssured.given().contentType(ContentType.JSON).when().body("{\"name\":\"user1\"}").post("test-security").then()
+ .statusCode(403);
+ }
+
+ @Test
+ @TestSecurity(user = "userJwt", roles = "viewer")
+ @OidcSecurity(claims = {
+ @Claim(key = "email", value = "user@gmail.com")
+ })
+ public void testJwtGetWithDummyUser() {
+ RestAssured.when().get("test-security-jwt").then()
+ .body(is("userJwt:viewer:user@gmail.com"));
+ }
+
+}
diff --git a/jakarta/rewrite.yml b/jakarta/rewrite.yml
index 680eefa754dd8..7c7c3f0481f26 100644
--- a/jakarta/rewrite.yml
+++ b/jakarta/rewrite.yml
@@ -430,7 +430,7 @@ recipeList:
newValue: 2.0
- org.openrewrite.maven.ChangePropertyValue:
key: smallrye-jwt.version
- newValue: 4.0.0-RC1
+ newValue: 4.0.0-RC2
- org.openrewrite.maven.ChangePropertyValue:
key: microprofile-lra.version
newValue: 2.0-RC1