).
It sounds like you should include jboss-deployment-structure.xml in your
example and add dependency on module org.keycloak.keycloak-services, and
possibly some other keycloak modules as well.
On Mon, Sep 25, 2017 at 11:23 AM, Christian Kayssner <
Christian.Kayssner(a)muthpartners.de> wrote:
Hello,
I have an problem in the deployment process.
For an higher security context I have to intervene in the original
username/password functionality.
I searched and found the original class 'org.keycloak.authentication.
authenticators.browser.UsernamePasswordFormFactory'.
For this mail, I reduced the derivation and manipulation to a minimum and
choose the 'secret-example' for deployment.
The derivated factory class get the name
'org.example.derivations.MyUsernamePasswordFormFactory'
and would be activated next to the existing factory in the file
'org.keycloak.examples.authenticator.SecretQuestionAuthenticatorFactory'.
I take the secret-question example because it closest to mine.
But when I deploy the secret-example I get the 'NoClassDefFoundError' (see
below).
I checked the java visibilities (nothing private, protected or final).
The core class reside in the artefactId 'keycloak-services', and the
secret-example pom has a direct dependency entry.
Eclipse (the maven-plugin) is satisfied.
Therefore I found no reason for this exception.
Does anyone have an idea why the *deployment* fails (and which party
(Maven, Wildfly or Keycloak) is not amused)?
Have I missed note something?
Or is a derivation, per se, not desired??
If someone wants to retrace, he/she needs:
* a current 64bit linux with approximately 420MB free space with a
directory of your choice,
* with a running maven environment
* and *without* running wildfly/keycloak system.
Next, you:
* download the demo version in your/this direcory
wget -r
https://downloads.jboss.org/
keycloak/3.2.1.Final/keycloak-demo-3.2.1.Final.tar.gz
* expand this archive,
tar -xzf keycloak-demo-3.2.1.Final.tar.gz
* save the follow patch (all content between
<SecretExamplePatchFile> and </SecretExamplePatchFile>) file and execute it,
patch -p 0 < NameOfYourSavedPatchFile
* start the example server and save the terminal-log,
keycloak-demo-3.2.1.Final/keycloak/bin/standalone.sh |
tee keycloak-demo-3.2.1.Final.log
* open a new terminal,
* go to the secret example direcory and
cd keycloak-demo-3.2.1.Final/examples/providers/
authenticator
* deploy it.
mvn clean install wildfly:deploy
* will see the 'NoClassDefFoundError' exception!
Best regards
Christian Kayssner
--
G. Muth Partners GmbH
Borsigstraße 32
D - 65205 Wiesbaden
HRB 10196 Amtsgericht Wiesbaden
Geschäftsführer: Klaus Gockel / Oliver Mächold
Tel. : +49(0)6122/5981-0
FAX. : +49(0)6122/5981-50
eMail: christian.kayssner(a)muthpartners.de
www :
www.muthpartners.de
--
<stack trace>
:
:
:
[0m [0m17:39:08,074 INFO [org.jboss.as.repository]
(management-handler-thread - 4) WFLYDR0001: Content added at location
/path/to/your/own/playground/keycloak-demo-3.2.1.Final/
keycloak/standalone/data/content/e4/95f32235bb131df52f479a09827186
a3265788/content
[0m [0m17:39:08,082 INFO [org.jboss.as.server.deployment] (MSC service
thread 1-2) WFLYSRV0027: Starting deployment of
"authenticator-required-action-example.jar"
(runtime-name: "authenticator-required-action-example.jar")
[0m [0m17:39:08,322 INFO [org.keycloak.subsystem.server.extension.
KeycloakProviderDeploymentProcessor] (MSC service thread 1-1) Deploying
Keycloak provider: authenticator-required-action-example.jar
[0m [33m17:39:08,335 WARN [org.jboss.modules] (MSC service thread 1-1)
Failed to define class org.example.derivations.MyUsernamePasswordFormFactory
in Module "deployment.authenticator-required-action-example.jar:main"
from Service Module Loader: java.lang.NoClassDefFoundError: Failed to
link org/example/derivations/MyUsernamePasswordFormFactory (Module
"deployment.authenticator-required-action-example.jar:main" from Service
Module Loader): org/keycloak/authentication/authenticators/browser/
UsernamePasswordFormFactory
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(
NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(
DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.jboss.modules.ModuleClassLoader.defineClass(
ModuleClassLoader.java:446)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(
ModuleClassLoader.java:274)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(
ModuleClassLoader.java:78)
at org.jboss.modules.Module.loadModuleClass(Module.java:605)
at org.jboss.modules.ModuleClassLoader.findClass(
ModuleClassLoader.java:190)
at org.jboss.modules.ConcurrentClassLoader.
performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(
ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(
ConcurrentClassLoader.java:93)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at java.util.ServiceLoader$LazyIterator.nextService(
ServiceLoader.java:370)
at java.util.ServiceLoader$LazyIterator.next(
ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at org.keycloak.provider.DefaultProviderLoader.load(
DefaultProviderLoader.java:47)
at org.keycloak.provider.ProviderManager.load(
ProviderManager.java:93)
at org.keycloak.services.DefaultKeycloakSessionFactory.
loadFactories(DefaultKeycloakSessionFactory.java:208)
at org.keycloak.services.DefaultKeycloakSessionFactory.deploy(
DefaultKeycloakSessionFactory.java:114)
at org.keycloak.provider.ProviderManagerRegistry.deploy(
ProviderManagerRegistry.java:42)
at org.keycloak.subsystem.server.extension.
KeycloakProviderDeploymentProcessor.deploy(KeycloakProviderDeploymentProc
essor.java:54)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.
start(DeploymentUnitPhaseService.java:147)
at org.jboss.msc.service.ServiceControllerImpl$
StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(
ServiceControllerImpl.java:1881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(
ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(
ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
[0m [31m17:39:08,336 ERROR [org.jboss.msc.service.fail] (MSC service
thread 1-1) MSC000001: Failed to start service jboss.deployment.unit."
authenticator-required-action-example.jar".POST_MODULE:
org.jboss.msc.service.StartException in service jboss.deployment.unit."
authenticator-required-action-example.jar".POST_MODULE: WFLYSRV0153:
Failed to process phase POST_MODULE of deployment "authenticator-required-
action-example.jar"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.
start(DeploymentUnitPhaseService.java:154)
at org.jboss.msc.service.ServiceControllerImpl$
StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(
ServiceControllerImpl.java:1881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(
ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(
ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: Failed to link
org/example/derivations/MyUsernamePasswordFormFactory (Module
"deployment.authenticator-required-action-example.jar:main" from Service
Module Loader): org/keycloak/authentication/authenticators/browser/
UsernamePasswordFormFactory
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(
NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(
DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.jboss.modules.ModuleClassLoader.defineClass(
ModuleClassLoader.java:446)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(
ModuleClassLoader.java:274)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(
ModuleClassLoader.java:78)
at org.jboss.modules.Module.loadModuleClass(Module.java:605)
at org.jboss.modules.ModuleClassLoader.findClass(
ModuleClassLoader.java:190)
at org.jboss.modules.ConcurrentClassLoader.
performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(
ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(
ConcurrentClassLoader.java:93)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at java.util.ServiceLoader$LazyIterator.nextService(
ServiceLoader.java:370)
at java.util.ServiceLoader$LazyIterator.next(
ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at org.keycloak.provider.DefaultProviderLoader.load(
DefaultProviderLoader.java:47)
at org.keycloak.provider.ProviderManager.load(
ProviderManager.java:93)
at org.keycloak.services.DefaultKeycloakSessionFactory.
loadFactories(DefaultKeycloakSessionFactory.java:208)
at org.keycloak.services.DefaultKeycloakSessionFactory.deploy(
DefaultKeycloakSessionFactory.java:114)
at org.keycloak.provider.ProviderManagerRegistry.deploy(
ProviderManagerRegistry.java:42)
at org.keycloak.subsystem.server.extension.
KeycloakProviderDeploymentProcessor.deploy(KeycloakProviderDeploymentProc
essor.java:54)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.
start(DeploymentUnitPhaseService.java:147)
... 5 more
[0m [31m17:39:08,339 ERROR [org.jboss.as.controller.management-operation]
(management-handler-thread - 4) WFLYCTL0013: Operation ("add") failed -
address: ([("deployment" =>
"authenticator-required-action-example.jar")])
- failure description: {"WFLYCTL0080: Failed services" =>
{"jboss.deployment.unit.\"authenticator-required-action-example.jar\".POST_MODULE"
=> "org.jboss.msc.service.StartException in service
jboss.deployment.unit.\"authenticator-required-action-example.jar\".POST_MODULE:
WFLYSRV0153: Failed to process phase POST_MODULE of deployment
\"authenticator-required-action-example.jar\"
Caused by: java.lang.NoClassDefFoundError: Failed to link
org/example/derivations/MyUsernamePasswordFormFactory (Module
\"deployment.authenticator-required-action-example.jar:main\" from
Service Module Loader): org/keycloak/authentication/
authenticators/browser/UsernamePasswordFormFactory"}}
[0m [31m17:39:08,341 ERROR [org.jboss.as.server]
(management-handler-thread - 4) WFLYSRV0021: Deploy of deployment
"authenticator-required-action-example.jar" was rolled back with the
following failure message:
{"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"
authenticator-required-action-example.jar\".POST_MODULE" =>
"org.jboss.msc.service.StartException in service jboss.deployment.unit.\"
authenticator-required-action-example.jar\".POST_MODULE: WFLYSRV0153:
Failed to process phase POST_MODULE of deployment \"authenticator-required-
action-example.jar\"
Caused by: java.lang.NoClassDefFoundError: Failed to link
org/example/derivations/MyUsernamePasswordFormFactory (Module
\"deployment.authenticator-required-action-example.jar:main\" from
Service Module Loader): org/keycloak/authentication/
authenticators/browser/UsernamePasswordFormFactory"}}
[0m [0m17:39:08,356 INFO [org.jboss.as.server.deployment] (MSC service
thread 1-5) WFLYSRV0028: Stopped deployment authenticator-required-action-example.jar
(runtime-name: authenticator-required-action-example.jar) in 14ms
[0m [0m17:39:08,357 INFO [org.jboss.as.controller]
(management-handler-thread - 4) WFLYCTL0183: Service status report
WFLYCTL0186: Services which failed to start: service
jboss.deployment.unit."authenticator-required-action-
example.jar".POST_MODULE
[0m
</stack trace>
--
<SecretExamplePatchFile>
diff -Naur keycloak-demo-3.2.1.Final/examples/providers/
authenticator/src/main/java/org/example/derivations/
MyUsernamePasswordFormFactory.java keycloak-demo-3.2.1.Final-
modified/examples/providers/authenticator/src/main/java/
org/example/derivations/MyUsernamePasswordFormFactory.java
--- keycloak-demo-3.2.1.Final/examples/providers/
authenticator/src/main/java/org/example/derivations/
MyUsernamePasswordFormFactory.java 1970-01-01 00:00:00.000000000 +0000
+++ keycloak-demo-3.2.1.Final-modified/examples/providers/
authenticator/src/main/java/org/example/derivations/
MyUsernamePasswordFormFactory.java 2017-09-20 11:37:09.425674263
+0000
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * 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 org.example.derivations;
+
+import org.keycloak.authentication.authenticators.browser.
UsernamePasswordFormFactory;
+
+/**
+ */
+public//
+class MyUsernamePasswordFormFactory//
+ extends UsernamePasswordFormFactory//
+{
+ public//
+ static//
+ final//
+ String PROVIDER_ID = "my-auth-username-password-form";
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public//
+ String getId()//
+ {
+ return MyUsernamePasswordFormFactory.PROVIDER_ID;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @return The heading for the (browser) page to explain the
necessary inputs.
+ */
+ @Override
+ public//
+ String getDisplayType()//
+ {
+ return "My Username Password Form";
+ }
+}
diff -Naur keycloak-demo-3.2.1.Final/examples/providers/
authenticator/src/main/resources/META-INF/services/
org.keycloak.authentication.AuthenticatorFactory
keycloak-demo-3.2.1.Final-modified/examples/providers/
authenticator/src/main/resources/META-INF/services/
org.keycloak.authentication.AuthenticatorFactory
--- keycloak-demo-3.2.1.Final/examples/providers/authenticator/src/main/
resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory
2017-07-21 11:31:26.000000000 +0000
+++ keycloak-demo-3.2.1.Final-modified/examples/providers/
authenticator/src/main/resources/META-INF/services/
org.keycloak.authentication.AuthenticatorFactory 2017-09-20
11:43:31.354018042 +0000
@@ -15,4 +15,5 @@
# limitations under the License.
#
-org.keycloak.examples.authenticator.SecretQuestionAuthenticatorFactory
\ No newline at end of file
+org.keycloak.examples.authenticator.SecretQuestionAuthenticatorFactory
+org.example.derivations.MyUsernamePasswordFormFactory
\ No newline at end of file
diff -Naur keycloak-demo-3.2.1.Final/keycloak/modules/layers.conf
keycloak-demo-3.2.1.Final-modified/keycloak/modules/layers.conf
--- keycloak-demo-3.2.1.Final/keycloak/modules/layers.conf
1970-01-01 00:00:00.000000000 +0000
+++ keycloak-demo-3.2.1.Final-modified/keycloak/modules/layers.conf
2017-07-21 09:11:58.000000000 +0000
@@ -0,0 +1 @@
+layers=keycloak
\ No newline at end of file
</SecretExamplePatchFile>
_______________________________________________
keycloak-dev mailing list
keycloak-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/keycloak-dev