This is an automated email from the ASF dual-hosted git repository.
jungm pushed a commit to branch tomee-10.x
in repository https://gitbox.apache.org/repos/asf/tomee.git
The following commit(s) were added to refs/heads/tomee-10.x by this push:
new 9efdac831a security-openid example add integration test for
notifyProvider=true
9efdac831a is described below
commit 9efdac831ae6a906664fd0c72b0ccd8410a528ce
Author: Markus Jung <[email protected]>
AuthorDate: Fri Mar 13 08:58:45 2026 +0100
security-openid example add integration test for notifyProvider=true
---
.../{SecuredServlet.java => LogoutServlet.java} | 27 +++++-----------------
.../java/org/superbiz/openid/SecuredServlet.java | 4 +++-
.../org/superbiz/openid/SecuredServletTest.java | 23 +++++++++++++++++-
3 files changed, 31 insertions(+), 23 deletions(-)
diff --git
a/examples/security-openid/src/main/java/org/superbiz/openid/SecuredServlet.java
b/examples/security-openid/src/main/java/org/superbiz/openid/LogoutServlet.java
similarity index 52%
copy from
examples/security-openid/src/main/java/org/superbiz/openid/SecuredServlet.java
copy to
examples/security-openid/src/main/java/org/superbiz/openid/LogoutServlet.java
index 9d1d869ea6..3d733521fa 100644
---
a/examples/security-openid/src/main/java/org/superbiz/openid/SecuredServlet.java
+++
b/examples/security-openid/src/main/java/org/superbiz/openid/LogoutServlet.java
@@ -16,38 +16,23 @@
*/
package org.superbiz.openid;
-import
jakarta.security.enterprise.authentication.mechanism.http.OpenIdAuthenticationMechanismDefinition;
import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.servlet.annotation.ServletSecurity;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.util.stream.Collectors;
-@OpenIdAuthenticationMechanismDefinition(
- providerURI = "#{openIdConfig.providerUri}",
- clientId = "#{openIdConfig.clientId}",
- clientSecret = "#{openIdConfig.clientSecret}",
- useSession = false,
- redirectToOriginalResource = true)
-@ServletSecurity(@HttpConstraint(rolesAllowed = "user"))
-@WebServlet(name = "Secured Servlet", urlPatterns = "/secured")
-public class SecuredServlet extends HttpServlet {
+@WebServlet(name = "Logout Servlet", urlPatterns = "/logout")
+public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
- resp.setContentType("text/plain");
- resp.getWriter().print("Hello, " + req.getUserPrincipal().getName());
-
- if (req.isUserInRole("admin")) {
- resp.getWriter().print("\nYou're an admin!");
+ if (req.getUserPrincipal() != null) {
+ req.logout();
+ return;
}
- resp.getWriter().print("\nRequest parameters: " +
req.getParameterMap().entrySet().stream()
- .map(e -> e.getKey() + "=" + String.join(",", e.getValue()))
- .collect(Collectors.joining(";")));
+ resp.getWriter().write("logged out");
}
}
diff --git
a/examples/security-openid/src/main/java/org/superbiz/openid/SecuredServlet.java
b/examples/security-openid/src/main/java/org/superbiz/openid/SecuredServlet.java
index 9d1d869ea6..3f6a314f3a 100644
---
a/examples/security-openid/src/main/java/org/superbiz/openid/SecuredServlet.java
+++
b/examples/security-openid/src/main/java/org/superbiz/openid/SecuredServlet.java
@@ -17,6 +17,7 @@
package org.superbiz.openid;
import
jakarta.security.enterprise.authentication.mechanism.http.OpenIdAuthenticationMechanismDefinition;
+import
jakarta.security.enterprise.authentication.mechanism.http.openid.LogoutDefinition;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.HttpConstraint;
import jakarta.servlet.annotation.ServletSecurity;
@@ -33,7 +34,8 @@ import java.util.stream.Collectors;
clientId = "#{openIdConfig.clientId}",
clientSecret = "#{openIdConfig.clientSecret}",
useSession = false,
- redirectToOriginalResource = true)
+ redirectToOriginalResource = true,
+ logout = @LogoutDefinition(notifyProvider = true, redirectURI =
"#{baseURL}/logout"))
@ServletSecurity(@HttpConstraint(rolesAllowed = "user"))
@WebServlet(name = "Secured Servlet", urlPatterns = "/secured")
public class SecuredServlet extends HttpServlet {
diff --git
a/examples/security-openid/src/test/java/org/superbiz/openid/SecuredServletTest.java
b/examples/security-openid/src/test/java/org/superbiz/openid/SecuredServletTest.java
index 7dd3e96ac7..57e9edabad 100644
---
a/examples/security-openid/src/test/java/org/superbiz/openid/SecuredServletTest.java
+++
b/examples/security-openid/src/test/java/org/superbiz/openid/SecuredServletTest.java
@@ -52,7 +52,7 @@ public class SecuredServletTest {
+ "openid.client-secret = tomee-client-secret\n";
return ShrinkWrap.create(WebArchive.class, "ROOT.war")
- .addClasses(SecuredServlet.class, OpenIdConfig.class)
+ .addClasses(SecuredServlet.class, LogoutServlet.class,
OpenIdConfig.class)
.addAsResource("META-INF/beans.xml")
.addAsResource(new StringAsset(mpConfig),
"META-INF/microprofile-config.properties");
}
@@ -91,4 +91,25 @@ public class SecuredServletTest {
assertEquals("Hello, tomee-admin\nYou're an admin!\nRequest
parameters: ", securedServletPage.getContent());
}
}
+
+ @Test
+ @RunAsClient
+ public void testLogoutNotifyProvider() throws Exception {
+ try (WebClient webClient = new WebClient()) {
+ // Login and logout again
+ HtmlPage htmlPage = webClient.getPage(url + "/secured");
+
assertTrue(htmlPage.getUrl().toString().startsWith(KEYCLOAK_CONTAINER.getAuthServerUrl()
+ "/realms/tomee/protocol/openid-connect/auth"));
+
+ HtmlForm loginForm = htmlPage.getForms().get(0);
+ loginForm.getInputByName("username").setValue("tomee-user");
+ loginForm.getInputByName("password").setValue("tomee");
+ loginForm.getButtonByName("login").click();
+
+ webClient.getPage(url + "/logout");
+
+ // Try to log in again, assert that the keycloak login is showing
(= provider has been notified of logout)
+ HtmlPage securedAgain = webClient.getPage(url + "/secured");
+
assertTrue(securedAgain.getUrl().toString().startsWith(KEYCLOAK_CONTAINER.getAuthServerUrl()
+ "/realms/tomee/protocol/openid-connect/auth"));
+ }
+ }
}