WildFly 9 서버에서 실행되는 Java EE 응용 프로그램에 대한 사용자 정의 웹 응용 프로그램 인증을 작성해야합니다. 나는 the undertow website documentation에서 그것을하는 방법에 대한 몇 가지 정보를 발견했습니다. 내가 지금까지했던 어떤WildFly로 사용자 정의 웹 응용 프로그램 인증
가 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/services에 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
누군가 내 구성에 어떤 문제가 있다고 말할 수 있습니까?
왜 JASPIC을 사용하지 않습니까? 이것이 바로 Java EE API이며 WildFly가 실제로 지원하고 훨씬 더 잘 문서화되어 있습니다. 현재 수행중인 작업은 저수준 내부 API를 사용하는 것입니다. –