2016-10-07 11 views
3

WildFly 9サーバー上で動作するJava EEアプリケーションのカスタムWebアプリケーション認証を作成する必要があります。私はthe undertow website documentationでそれを行う方法に関するいくつかの情報を見つけました。WildFlyによるカスタムWebアプリケーション認証

私がこれまで行ってきたことはio.undertow.servlet.ServletExtension実装を作成することです:

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(); 
      } 
     }); 
    } 
} 

は、それから私は、SRC /メイン/リソース/ META-INF /サービス/中io.undertow.servlet.ServletExtensionという名前のファイルを追加しました内容はmypackage.MyServletExtensionです。

最後に、私はこのように私のweb.xmlファイルを変更した:

私のpom.xmlファイルで
<?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> 

私はそれらの依存関係を持っている:

<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> 

しかし、サーバの起動時に、私はこのエラーを持っています:

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 

依存関係の範囲を提供からコンパイルに変更すると、イオン:

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 

私の設定が間違っていると教えてもらえますか?

+0

なぜJASPICを使用しないのですか?それはこれのためのJava EE APIであり、WildFlyが本当にうまくサポートしており、はるかに優れています。現在、低レベルの内部APIを使用しています。 –

答えて

1

デフォルトでアンダー・トゥーに依存しないejb-jarにパッケージ化しました。

あなたはMETA-INF/MANIFEST.MFに

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

を追加(またはJBossの-展開するstructure.xmlを使用するか、デフォルトでこれらの依存関係を取得し、戦争でそれをパッケージ化)する必要があります。

+0

あなたは正しかった、ありがとう。 – cheb1k4

関連する問題