2016-10-07 6 views
3

Je dois créer une authentification d'application Web personnalisée pour mon application Java EE exécutée sur un serveur WildFly 9. J'ai trouvé quelques informations sur la façon de le faire dans the undertow website documentation.Authentification d'application Web personnalisée avec WildFly

Ce que je l'ai fait jusqu'à présent est de créer une io.undertow.servlet.ServletExtension mise en œuvre:

package mypackage; 

import java.util.Map; 
import javax.servlet.ServletContext; 
import org.jboss.as.domain.http.server.security.AnonymousMechanism; 
import io.undertow.security.api.AuthenticationMechanism; 
import io.undertow.security.api.AuthenticationMechanismFactory; 
import io.undertow.server.handlers.form.FormParserFactory; 
import io.undertow.servlet.ServletExtension; 
import io.undertow.servlet.api.DeploymentInfo; 

public class MyServletExtension implements ServletExtension { 

    @Override 
    public void handleDeployment(DeploymentInfo deploymentInfo, ServletContext servletContext) { 
     deploymentInfo.addAuthenticationMechanism("MY-AUTH", new AuthenticationMechanismFactory() { 
      @Override 
      public AuthenticationMechanism create(String mechanismName, FormParserFactory formParserFactory, Map<String, String> properties) { 
       return new AnonymousMechanism(); 
      } 
     }); 
    } 
} 

Puis j'ai ajouté un fichier nommé io.undertow.servlet.ServletExtension dans src/main/resources/META-INF/services/avec le contenu: mypackage.MyServletExtension.

Enfin, je l'ai modifié mon fichier web.xml comme ceci:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 

    <display-name>my-app</display-name> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>restricted resources</web-resource-name> 
      <url-pattern>/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>*</role-name> 
     </auth-constraint> 
    </security-constraint> 

    <security-role> 
     <role-name>*</role-name> 
    </security-role> 

    <login-config> 
     <auth-method>MY-AUTH</auth-method> 
    </login-config> 

</web-app> 

Dans mon fichier pom.xml je les dépendances:

<dependency> 
    <groupId>io.undertow</groupId> 
    <artifactId>undertow-core</artifactId> 
    <version>1.2.9.Final</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>io.undertow</groupId> 
    <artifactId>undertow-servlet</artifactId> 
    <version>1.2.9.Final</version> 
    <scope>provided</scope> 
</dependency> 

Mais au démarrage du serveur, j'ai cette erreur :

09:40:20,192 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 27) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./my-app-web: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./my-app-web: java.lang.LinkageError: Failed to link mypackage/MyServletExtension (Module "deployment.my-app-0.0.1-SNAPSHOT.ear.my-app-ejb.jar:main" from Service Module Loader) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_60] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_60] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_60] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_60] 
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_60] 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) [jboss-threads-2.2.0.Final.jar:2.2.0.Final] 
Caused by: java.lang.LinkageError: Failed to link mypackage/MyServletExtension (Module "deployment.my-app-0.0.1-SNAPSHOT.ear.my-app-ejb.jar:main" from Service Module Loader) 
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:437) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.Module.loadModuleClass(Module.java:560) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130) [jboss-modules.jar:1.4.3.Final] 
    at java.lang.Class.forName0(Native Method) [rt.jar:1.8.0_60] 
    at java.lang.Class.forName(Class.java:348) [rt.jar:1.8.0_60] 
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:370) [rt.jar:1.8.0_60] 
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) [rt.jar:1.8.0_60] 
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480) [rt.jar:1.8.0_60] 
    at io.undertow.servlet.core.DeploymentManagerImpl.handleExtensions(DeploymentManagerImpl.java:243) 
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:150) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82) 
    ... 6 more 
Caused by: java.lang.NoClassDefFoundError: io/undertow/servlet/ServletExtension 
    at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_60] 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) [rt.jar:1.8.0_60] 
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432) [jboss-modules.jar:1.4.3.Final] 
    ... 23 more 
Caused by: java.lang.ClassNotFoundException: io.undertow.servlet.ServletExtension from [Module "deployment.my-app-0.0.1-SNAPSHOT.ear.my-app-ejb.jar:main" from Service Module Loader] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385) [jboss-modules.jar:1.4.3.Final] 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130) [jboss-modules.jar:1.4.3.Final] 
    ... 27 more 

Quand je change la portée des dépendances de prévu pour compiler, j'ai une autre exception ion:

10:08:01,387 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 29) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./my-app-web: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./my-app-web: java.util.ServiceConfigurationError: io.undertow.servlet.ServletExtension: Provider mypackage.MyServletExtension not a subtype 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_60] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_60] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_60] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_60] 
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_60] 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) [jboss-threads-2.2.0.Final.jar:2.2.0.Final] 
Caused by: java.util.ServiceConfigurationError: io.undertow.servlet.ServletExtension: Provider mypackage.MyServletExtension not a subtype 
    at java.util.ServiceLoader.fail(ServiceLoader.java:239) [rt.jar:1.8.0_60] 
    at java.util.ServiceLoader.access$300(ServiceLoader.java:185) [rt.jar:1.8.0_60] 
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376) [rt.jar:1.8.0_60] 
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) [rt.jar:1.8.0_60] 
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480) [rt.jar:1.8.0_60] 
    at io.undertow.servlet.core.DeploymentManagerImpl.handleExtensions(DeploymentManagerImpl.java:243) 
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:150) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82) 
    ... 6 more 

Quelqu'un peut-il me dire ce qui ne va pas avec ma configuration?

+0

Pourquoi ne pas utiliser JASPIC? C'est l'API Java EE pour cela et elle est vraiment bien supportée par WildFly et bien mieux documentée. Ce que vous faites actuellement utilise l'API interne de bas niveau. –

Répondre

1

Vous l'avez empaqueté dans un fichier ejb-jar qui ne dépend pas de la valeur par défaut.

Vous devez ajouter

Dependencies: io.undertow.servlet io.undertow.core 

à META-INF/MANIFEST.MF (ou utiliser jboss-déploiement structure.xml ou l'emballer dans une guerre qui obtient ces dépendances par défaut).

+0

Vous aviez raison, merci. – cheb1k4