diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java index b8e4a62..1904de8 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java @@ -138,7 +138,7 @@ public final class CommonUtils { */ public static final String constructRedirectUrl(final String casServerLoginUrl, final String serviceParameterName, final String serviceUrl, final boolean renew, final boolean gateway) { try { - return casServerLoginUrl + "?" + serviceParameterName + "=" + return casServerLoginUrl + (casServerLoginUrl.indexOf("?") != -1 ? "&" : "?") + serviceParameterName + "=" + URLEncoder.encode(serviceUrl, "UTF-8") + (renew ? "&renew=true" : "") + (gateway ? "&gateway=true" : ""); diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java index a75abc2..99cb6e2 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java @@ -19,6 +19,22 @@ import java.util.Collection; */ public final class CommonUtilsTests extends TestCase { + public void testRedirectUrlWithParam() { + final String loginUrl = "http://localhost:8080/login?myName=foo"; + final String fullyConstructedUrl = CommonUtils.constructRedirectUrl(loginUrl, "foo", "foo", false, false); + + int count = 0; + final char[] chars = fullyConstructedUrl.toCharArray(); + + for (int i = 0; i < chars.length; i++) { + if (chars[i] == '?') { + count ++; + } + } + + assertEquals(1, count); + } + public void testAssertNotNull() { final String CONST_MESSAGE = "test"; CommonUtils.assertNotNull(new Object(), CONST_MESSAGE);