diff --git a/src/main/java/org/owasp/webgoat/plugins/Plugin.java b/src/main/java/org/owasp/webgoat/plugins/Plugin.java index 0e5fea5ff..18aa5ff75 100644 --- a/src/main/java/org/owasp/webgoat/plugins/Plugin.java +++ b/src/main/java/org/owasp/webgoat/plugins/Plugin.java @@ -124,9 +124,12 @@ public class Plugin { } } - - public Class getLesson() { - return lesson; + public AbstractLesson getLesson() { + try { + return lesson.newInstance(); + } catch (IllegalAccessException | InstantiationException e) { + throw new PluginLoadingFailure("Unable to instantiate the lesson " + lesson.getName(), e); + } } public Optional getLessonSolution(String language) { diff --git a/src/main/java/org/owasp/webgoat/plugins/PluginClassLoader.java b/src/main/java/org/owasp/webgoat/plugins/PluginClassLoader.java index 98b101b8b..6af81a6d3 100644 --- a/src/main/java/org/owasp/webgoat/plugins/PluginClassLoader.java +++ b/src/main/java/org/owasp/webgoat/plugins/PluginClassLoader.java @@ -1,15 +1,21 @@ package org.owasp.webgoat.plugins; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class PluginClassLoader extends ClassLoader { + private final Logger logger = LoggerFactory.getLogger(Plugin.class); private final byte[] classFile; - public PluginClassLoader(ClassLoader parent, byte[] classFile) { + public PluginClassLoader(ClassLoader parent, String nameOfClass, byte[] classFile) { super(parent); + logger.debug("Creating class loader for {}", nameOfClass); this.classFile = classFile; } public Class findClass(String name) { + logger.debug("Finding class " + name); return defineClass(name, classFile, 0, classFile.length); } diff --git a/src/main/java/org/owasp/webgoat/session/Course.java b/src/main/java/org/owasp/webgoat/session/Course.java index 99e37742f..b5644ac7b 100644 --- a/src/main/java/org/owasp/webgoat/session/Course.java +++ b/src/main/java/org/owasp/webgoat/session/Course.java @@ -304,12 +304,8 @@ public class Course { List plugins = new PluginsLoader(Paths.get(pluginPath), Paths.get(targetPath)).loadPlugins(true); for (Plugin plugin : plugins) { try { - Class c = plugin.getLesson(); - Object o = c.newInstance(); - - AbstractLesson lesson = (AbstractLesson) o; + AbstractLesson lesson = plugin.getLesson(); lesson.setWebgoatContext(webgoatContext); - lesson.update(properties); if (!lesson.getHidden()) {