Является ли wildfly-config.xml обязательным для WildFly Naming Client?
Я удалил его и использовал программный подход из-за этого:
wildfly-config.xml содержит кредиты пользователей, которыебудет доступен как основной в EJB.У нас есть несколько пользователей, использующих один и тот же клиент.Также используется пользовательская область безопасности.Таким образом, кредиты пользователей будут меняться каждый раз.
Но поиск не удается с помощью программного подхода, но работает с подходом wildfly-config.xml.
Вот здесь wildfly-config.xml:
<configuration>
<authentication-client xmlns="urn:elytron:1.0">
<authentication-rules>
<rule use-configuration="default"/>
</authentication-rules>
<authentication-configurations>
<configuration name="default">
<sasl-mechanism-selector selector="PLAIN"/>
<providers>
<use-service-loader />
</providers>
<set-user-name name="ejbuser1"/>
<credentials>
<clear-password password="*****"/>
</credentials>
<set-mechanism-realm name="SSLRealm" />
</configuration>
</authentication-configurations>
</authentication-client>
<jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
<connections>
<connection uri="remote+http://localhost:8080" />
</connections>
</jboss-ejb-client>
</configuration>
После работы я удалил этот файл и добавил код для программного подхода:
// create your authentication configuration
AuthenticationConfiguration namingConfig = AuthenticationConfiguration.empty()
.setSaslMechanismSelector(SaslMechanismSelector.NONE.addMechanism("PLAIN"))
.useRealm("SSLRealm")
.useName(username)
.usePassword(password);
// create your authentication context
AuthenticationContext context = AuthenticationContext.empty()
.with(MatchRule.ALL.matchHost("localhost"), namingConfig);
// create a callable that creates and uses an InitialContext
Callable<Void> callable = () -> {
Properties properties1 = new Properties();
properties1.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
properties1.put(Context.PROVIDER_URL, ejbProperties.get("java.naming.provider.url"));
ctx = new InitialContext(properties1);
return null;
};
// use your authentication context to run your callable
try {
context.runCallable(callable);
// ERROR HERE
appBean = (AppRemote) ctx.lookup(getJNDIPrefix() + "AppBean!" + AppRemote.class.getName());
} catch (NamingException e) {
throw e;
} catch (Exception e) {
e.printStackTrace();
}
Затем получил следующую ошибку:
Причина: javax.security.sasl.SaslException: Аутентификация не удалась: ни один из механизмов, представленных сервером (PLAIN), не поддерживается в org.jboss.remoting3.remote.ClientConnectionOpenListener $ Capabilities.handleEvent (ClientConnectionOpenListener.java:444) в org.jboss.remoting3.remote.ClientConction.Переменныеnio.NioSocketConduit.handleReady (NioSocketConduit.java:89) в org.xnio.nio.WorkerThread.run (WorkerThread.java:591) в ... асинхронный вызов ... (неизвестный источник) в org.jboss.remoting3.EndpointImpl.connect (EndpointImpl.java:571) в org.jboss.remoting3.EndpointImpl.connect(EndpointImpl.java:537) в org.jboss.remoting3.ConnectionInfo $ None.getConnection (ConnectionInfo.java:82) в org.jboss.remoting3.ConnectionInfo.getConnection (ConnectionInfo.java:55) в org.jboss.remoting3.EndpointImpl.doGetConnection (EndpointImpl.java:488) в org.jboss.remoting3.EndpointImpl.getConnectedIdentity (EndpointImpl.java:434) в org.jboss.remoting3.UncloseableEndpoint.getConnectedIdentity (Unssava.bo.Endpoint.getConnectedIdentity (Endpoint.java:123) в org.jboss.ejb.protocol.remote.RemoteEJBReceiver.lambda $ getConnection $ 2 (RemoteEJBReceiver.java:185) в java.security.AccessController.doPrivileged
Есть предположения, что может быть не так?