Repository: incubator-geode Updated Branches: refs/heads/develop c1216eb18 -> 8fd8d79df
Revert "GEODE-1570: upgrade spring libraries and fix tests" This reverts commit 906c211ab1f6bacbd29a6d21d8186bb0787173f9. Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/8fd8d79d Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/8fd8d79d Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/8fd8d79d Branch: refs/heads/develop Commit: 8fd8d79dfd67b325da1497ce7ad5c78b6aa9c6b5 Parents: c1216eb Author: Jinmei Liao <[email protected]> Authored: Thu Sep 8 14:14:52 2016 -0700 Committer: Jinmei Liao <[email protected]> Committed: Thu Sep 8 14:17:46 2016 -0700 ---------------------------------------------------------------------- .../internal/web/RestInterfaceJUnitTest.java | 51 +++----- .../internal/web/RestSecurityDUnitTest.java | 128 +++++-------------- .../src/test/resources/expected_jars.txt | 2 +- geode-core/build.gradle | 2 - .../cli/shell/GfshInitFileJUnitTest.java | 18 ++- geode-pulse/build.gradle | 4 + .../security/GemFireAuthentication.java | 2 +- .../security/GemFireAuthenticationProvider.java | 1 + .../service/MemberGatewayHubService.java | 11 +- geode-pulse/src/main/webapp/Login.html | 6 +- .../webapp/WEB-INF/mvc-dispatcher-servlet.xml | 6 +- .../src/main/webapp/WEB-INF/spring-security.xml | 17 +-- .../tools/pulse/tests/PulseAuthTest.java | 5 +- .../tools/pulse/tests/PulseAutomatedTest.java | 2 +- .../rest/internal/web/util/JSONUtils.java | 105 +++++++++++++-- .../rest/internal/web/util/JsonWriter.java | 24 ++++ .../src/main/webapp/WEB-INF/geode-servlet.xml | 14 +- .../main/webapp/WEB-INF/geode-mgmt-servlet.xml | 6 +- gradle/dependency-resolution.gradle | 19 +++ gradle/dependency-versions.properties | 20 +-- 20 files changed, 251 insertions(+), 192 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestInterfaceJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestInterfaceJUnitTest.java b/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestInterfaceJUnitTest.java index 27859fc..8246671 100644 --- a/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestInterfaceJUnitTest.java +++ b/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestInterfaceJUnitTest.java @@ -16,26 +16,16 @@ */ package com.gemstone.gemfire.rest.internal.web; -import static com.gemstone.gemfire.distributed.ConfigurationProperties.*; -import static org.junit.Assert.*; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Properties; -import java.util.Set; - -import javax.annotation.Resource; - import com.fasterxml.jackson.core.JsonParser.Feature; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.gemstone.gemfire.cache.*; +import com.gemstone.gemfire.internal.AvailablePortHelper; +import com.gemstone.gemfire.internal.GemFireVersion; +import com.gemstone.gemfire.internal.util.IOUtils; +import com.gemstone.gemfire.management.internal.AgentUtil; +import com.gemstone.gemfire.pdx.*; +import com.gemstone.gemfire.test.junit.categories.IntegrationTest; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -52,22 +42,15 @@ import org.springframework.util.StringUtils; import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.RestTemplate; -import com.gemstone.gemfire.cache.Cache; -import com.gemstone.gemfire.cache.CacheFactory; -import com.gemstone.gemfire.cache.DataPolicy; -import com.gemstone.gemfire.cache.Region; -import com.gemstone.gemfire.cache.RegionFactory; -import com.gemstone.gemfire.cache.RegionService; -import com.gemstone.gemfire.internal.AvailablePortHelper; -import com.gemstone.gemfire.internal.GemFireVersion; -import com.gemstone.gemfire.internal.util.IOUtils; -import com.gemstone.gemfire.management.internal.AgentUtil; -import com.gemstone.gemfire.pdx.PdxInstance; -import com.gemstone.gemfire.pdx.PdxReader; -import com.gemstone.gemfire.pdx.PdxSerializable; -import com.gemstone.gemfire.pdx.PdxWriter; -import com.gemstone.gemfire.pdx.ReflectionBasedAutoSerializer; -import com.gemstone.gemfire.test.junit.categories.IntegrationTest; +import javax.annotation.Resource; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.text.SimpleDateFormat; +import java.util.*; + +import static com.gemstone.gemfire.distributed.ConfigurationProperties.*; +import static org.junit.Assert.*; /** * The GemFireRestInterfaceTest class is a test suite of test cases testing the contract and functionality of the @@ -77,6 +60,8 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; * * @see org.junit.Test * @see org.junit.runner.RunWith + * @see org.springframework.test.context.ContextConfiguration + * @see org.springframework.test.context.junit4.SpringJUnit4ClassRunner * @see org.springframework.web.client.RestTemplate * @see com.gemstone.gemfire.cache.Cache * @see com.gemstone.gemfire.cache.Region http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestSecurityDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestSecurityDUnitTest.java b/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestSecurityDUnitTest.java index 63ea06e..847ca76 100644 --- a/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestSecurityDUnitTest.java +++ b/geode-assembly/src/test/java/com/gemstone/gemfire/rest/internal/web/RestSecurityDUnitTest.java @@ -22,25 +22,15 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.net.MalformedURLException; import org.apache.http.HttpEntity; -import org.apache.http.HttpHost; -import org.apache.http.HttpResponse; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.AuthCache; import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpRequestBase; -import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.impl.auth.BasicScheme; -import org.apache.http.impl.client.BasicAuthCache; -import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; +import org.json.JSONArray; +import org.json.JSONException; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -51,106 +41,56 @@ import com.gemstone.gemfire.test.junit.categories.SecurityTest; @Category({ DistributedTest.class, SecurityTest.class}) public class RestSecurityDUnitTest extends AbstractSecureServerDUnitTest { - - public final static String PROTOCOL = "http"; - public final static String HOSTNAME = "localhost"; - public final static String CONTEXT = "/gemfire-api/v1"; - - - public RestSecurityDUnitTest() throws MalformedURLException { + private String endPoint = null; + public RestSecurityDUnitTest(){ int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(2); this.jmxPort = ports[0]; this.restPort = ports[1]; + endPoint = "http://localhost:"+restPort+"/gemfire-api/v1"; } - @Test public void test(){ client1.invoke(()->{ - HttpResponse response = doGet("/servers", null, null); - assertEquals(getCode(response), 200); - assertEquals(getResponseBody(response), "[ \""+"http://localhost:"+this.restPort+"\" ]"); + JSONArray response = doGet("/servers"); + assertEquals(response.length(), 1); + assertEquals(response.get(0), "http://localhost:"+this.restPort); }); } - protected HttpResponse doGet(String uri, String username, String password) throws MalformedURLException { - HttpGet getRequest = new HttpGet(CONTEXT + uri); - return doRequest(getRequest, username, password); - } - protected HttpResponse doDelete(String uri, String username, String password) throws MalformedURLException { - HttpDelete httpDelete = new HttpDelete(CONTEXT + uri); - return doRequest(httpDelete, username, password); - } - - private HttpResponse doRequest(HttpRequestBase request, String username, String password) throws MalformedURLException { - HttpHost targetHost = new HttpHost(HOSTNAME, this.restPort, PROTOCOL); - CloseableHttpClient httpclient = HttpClients.custom().build(); - HttpClientContext clientContext = HttpClientContext.create(); - // if username is null, do not put in authentication - if (username != null) { - CredentialsProvider credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials(username, password)); - httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); - AuthCache authCache = new BasicAuthCache(); - BasicScheme basicAuth = new BasicScheme(); - authCache.put(targetHost, basicAuth); - clientContext.setCredentialsProvider(credsProvider); - clientContext.setAuthCache(authCache); - } + private JSONArray doGet(String uri) { + HttpGet get = new HttpGet(endPoint + uri); + get.addHeader("Content-Type", "application/json"); + get.addHeader("Accept", "application/json"); + CloseableHttpClient httpclient = HttpClients.createDefault(); + CloseableHttpResponse response; try { - return httpclient.execute(targetHost, request, clientContext); + response = httpclient.execute(get); + HttpEntity entity = response.getEntity(); + InputStream content = entity.getContent(); + BufferedReader reader = new BufferedReader(new InputStreamReader( + content)); + String line; + StringBuffer str = new StringBuffer(); + while ((line = reader.readLine()) != null) { + str.append(line); + } + + //validate the satus code + assertEquals(response.getStatusLine().getStatusCode(), 200); + return new JSONArray(str.toString()); } catch (ClientProtocolException e) { e.printStackTrace(); - fail("Rest GET should not have thrown ClientProtocolException!"); + fail(" Rest Request should not have thrown ClientProtocolException!"); } catch (IOException e) { e.printStackTrace(); - fail("Rest GET Request should not have thrown IOException!"); + fail(" Rest Request should not have thrown IOException!"); + } catch (JSONException e) { + e.printStackTrace(); + fail(" Rest Request should not have thrown JSONException!"); } return null; } - /** - * Check the HTTP status of the response and return if it's within the OK range - * @param response The HttpResponse message received from the server - * - * @return true if the status code is a 2XX-type code (200-299), otherwise false - */ - protected boolean isOK(HttpResponse response) { - int returnCode = response.getStatusLine().getStatusCode(); - return (returnCode < 300 && returnCode >= 200); - } - - /** - * Check the HTTP status of the response and return true if a 401 - * @param response The HttpResponse message received from the server - * - * @return true if the status code is 401, otherwise false - */ - protected boolean isUnauthorized(HttpResponse response) { - int returnCode = response.getStatusLine().getStatusCode(); - return returnCode == 401; - } - - /** - * Retrieve the status code of the HttpResponse - * @param response The HttpResponse message received from the server - * - * @return a numeric value - */ - protected int getCode(HttpResponse response) { - return response.getStatusLine().getStatusCode(); - } - - protected String getResponseBody(HttpResponse response) throws IOException { - HttpEntity entity = response.getEntity(); - InputStream content = entity.getContent(); - BufferedReader reader = new BufferedReader(new InputStreamReader(content)); - String line; - StringBuilder str = new StringBuilder(); - while ((line = reader.readLine()) != null) { - str.append(line); - } - return str.toString(); - } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-assembly/src/test/resources/expected_jars.txt ---------------------------------------------------------------------- diff --git a/geode-assembly/src/test/resources/expected_jars.txt b/geode-assembly/src/test/resources/expected_jars.txt index 89ae194..939464a 100644 --- a/geode-assembly/src/test/resources/expected_jars.txt +++ b/geode-assembly/src/test/resources/expected_jars.txt @@ -1,5 +1,6 @@ activation antlr +aopalliance classmate commons-beanutils commons-collections @@ -16,7 +17,6 @@ guava jackson-annotations jackson-core jackson-databind -jackson-module-paranamer jackson-module-scala jansi javax.mail-api http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-core/build.gradle ---------------------------------------------------------------------- diff --git a/geode-core/build.gradle b/geode-core/build.gradle index 69034ca..ea1fce2 100755 --- a/geode-core/build.gradle +++ b/geode-core/build.gradle @@ -79,7 +79,6 @@ dependencies { runtime ('org.apache.logging.log4j:log4j-jul:' + project.'log4j.version') { ext.optional = true } - runtime ('org.springframework:spring-core:' + project.'springframework.version') compile ('org.eclipse.jetty:jetty-webapp:' + project.'jetty.version') { ext.optional = true } @@ -95,7 +94,6 @@ dependencies { exclude module: 'guava' exclude module: 'spring-aop' exclude module: 'spring-context-support' - exclude module: 'spring-core' ext.optional = true } compile ('org.iq80.snappy:snappy:' + project.'snappy-java.version') { http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshInitFileJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshInitFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshInitFileJUnitTest.java index 3aaab64..529336f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshInitFileJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshInitFileJUnitTest.java @@ -366,10 +366,12 @@ public class GfshInitFileJUnitTest { int expectedStatus = 0; assertNotEquals("Status <0==failure", expectedStatus, actualStatus); - // after upgrading to Spring-shell 1.2, the bad command exception is logged as well - int expectedLogCount = BANNER_LINES + INIT_FILE_CITATION_LINES + 2; + int expectedLogCount = BANNER_LINES + INIT_FILE_CITATION_LINES + 1; assertEquals("Log records written", expectedLogCount, this.junitLoggerHandler.getLog().size()); + for (LogRecord logRecord : this.junitLoggerHandler.getLog()) { + assertNull("No exceptions in log", logRecord.getThrown()); + } } @Test @@ -397,10 +399,12 @@ public class GfshInitFileJUnitTest { int expectedStatus = 0; assertNotEquals("Status <0==failure", expectedStatus, actualStatus); - // after upgrading to Spring-shell 1.2, the bad command exception is logged as well - int expectedLogCount = BANNER_LINES + INIT_FILE_CITATION_LINES + 2; + int expectedLogCount = BANNER_LINES + INIT_FILE_CITATION_LINES + 1; assertEquals("Log records written", expectedLogCount, this.junitLoggerHandler.getLog().size()); + for (LogRecord logRecord : this.junitLoggerHandler.getLog()) { + assertNull("No exceptions in log", logRecord.getThrown()); + } } @Test @@ -429,10 +433,12 @@ public class GfshInitFileJUnitTest { int expectedStatus = 0; assertNotEquals("Status <0==failure", expectedStatus, actualStatus); - // after upgrading to Spring-shell 1.2, the bad command exception is logged as well - int expectedLogCount = BANNER_LINES + INIT_FILE_CITATION_LINES + 2; + int expectedLogCount = BANNER_LINES + INIT_FILE_CITATION_LINES + 1; assertEquals("Log records written", expectedLogCount, this.junitLoggerHandler.getLog().size()); + for (LogRecord logRecord : this.junitLoggerHandler.getLog()) { + assertNull("No exceptions in log", logRecord.getThrown()); + } } /** http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-pulse/build.gradle ---------------------------------------------------------------------- diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle index 6cd3668..e53a698 100755 --- a/geode-pulse/build.gradle +++ b/geode-pulse/build.gradle @@ -26,6 +26,10 @@ sourceSets { } dependencies { + + + + compile 'org.springframework:spring-beans:' + project.'springframework.version' compile 'commons-beanutils:commons-beanutils:' + project.'commons-beanutils.version' http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java index 701607e..391ad39 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java @@ -72,7 +72,7 @@ public class GemFireAuthentication extends UsernamePasswordAuthenticationToken { String[] signature = new String[] { String.class.getCanonicalName(), String.class.getCanonicalName() }; boolean result = (Boolean) mbeanServer.invoke(name, "authorize", params, signature); if (result) { - authorities.add(new SimpleGrantedAuthority("ROLE_"+role)); + authorities.add(new SimpleGrantedAuthority(role)); } } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java index dba3135..2d7d606 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java @@ -40,6 +40,7 @@ public class GemFireAuthenticationProvider implements AuthenticationProvider { private final static PulseLogWriter LOGGER = PulseLogWriter.getLogger(); public GemFireAuthenticationProvider() { + System.out.println("here"); } @Override http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java index 3abc962..dd84b75 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java @@ -19,12 +19,6 @@ package com.vmware.gemfire.tools.pulse.internal.service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; - import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; @@ -36,6 +30,11 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + /** * Class MemberGatewayHubService * http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-pulse/src/main/webapp/Login.html ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/webapp/Login.html b/geode-pulse/src/main/webapp/Login.html index 2ca512f..f22490f 100644 --- a/geode-pulse/src/main/webapp/Login.html +++ b/geode-pulse/src/main/webapp/Login.html @@ -86,10 +86,10 @@ $(function(){ <div id="errorText" class="errorInnerIcon"> </div> </div> <div class="loginInnerBlock"> - <form method="POST" action="login" name="loginForm" id="loginForm" autocomplete="off"> - <input class="inputUserName" type="text" name="username" id="user_name" placeholder="Username" autofocus="autofocus" autocomplete="off"> + <form method="POST" action="j_spring_security_check" name="loginForm" id="loginForm" autocomplete="off"> + <input class="inputUserName" type="text" name="j_username" id="user_name" placeholder="Username" autofocus="autofocus" autocomplete="off"> <input style="display:none;" type="password" id="fool_password" autocomplete="off"> - <input class="inputPassword" type="password" name="password" id="user_password" placeholder="Password" autocomplete="off"> + <input class="inputPassword" type="password" name="j_password" id="user_password" placeholder="Password" autocomplete="off"> <!-- Locator host and port are removed for a time --> <!-- <input class="inputUserName" type="text" name="locator_host" id="locator_host" placeholder="Host"> <input class="inputUserName" type="text" name="locator_port" id="locator_port" placeholder="Port">--> http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-pulse/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml b/geode-pulse/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml index f9697a8..60edb18 100644 --- a/geode-pulse/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml +++ b/geode-pulse/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml @@ -21,11 +21,11 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context - http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc - http://www.springframework.org/schema/mvc/spring-mvc.xsd"> + http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <context:component-scan base-package="com.vmware.gemfire.tools.pulse.internal" /> http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml ---------------------------------------------------------------------- diff --git a/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml b/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml index 5341889..b14d03d 100644 --- a/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml +++ b/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml @@ -20,12 +20,13 @@ xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/security - http://www.springframework.org/schema/security/spring-security.xsd"> + http://www.springframework.org/schema/security/spring-security-3.1.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <http auto-config="true" use-expressions="true"> - <csrf disabled="true"/> <!-- Can be invoked w/o auth --> <intercept-url pattern="/Login.html" access="permitAll" /> <intercept-url pattern="/pulse/pulseVersion" access="permitAll" /> @@ -33,7 +34,8 @@ <intercept-url pattern="/pulse/pulseProductSupport" access="permitAll" /> <!-- Can be invoked w/o auth --> - <!-- Restricted urls --> + <!-- Restricted urls --> + <intercept-url pattern="/DataBrowser.html" access="hasRole('CLUSTER:READ') and hasRole('DATA:READ')" /> <intercept-url pattern="/clusterDetail.html" access="hasRole('CLUSTER:READ')" /> <intercept-url pattern="/MemberDetails.html" access="hasRole('CLUSTER:READ')" /> <intercept-url pattern="/regionDetail.html" access="hasRole('CLUSTER:READ')" /> @@ -72,16 +74,15 @@ <beans:bean id="gemAuthenticationProvider" class="com.vmware.gemfire.tools.pulse.internal.security.GemFireAuthenticationProvider"> - </beans:bean> - + </beans:bean> + <!-- Default user authentication --> <beans:beans profile="pulse.authentication.default"> <authentication-manager> <authentication-provider> <user-service> - <user name="admin" password="admin" - authorities="ROLE_CLUSTER:READ,ROLE_DATA:READ"/> + <user name="admin" password="admin" authorities="CLUSTER:READ,DATA:READ" /> </user-service> </authentication-provider> </authentication-manager> http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAuthTest.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAuthTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAuthTest.java index 9d2f992..65cd47f 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAuthTest.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAuthTest.java @@ -16,19 +16,18 @@ */ package com.vmware.gemfire.tools.pulse.tests; +import com.gemstone.gemfire.test.junit.categories.UITest; import org.junit.BeforeClass; import org.junit.FixMethodOrder; import org.junit.experimental.categories.Category; import org.junit.runners.MethodSorters; -import com.gemstone.gemfire.test.junit.categories.UITest; - @Category(UITest.class) @FixMethodOrder(MethodSorters.JVM) public class PulseAuthTest extends PulseAbstractTest { @BeforeClass public static void beforeClassSetup() throws Exception { - setUpServer("pulseUser", "12345", "pulse-auth.json"); + setUpServer("pulseUser", "12345", "/pulse-auth.json"); } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java index 3b06a89..299a343 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java @@ -48,7 +48,7 @@ public class PulseAutomatedTest extends PulseAbstractTest { @BeforeClass public static void beforeClassSetup() throws Exception { - setUpServer("pulseUser", "12345", "pulse-auth.json"); + setUpServer("pulseUser", "12345", "/pulse-auth.json"); } @Test http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JSONUtils.java ---------------------------------------------------------------------- diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JSONUtils.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JSONUtils.java index 67091a6..cb9b39d 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JSONUtils.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JSONUtils.java @@ -18,8 +18,8 @@ package com.gemstone.gemfire.rest.internal.web.util; import java.io.IOException; -import java.io.OutputStream; import java.util.Collection; +import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; @@ -28,11 +28,13 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonGenerator.Feature; import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; import com.fasterxml.jackson.databind.ObjectMapper; -import org.json.JSONException; -import org.springframework.util.Assert; - import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.query.internal.StructImpl; import com.gemstone.gemfire.internal.HeapDataOutputStream; +import org.json.JSONException; + +import org.springframework.hateoas.Link; +import org.springframework.util.Assert; /** * The JSONUtils class is a utility class for getting JSON equivalent from Java types. @@ -64,7 +66,7 @@ public abstract class JSONUtils { HeapDataOutputStream outputStream = new HeapDataOutputStream(com.gemstone.gemfire.internal.Version.CURRENT); try { JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() - .createGenerator((OutputStream)outputStream, JsonEncoding.UTF8)); + .createGenerator(outputStream, JsonEncoding.UTF8)); generator.writeStartObject(); generator.writeFieldName("functions"); JsonWriter.writeCollectionAsJson(generator, functionIds); @@ -78,12 +80,28 @@ public abstract class JSONUtils { } } + public static String formulateJsonForListCall(Map<String, Link> LinksByName, String keyName, String fieldName) { + HeapDataOutputStream outputStream = new HeapDataOutputStream(com.gemstone.gemfire.internal.Version.CURRENT); + + try { + JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() + .createGenerator(outputStream, JsonEncoding.UTF8)); + JsonWriter.writeListAsJson(generator, LinksByName, keyName, fieldName); + generator.close(); + return new String(outputStream.toByteArray()); + } catch (IOException e) { + throw new RuntimeException(e.getMessage()); + } finally { + outputStream.close(); + } + } + public static String formulateJsonForListKeys(Object[] keys, String fieldName) { HeapDataOutputStream outputStream = new HeapDataOutputStream(com.gemstone.gemfire.internal.Version.CURRENT); try { JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() - .createGenerator((OutputStream)outputStream, JsonEncoding.UTF8)); + .createGenerator(outputStream, JsonEncoding.UTF8)); generator.writeStartObject(); generator.writeFieldName(fieldName); JsonWriter.writeObjectArrayAsJson(generator, keys, null); @@ -102,7 +120,7 @@ public abstract class JSONUtils { try { JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() - .createGenerator((OutputStream)outputStream, JsonEncoding.UTF8)); + .createGenerator(outputStream, JsonEncoding.UTF8)); generator.writeStartObject(); generator.writeFieldName(fieldName); JsonWriter.writeRegionSetAsJson(generator, regions); @@ -116,11 +134,46 @@ public abstract class JSONUtils { } } + public static String formulateJsonForGetOnKey(Object value) throws JSONException { + HeapDataOutputStream outputStream = new HeapDataOutputStream(com.gemstone.gemfire.internal.Version.CURRENT); + + try { + JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() + .createGenerator(outputStream, JsonEncoding.UTF8)); + JsonWriter.writeValueAsJson(generator, value, "GET_ON_KEY_RESPONSE"); + generator.close(); + return new String(outputStream.toByteArray()); + } catch (IOException e) { + throw new RuntimeException(e.getMessage()); + } finally { + outputStream.close(); + } + } + + public static String formulateJsonForGetOnMultipleKey(Collection<Object> collection, String regionName) throws JSONException { + HeapDataOutputStream outputStream = new HeapDataOutputStream(com.gemstone.gemfire.internal.Version.CURRENT); + + try { + JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() + .createGenerator(outputStream, JsonEncoding.UTF8)); + generator.writeStartObject(); + generator.writeFieldName(regionName); + JsonWriter.writeCollectionAsJson(generator, collection); + generator.writeEndObject(); + generator.close(); + return new String(outputStream.toByteArray()); + } catch (IOException e) { + throw new RuntimeException(e.getMessage()); + } finally { + outputStream.close(); + } + } + public static String formulateJsonForListQueriesCall(Region<String, String> queryRegion) { HeapDataOutputStream outputStream = new HeapDataOutputStream(com.gemstone.gemfire.internal.Version.CURRENT); try { JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() - .createGenerator((OutputStream)outputStream, JsonEncoding.UTF8)); + .createGenerator(outputStream, JsonEncoding.UTF8)); JsonWriter.writeQueryListAsJson(generator, "queries", queryRegion); generator.close(); return new String(outputStream.toByteArray()); @@ -136,7 +189,7 @@ public abstract class JSONUtils { try { JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() - .createGenerator((OutputStream)outputStream, JsonEncoding.UTF8)); + .createGenerator(outputStream, JsonEncoding.UTF8)); JsonWriter.writeQueryAsJson(generator, queryId, oql); generator.close(); return new String(outputStream.toByteArray()); @@ -152,7 +205,7 @@ public abstract class JSONUtils { try { JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() - .createGenerator((OutputStream)outputStream, JsonEncoding.UTF8)); + .createGenerator(outputStream, JsonEncoding.UTF8)); JsonWriter.writeCollectionAsJson(generator, collection); generator.close(); return new String(outputStream.toByteArray()); @@ -163,4 +216,36 @@ public abstract class JSONUtils { } } + public static String convertMapToJson(Map<?, ?> map) throws JSONException { + HeapDataOutputStream outputStream = new HeapDataOutputStream(com.gemstone.gemfire.internal.Version.CURRENT); + + try { + JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() + .createGenerator(outputStream, JsonEncoding.UTF8)); + JsonWriter.writeMapAsJson(generator, map, null); + generator.close(); + return new String(outputStream.toByteArray()); + } catch (IOException e) { + throw new RuntimeException(e.getMessage()); + } finally { + outputStream.close(); + } + } + + public static String convertStructToJson(StructImpl structSet) throws JSONException { + HeapDataOutputStream outputStream = new HeapDataOutputStream(com.gemstone.gemfire.internal.Version.CURRENT); + + try { + JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory() + .createGenerator(outputStream, JsonEncoding.UTF8)); + JsonWriter.writeStructAsJson(generator, structSet); + generator.close(); + return new String(outputStream.toByteArray()); + } catch (IOException e) { + throw new RuntimeException(e.getMessage()); + } finally { + outputStream.close(); + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JsonWriter.java ---------------------------------------------------------------------- diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JsonWriter.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JsonWriter.java index b16dfce..a0ff676 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JsonWriter.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JsonWriter.java @@ -109,6 +109,30 @@ public class JsonWriter { generator.writeEndObject(); } + + public static void writeListAsJson(JsonGenerator generator, Map map, String name, String fieldName) throws JsonGenerationException, IOException{ + + generator.writeStartObject(); + generator.writeFieldName(name); + + //introspect the Map and write its value into desired format + generator.writeStartArray(); + Iterator iter = (Iterator) map.entrySet().iterator(); + while(iter.hasNext()) { + + Map.Entry entry = (Map.Entry) iter.next(); + generator.writeStartObject(); + //Iterate over Map and write key-value + generator.writeFieldName(fieldName); + generator.writeString(entry.getKey().toString()); + + writeValueAsJson(generator, entry.getValue(), name); + generator.writeEndObject(); + } + + generator.writeEndArray(); + generator.writeEndObject(); + } public static void writeCollectionAsJson(JsonGenerator generator, /*List*/ Collection<?> coll) throws JsonGenerationException, IOException { http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-web-api/src/main/webapp/WEB-INF/geode-servlet.xml ---------------------------------------------------------------------- diff --git a/geode-web-api/src/main/webapp/WEB-INF/geode-servlet.xml b/geode-web-api/src/main/webapp/WEB-INF/geode-servlet.xml index 7e2c64f..e96acb0 100644 --- a/geode-web-api/src/main/webapp/WEB-INF/geode-servlet.xml +++ b/geode-web-api/src/main/webapp/WEB-INF/geode-servlet.xml @@ -18,18 +18,16 @@ limitations under the License. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" + xmlns:oxm="http://www.springframework.org/schema/oxm" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" - http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/context - http://www.springframework.org/schema/context/spring-context.xsd - http://www.springframework.org/schema/mvc - http://www.springframework.org/schema/mvc/spring-mvc.xsd - http://www.springframework.org/schema/util - http://www.springframework.org/schema/util/spring-util.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd + http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd + http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.2.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <context:annotation-config /> <context:component-scan base-package="com.gemstone.gemfire.rest.internal.web"/> http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/geode-web/src/main/webapp/WEB-INF/geode-mgmt-servlet.xml ---------------------------------------------------------------------- diff --git a/geode-web/src/main/webapp/WEB-INF/geode-mgmt-servlet.xml b/geode-web/src/main/webapp/WEB-INF/geode-mgmt-servlet.xml index 83550e7..ce65933 100644 --- a/geode-web/src/main/webapp/WEB-INF/geode-mgmt-servlet.xml +++ b/geode-web/src/main/webapp/WEB-INF/geode-mgmt-servlet.xml @@ -21,11 +21,11 @@ limitations under the License. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context - http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc - http://www.springframework.org/schema/mvc/spring-mvc.xsd"> + http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <context:component-scan base-package="com.gemstone.gemfire.management.internal.web"/> http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/gradle/dependency-resolution.gradle ---------------------------------------------------------------------- diff --git a/gradle/dependency-resolution.gradle b/gradle/dependency-resolution.gradle index 1b36bfa..91d1755 100644 --- a/gradle/dependency-resolution.gradle +++ b/gradle/dependency-resolution.gradle @@ -15,6 +15,25 @@ * limitations under the License. */ subprojects { + configurations.all { + resolutionStrategy { + //failOnVersionConflict() + + //Force certain versions of transitive dependencies + //These are forced to match our old non-transitive configuration + //These force statements should be removed and tested with the automatically + //resolved version + force 'org.springframework:spring-context-support:' + project.'springframework.version' + force 'org.springframework:spring-context-support:' + project.'springframework.version' + force 'org.springframework:spring-context:' + project.'springframework.version' + force 'org.springframework:spring-web:' + project.'springframework.version' + force 'org.springframework:spring-tx:' + project.'springframework.version' + force 'org.springframework:spring-webmvc:' + project.'springframework.version' + force 'org.springframework:spring-core:' + project.'springframework.version' + force 'jline:jline:' + project.'jline.version' + } + } + //Task to dump all depencies of all projects, in a way //that can be diffed before and after dependency changes task dumpDependencies() << { http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fd8d79d/gradle/dependency-versions.properties ---------------------------------------------------------------------- diff --git a/gradle/dependency-versions.properties b/gradle/dependency-versions.properties index 9babe3e..a19520c 100644 --- a/gradle/dependency-versions.properties +++ b/gradle/dependency-versions.properties @@ -50,8 +50,8 @@ httpclient.version = 4.5.1 httpcore.version = 4.4.3 httpunit.version = 1.7.2 hsqldb.version = 2.0.0 -jackson.version = 2.8.2 -jackson-module-scala_2.10.version = 2.8.2 +jackson.version = 2.2.0 +jackson-module-scala_2.10.version = 2.1.5 jansi.version = 1.8 javassist.version = 3.20.0-GA javax.ejb-api.version = 3.0 @@ -88,15 +88,15 @@ powermock.version = 1.6.4 quartz.version = 2.2.1 scala.version = 2.10.0 selenium.version=2.53.1 -shiro.version=1.3.1 -slf4j-api.version = 1.7.21 +shiro.version=1.2.4 +slf4j-api.version = 1.7.7 snappy-java.version=0.4 -spring-hateos.version = 0.21.0.RELEASE -spring-shell.version = 1.2.0.RELEASE -spring-ldap-core.version = 2.1.0.RELEASE -spring-security.version = 4.1.3.RELEASE -spring-tx.version = 4.3.2.RELEASE -springframework.version = 4.3.2.RELEASE +spring-hateos.version = 0.16.0.RELEASE +spring-shell.version = 1.1.0.RELEASE +spring-ldap-core.version = 1.3.2.RELEASE +spring-security.version = 3.1.7.RELEASE +spring-tx.version = 3.2.12.RELEASE +springframework.version = 4.2.4.RELEASE stephenc-findbugs.version = 1.3.9-1 spymemcached.version = 2.9.0 swagger.version = 1.3.2
