Skip to content

Commit 42e6f05

Browse files
OPENAM-6373
1 parent f3a3209 commit 42e6f05

File tree

1 file changed

+27
-12
lines changed

1 file changed

+27
-12
lines changed

openam-core/src/main/java/com/sun/identity/authentication/client/AuthClientUtils.java

+27-12
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
*/
2929
package com.sun.identity.authentication.client;
3030

31+
import static java.util.Arrays.asList;
32+
3133
import com.iplanet.am.util.AMClientDetector;
3234
import com.iplanet.am.util.SystemProperties;
3335
import com.iplanet.dpro.session.SessionException;
@@ -91,7 +93,6 @@
9193
import java.net.URLDecoder;
9294
import java.security.AccessController;
9395
import java.util.ArrayList;
94-
import java.util.Arrays;
9596
import java.util.Collections;
9697
import java.util.Enumeration;
9798
import java.util.HashMap;
@@ -100,6 +101,7 @@
100101
import java.util.Iterator;
101102
import java.util.List;
102103
import java.util.Map;
104+
import java.util.Objects;
103105
import java.util.ResourceBundle;
104106
import java.util.Set;
105107
import java.util.StringTokenizer;
@@ -333,7 +335,7 @@ protected AuthClientUtils() {
333335
private static List<String> getHeaderNameListForProperty(String property) {
334336
String value = SystemProperties.get(property);
335337
if (value != null) {
336-
return Arrays.asList(value.toLowerCase().split(","));
338+
return asList(value.toLowerCase().split(","));
337339
}
338340
return Collections.EMPTY_LIST;
339341
}
@@ -2529,8 +2531,9 @@ public static Map<String, Object> sendAuthRequestToOrigServer(HttpServletRequest
25292531
// If we don't do this the server might going to deny the request because of invalid domain access.
25302532
conn.setRequestProperty("Host", request.getHeader("host"));
25312533

2534+
List<Cookie> cookies = removeLocalLoadBalancingCookie(asList(request.getCookies()));
25322535
// replay cookies
2533-
strCookies = getCookiesString(request);
2536+
strCookies = getCookiesString(cookies);
25342537
if (strCookies != null) {
25352538
if (utilDebug.messageEnabled()) {
25362539
utilDebug.message("Sending cookies : " + strCookies);
@@ -2573,7 +2576,7 @@ public static Map<String, Object> sendAuthRequestToOrigServer(HttpServletRequest
25732576
if (queryParams.containsKey(entry.getKey())) {
25742577
// TODO: do we need to care about params that can be both in GET and POST?
25752578
} else {
2576-
postParams.put(entry.getKey(), new HashSet<String>(Arrays.asList(entry.getValue())));
2579+
postParams.put(entry.getKey(), new HashSet<String>(asList(entry.getValue())));
25772580
}
25782581
}
25792582

@@ -2677,6 +2680,22 @@ public static Map<String, Object> sendAuthRequestToOrigServer(HttpServletRequest
26772680
return origRequestData;
26782681
}
26792682

2683+
/**
2684+
* Filter the load balancing cookie if it points to this server to avoid potential infinite redirect loop.
2685+
*/
2686+
private static List<Cookie> removeLocalLoadBalancingCookie(final List<Cookie> cookies) {
2687+
final String lblCookieName = getlbCookieName();
2688+
final String lblCookieValue = getlbCookieValue();
2689+
final List<Cookie> filteredCookies = new ArrayList<>();
2690+
for (final Cookie cookie : cookies) {
2691+
if (!Objects.equals(cookie.getName(), lblCookieName)
2692+
&& !Objects.equals(cookie.getValue(), lblCookieValue)) {
2693+
filteredCookies.add(cookie);
2694+
}
2695+
}
2696+
return filteredCookies;
2697+
}
2698+
26802699
private static boolean isSameServer(URL url1, URL url2) {
26812700
int port1 = url1.getPort() != -1 ? url1.getPort() : url1.getDefaultPort();
26822701
int port2 = url2.getPort() != -1 ? url2.getPort() : url2.getDefaultPort();
@@ -2736,25 +2755,21 @@ private static String getFormData(Map<String, Set<String>> params) {
27362755
}
27372756

27382757
// Get cookies string from HTTP request object
2739-
private static String getCookiesString(HttpServletRequest request) {
2740-
Cookie cookies[] = request.getCookies();
2758+
private static String getCookiesString(List<Cookie> cookies) {
27412759
StringBuilder cookieStr = null;
27422760
String strCookies = null;
27432761
// Process Cookies
27442762
if (cookies != null) {
2745-
for (int nCookie = 0; nCookie < cookies.length; nCookie++) {
2763+
for (final Cookie cookie : cookies) {
27462764
if (utilDebug.messageEnabled()) {
2747-
utilDebug.message("Cookie name='{}', value='{}'",
2748-
cookies[nCookie].getName(), cookies[nCookie].getValue());
2765+
utilDebug.message("Cookie name='{}', value='{}'", cookie.getName(), cookie.getValue());
27492766
}
27502767
if (cookieStr == null) {
27512768
cookieStr = new StringBuilder();
27522769
} else {
27532770
cookieStr.append(";");
27542771
}
2755-
cookieStr.append(cookies[nCookie].getName())
2756-
.append("=")
2757-
.append(cookies[nCookie].getValue());
2772+
cookieStr.append(cookie.getName()).append("=").append(cookie.getValue());
27582773
}
27592774
}
27602775
if (cookieStr != null) {

0 commit comments

Comments
 (0)