First attempt to remove JSP and move to Thymeleaf and update to Spring Boot. The Thymeleaf templates can be loaded as snippets which makes it more easy to move away from ECS and create normal HTML pages for a lesson.
This commit is contained in:
@ -2,7 +2,6 @@ package org.owasp.webgoat.plugins;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.catalina.loader.WebappClassLoader;
|
||||
import org.owasp.webgoat.lessons.AbstractLesson;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@ -28,6 +27,7 @@ public class Plugin {
|
||||
|
||||
private static final String NAME_LESSON_SOLUTION_DIRECTORY = "lessonSolutions";
|
||||
private static final String NAME_LESSON_PLANS_DIRECTORY = "lessonPlans";
|
||||
private final PluginClassLoader classLoader;
|
||||
|
||||
private Class<AbstractLesson> lesson;
|
||||
private Map<String, File> solutionLanguageFiles = new HashMap<>();
|
||||
@ -35,6 +35,10 @@ public class Plugin {
|
||||
private List<File> pluginFiles = Lists.newArrayList();
|
||||
private File lessonSourceFile;
|
||||
|
||||
public Plugin(PluginClassLoader classLoader) {
|
||||
this.classLoader = classLoader;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>findLesson.</p>
|
||||
*
|
||||
@ -49,10 +53,10 @@ public class Plugin {
|
||||
private void findLesson(String name) {
|
||||
String realClassName = StringUtils.trimLeadingCharacter(name, '/').replaceAll("/", ".").replaceAll(".class", "");
|
||||
//TODO should be passed in (refactor)
|
||||
WebappClassLoader cl = (WebappClassLoader) Thread.currentThread().getContextClassLoader();
|
||||
//TomcatEmbeddedWebappClassLoader cl = (TomcatEmbeddedWebappClassLoader) Thread.currentThread().getContextClassLoader();
|
||||
|
||||
try {
|
||||
Class clazz = cl.loadClass(realClassName, true);
|
||||
Class clazz = classLoader.loadClass(realClassName);
|
||||
|
||||
if (AbstractLesson.class.isAssignableFrom(clazz)) {
|
||||
this.lesson = clazz;
|
||||
|
@ -0,0 +1,16 @@
|
||||
package org.owasp.webgoat.plugins;
|
||||
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
|
||||
public class PluginClassLoader extends URLClassLoader {
|
||||
|
||||
public PluginClassLoader(ClassLoader parent) {
|
||||
super(new URL[] {}, parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addURL(URL url) {
|
||||
super.addURL(url);
|
||||
}
|
||||
}
|
@ -34,9 +34,9 @@ public class PluginExtractor {
|
||||
* @return a {@link org.owasp.webgoat.plugins.Plugin} object.
|
||||
* @throws java.io.IOException if any.
|
||||
*/
|
||||
public Plugin extractJarFile(final File archive, final File targetDirectory) throws IOException {
|
||||
public Plugin extractJarFile(final File archive, final File targetDirectory, PluginClassLoader cl) throws IOException {
|
||||
ZipFile zipFile = new ZipFile(archive);
|
||||
Plugin plugin = new Plugin();
|
||||
Plugin plugin = new Plugin(cl);
|
||||
try {
|
||||
Enumeration<? extends ZipEntry> entries = zipFile.entries();
|
||||
while (entries.hasMoreElements()) {
|
||||
|
@ -1,7 +1,6 @@
|
||||
package org.owasp.webgoat.plugins;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.catalina.loader.WebappClassLoader;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.owasp.webgoat.util.LabelProvider;
|
||||
import org.slf4j.Logger;
|
||||
@ -48,24 +47,25 @@ public class PluginsLoader {
|
||||
this.pluginTarget = Objects.requireNonNull(pluginTarget, "plugin target cannot be null");
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy jars to the lib directory
|
||||
*/
|
||||
public void copyJars() {
|
||||
try {
|
||||
if (!alreadyLoaded) {
|
||||
WebappClassLoader cl = (WebappClassLoader) Thread.currentThread().getContextClassLoader();
|
||||
cl.setAntiJARLocking(true);
|
||||
List<URL> jars = listJars();
|
||||
for (URL jar : jars) {
|
||||
cl.addRepository(jar.toString());
|
||||
}
|
||||
alreadyLoaded = true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("Copying plugins failed", e);
|
||||
}
|
||||
}
|
||||
// /**
|
||||
// * Copy jars to the lib directory
|
||||
// */
|
||||
// public void copyJars() {
|
||||
// try {
|
||||
// if (!alreadyLoaded) {
|
||||
// WebappClassLoader cl = (WebappClassLoader) Thread.currentThread().getContextClassLoader();
|
||||
// // cl.setAntiJARLocking(true);
|
||||
// List<URL> jars = listJars();
|
||||
// for (URL jar : jars) {
|
||||
// // cl.setResources();
|
||||
// // cl.addRepository(jar.toString());
|
||||
// }
|
||||
// alreadyLoaded = true;
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// logger.error("Copying plugins failed", e);
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* <p>loadPlugins.</p>
|
||||
@ -73,7 +73,7 @@ public class PluginsLoader {
|
||||
* @return a {@link java.util.List} object.
|
||||
*/
|
||||
public List<Plugin> loadPlugins() {
|
||||
copyJars();
|
||||
// copyJars();
|
||||
List<Plugin> plugins = Lists.newArrayList();
|
||||
|
||||
try {
|
||||
@ -134,13 +134,17 @@ public class PluginsLoader {
|
||||
|
||||
private List<Callable<Plugin>> extractJars(List<URL> jars) {
|
||||
List<Callable<Plugin>> extractorCallables = Lists.newArrayList();
|
||||
ClassLoader parentClassLoader = PluginClassLoader.class.getClassLoader();
|
||||
final PluginClassLoader classLoader = new PluginClassLoader(parentClassLoader);
|
||||
|
||||
for (final URL jar : jars) {
|
||||
classLoader.addURL(jar);
|
||||
extractorCallables.add(new Callable<Plugin>() {
|
||||
|
||||
@Override
|
||||
public Plugin call() throws Exception {
|
||||
PluginExtractor extractor = new PluginExtractor();
|
||||
return extractor.extractJarFile(ResourceUtils.getFile(jar), pluginTarget.toFile());
|
||||
return extractor.extractJarFile(ResourceUtils.getFile(jar), pluginTarget.toFile(), classLoader);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user