diff --git a/kinde-core/src/main/java/com/kinde/KindeClientSession.java b/kinde-core/src/main/java/com/kinde/KindeClientSession.java index dc2d1e0c..a6542993 100644 --- a/kinde-core/src/main/java/com/kinde/KindeClientSession.java +++ b/kinde-core/src/main/java/com/kinde/KindeClientSession.java @@ -21,6 +21,8 @@ public interface KindeClientSession { AuthorizationUrl register(); AuthorizationUrl logout() throws Exception; + + AuthorizationUrl logout(String logoutRedirectUri) throws Exception; AuthorizationUrl generatePortalUrl(String domain, String returnUrl, String subNav); diff --git a/kinde-core/src/main/java/com/kinde/session/KindeClientKindeTokenSessionImpl.java b/kinde-core/src/main/java/com/kinde/session/KindeClientKindeTokenSessionImpl.java index 58c23fee..2cf88e71 100644 --- a/kinde-core/src/main/java/com/kinde/session/KindeClientKindeTokenSessionImpl.java +++ b/kinde-core/src/main/java/com/kinde/session/KindeClientKindeTokenSessionImpl.java @@ -21,6 +21,8 @@ import com.nimbusds.openid.connect.sdk.UserInfoRequest; import com.nimbusds.openid.connect.sdk.UserInfoResponse; import lombok.SneakyThrows; +import com.kinde.KindeClientSession; +import com.kinde.authorization.AuthorizationUrl; import java.net.URI; diff --git a/kinde-core/src/main/java/com/kinde/session/KindeClientSessionImpl.java b/kinde-core/src/main/java/com/kinde/session/KindeClientSessionImpl.java index ac6b43a6..efeda518 100644 --- a/kinde-core/src/main/java/com/kinde/session/KindeClientSessionImpl.java +++ b/kinde-core/src/main/java/com/kinde/session/KindeClientSessionImpl.java @@ -161,12 +161,18 @@ public AuthorizationUrl register() { return authorizationUrlWithParameters(parameters); } + @Override public AuthorizationUrl logout() throws Exception { - if (this.kindeConfig.logoutRedirectUri() == null || this.kindeConfig.logoutRedirectUri().isEmpty()) { - throw new Exception("Logout url is not provided"); + return logout(this.kindeConfig.logoutRedirectUri()); + } + + @Override + public AuthorizationUrl logout(String logoutRedirectUri) throws Exception { + if (logoutRedirectUri == null || logoutRedirectUri.isEmpty()) { + throw new Exception("Logout redirect URI is not provided"); } - return new AuthorizationUrl(new URL(String.format("%s?redirect=%s", this.oidcMetaData.getOpMetadata().getEndSessionEndpointURI().toURL(), - this.kindeConfig.logoutRedirectUri())), null); + return new AuthorizationUrl(new URL(String.format("%s?redirect=%s",this.oidcMetaData.getOpMetadata().getEndSessionEndpointURI().toURL(), + logoutRedirectUri)),null); } @Override diff --git a/kinde-j2ee/src/main/java/com/kinde/servlet/KindeLogoutServlet.java b/kinde-j2ee/src/main/java/com/kinde/servlet/KindeLogoutServlet.java index 609f885d..3e1a99af 100644 --- a/kinde-j2ee/src/main/java/com/kinde/servlet/KindeLogoutServlet.java +++ b/kinde-j2ee/src/main/java/com/kinde/servlet/KindeLogoutServlet.java @@ -27,11 +27,21 @@ public class KindeLogoutServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { - AuthorizationUrl authorizationUrl = KindeSingleton + String logoutRedirectUri = req.getParameter("redirect_uri"); + AuthorizationUrl authorizationUrl; + + KindeClientSession clientSession = KindeSingleton .getInstance() .getKindeClientBuilder() .build() - .clientSession().logout(); + .clientSession(); + + if (logoutRedirectUri != null && !logoutRedirectUri.isEmpty()) { + authorizationUrl = clientSession.logout(logoutRedirectUri); + } else { + authorizationUrl = clientSession.logout(); + } + HttpSession session = req.getSession(false); if (session != null) { session.removeAttribute(ACCESS_TOKEN);