This is an automated email from the ASF dual-hosted git repository.
smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push:
new ad0ea7d4c KNOX-2972 - Session resource can generate application logout
URL with profile/topologies query parameters (#808)
ad0ea7d4c is described below
commit ad0ea7d4c7fafb5ecc4fa348aabb35f1221fbd19
Author: Sandor Molnar <[email protected]>
AuthorDate: Tue Oct 24 19:21:06 2023 +0200
KNOX-2972 - Session resource can generate application logout URL with
profile/topologies query parameters (#808)
---
.../resources/applications/knoxauth/app/logout.jsp | 1 +
.../gateway/service/session/SessionResource.java | 33 ++++++++++++++++------
2 files changed, 25 insertions(+), 9 deletions(-)
diff --git
a/gateway-applications/src/main/resources/applications/knoxauth/app/logout.jsp
b/gateway-applications/src/main/resources/applications/knoxauth/app/logout.jsp
index 9dea1d366..27ddc9602 100644
---
a/gateway-applications/src/main/resources/applications/knoxauth/app/logout.jsp
+++
b/gateway-applications/src/main/resources/applications/knoxauth/app/logout.jsp
@@ -59,6 +59,7 @@
<%
String originalUrl = request.getParameter("originalUrl");
+ originalUrl = originalUrl.replaceAll("&", "%26");
Topology topology =
(Topology)request.getSession().getServletContext().getAttribute("org.apache.knox.gateway.topology");
String whitelist = null;
String cookieName = null;
diff --git
a/gateway-service-session/src/main/java/org/apache/knox/gateway/service/session/SessionResource.java
b/gateway-service-session/src/main/java/org/apache/knox/gateway/service/session/SessionResource.java
index 40dda8e81..2a2cd8602 100644
---
a/gateway-service-session/src/main/java/org/apache/knox/gateway/service/session/SessionResource.java
+++
b/gateway-service-session/src/main/java/org/apache/knox/gateway/service/session/SessionResource.java
@@ -24,10 +24,14 @@ import static javax.ws.rs.core.MediaType.APPLICATION_XML;
import javax.inject.Singleton;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
+
+import org.apache.commons.lang3.StringUtils;
import org.apache.knox.gateway.config.GatewayConfig;
import org.apache.knox.gateway.i18n.messages.MessagesFactory;
import org.apache.knox.gateway.security.SubjectUtils;
@@ -44,10 +48,13 @@ public class SessionResource {
@Context
ServletContext context;
+ private String baseLogoutPageUrl;
+
@GET
@Produces({ APPLICATION_JSON, APPLICATION_XML })
@Path("sessioninfo")
- public SessionInformation getSessionInformation() {
+ public SessionInformation
getSessionInformation(@QueryParam("logoutPageProfile") @DefaultValue("") String
logoutPageProfile,
+ @QueryParam("logoutPageTopologies") @DefaultValue("") String
logoutPageTopologies) {
final SessionInformation sessionInfo = new SessionInformation();
final String user = SubjectUtils.getCurrentEffectivePrincipalName();
sessionInfo.setUser(user);
@@ -56,7 +63,7 @@ public class SessionResource {
String logoutUrl = getBaseGatewayUrl(config) +
"/homepage/knoxssout/api/v1/webssout";
LOG.homePageLogoutEnabled(logoutUrl);
sessionInfo.setLogoutUrl(logoutUrl);
- sessionInfo.setLogoutPageUrl(getLogoutPageUrl(config));
+ sessionInfo.setLogoutPageUrl(getLogoutPageUrl(config, logoutPageProfile,
logoutPageTopologies));
sessionInfo.setGlobalLogoutPageUrl(getGlobalLogoutPageUrl(config));
}
sessionInfo.setCanSeeAllTokens(config != null ?
config.canSeeAllTokens(user) : false);
@@ -66,15 +73,23 @@ public class SessionResource {
}
private String getBaseGatewayUrl(GatewayConfig config) {
- return request.getRequestURL().substring(0,
- request.getRequestURL().length() - request.getRequestURI().length()) +
- "/" + config.getGatewayPath();
+ return request.getRequestURL().substring(0,
request.getRequestURL().length() - request.getRequestURI().length()) + "/" +
config.getGatewayPath();
}
- private String getLogoutPageUrl(GatewayConfig config) {
- return getBaseGatewayUrl(config) +
- "/knoxsso/knoxauth/logout.jsp?originalUrl=" +
getBaseGatewayUrl(config) +
- "/homepage/home";
+ private String getLogoutPageUrl(GatewayConfig config, String
logoutPageProfile, String logoutPageTopologies) {
+ if (baseLogoutPageUrl == null) {
+ baseLogoutPageUrl = getBaseGatewayUrl(config) +
"/knoxsso/knoxauth/logout.jsp?originalUrl=" + getBaseGatewayUrl(config) +
"/homepage/home";
+ }
+ final StringBuilder logoutPageUrlBuilder = new
StringBuilder(baseLogoutPageUrl);
+ String delimiter = "%3F"; //'?'
+ if (StringUtils.isNotBlank(logoutPageProfile)) {
+
logoutPageUrlBuilder.append(delimiter).append("profile=").append(logoutPageProfile);
+ delimiter = "%26"; // '&'
+ }
+ if (StringUtils.isNotBlank(logoutPageTopologies)) {
+
logoutPageUrlBuilder.append(delimiter).append("topologies=").append(logoutPageTopologies);
+ }
+ return logoutPageUrlBuilder.toString();
}
private String getGlobalLogoutPageUrl(GatewayConfig config) {