Browse Source

Make MIN_SPRING_VERSION Dynamic

Fixes: gh-5065
Rob Winch 7 năm trước cách đây
mục cha
commit
efaf2b080f

+ 49 - 0
buildSrc/src/main/groovy/versions/VersionsResourceTasks.groovy

@@ -0,0 +1,49 @@
+/*
+ * Copyright 2002-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package versions
+
+import org.gradle.api.DefaultTask
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.TaskAction
+
+/**
+ * @author Rob Winch
+ */
+class VersionsResourceTasks extends DefaultTask {
+	@OutputFile
+	File versionsFile;
+
+	@Input
+	Closure<Map<String,String>> versions;
+
+	void setVersions(Map<String,String> versions) {
+		this.versions = { versions };
+	}
+
+	void setVersions(Closure<Map<String,String>> versions) {
+		this.versions = versions
+	}
+
+	@TaskAction
+	void generateVersions() {
+		versionsFile.parentFile.mkdirs()
+		versionsFile.createNewFile()
+		Properties versionsProperties = new Properties()
+		versionsProperties.putAll(versions.call())
+		versionsProperties.store(versionsFile.newWriter(), null)
+	}
+}

+ 11 - 0
core/spring-security-core.gradle

@@ -34,6 +34,17 @@ dependencies {
 	testRuntime 'org.hsqldb:hsqldb'
 }
 
+task springVersion(type: versions.VersionsResourceTasks) {
+	versionsFile = file("${buildDir}/versions/spring-security.versions")
+	versions = { project.dependencyManagement.managedVersions }
+}
+
+tasks.processResources {
+	into('META-INF') {
+		from project.tasks.springVersion.outputs
+	}
+}
+
 tasks.jar.from { includeProject.sourceSets.main.output }
 
 tasks.sourcesJar.from {includeProject.sourceSets.main.java}

+ 21 - 1
core/src/main/java/org/springframework/security/core/SpringSecurityCoreVersion.java

@@ -20,6 +20,9 @@ import org.apache.commons.logging.LogFactory;
 
 import org.springframework.core.SpringVersion;
 
+import java.io.IOException;
+import java.util.Properties;
+
 /**
  * Internal class used for checking version compatibility in a deployed application.
  *
@@ -40,7 +43,7 @@ public class SpringSecurityCoreVersion {
 	 */
 	public static final long SERIAL_VERSION_UID = 510L;
 
-	static final String MIN_SPRING_VERSION = "5.0.4.RELEASE";
+	static final String MIN_SPRING_VERSION = getSpringVersion();
 
 	static {
 		performVersionChecks();
@@ -64,6 +67,9 @@ public class SpringSecurityCoreVersion {
 	 * @param minSpringVersion
 	 */
 	private static void performVersionChecks(String minSpringVersion) {
+		if (minSpringVersion == null) {
+			return;
+		}
 		// Check Spring Compatibility
 		String springVersion = SpringVersion.getVersion();
 		String version = getVersion();
@@ -95,4 +101,18 @@ public class SpringSecurityCoreVersion {
 		}
 		return Boolean.getBoolean(DISABLE_CHECKS);
 	}
+
+	/**
+	 * Loads the spring version or null if it cannot be found.
+	 * @return
+	 */
+	private static String getSpringVersion() {
+		Properties properties = new Properties();
+		try {
+			properties.load(SpringSecurityCoreVersion.class.getClassLoader().getResourceAsStream("META-INF/spring-security.versions"));
+		} catch (IOException e) {
+			return null;
+		}
+		return properties.getProperty("org.springframework:spring-core");
+	}
 }