2017-01-19 11 views
0

Я пытаюсь создать богатый клиент, который выполняет EJB RMI для взаимодействия с сервером/БД. Раньше у меня были связи, работающие с удаленной системой для аутентификации пользователя. Затем я применил HTTPS-связь, используя хранилище ключей и кластеризацию в среду. В этот момент все сработало.Как выполнить EJB DB RBAC с WildFly?

Аутентификация на основе файлов была промежуточным шагом для перехода к авторизации базы данных &. Возможно, у меня все еще есть конфигурации от этого затягивания и выполнения этого нового шага, я не уверен.

Ниже сообщение об ошибке при попытке аутентификации через клиент:

Jan 19, 2017 12:51:52 PM org.jboss.ejb.client.EJBClient <clinit> 
INFO: JBoss EJB Client version 2.1.4.Final 
Jan 19, 2017 12:51:52 PM org.xnio.Xnio <clinit> 
INFO: XNIO version 3.4.0.Final 
Jan 19, 2017 12:51:52 PM org.xnio.nio.NioXnio <clinit> 
INFO: XNIO NIO Implementation Version 3.4.0.Final 
Jan 19, 2017 12:51:52 PM org.jboss.remoting3.EndpointImpl <clinit> 
INFO: JBoss Remoting version 4.0.21.Final 
Jan 19, 2017 12:51:53 PM org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector setupEJBReceivers 
WARN: Could not register a EJB receiver for connection to 10.0.0.1:8443 
javax.security.sasl.SaslException: Authentication failed: all available authentication mechanisms failed: 
    JBOSS-LOCAL-USER: javax.security.sasl.SaslException: Failed to read server challenge [Caused by java.io.FileNotFoundException: /home/appsrv/wildfly-10.1.0.Final/domain/tmp/auth/local4807198060994958453.challenge (No such file or directory)] 
    DIGEST-MD5: Server rejected authentication 
    at org.jboss.remoting3.remote.ClientConnectionOpenListener.allMechanismsFailed(ClientConnectionOpenListener.java:114) 
    at org.jboss.remoting3.remote.ClientConnectionOpenListener$Capabilities.handleEvent(ClientConnectionOpenListener.java:389) 
    at org.jboss.remoting3.remote.ClientConnectionOpenListener$Capabilities.handleEvent(ClientConnectionOpenListener.java:241) 
    at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92) 
    at org.xnio.channels.TranslatingSuspendableChannel.handleReadable(TranslatingSuspendableChannel.java:198) 
    at org.xnio.channels.TranslatingSuspendableChannel$1.handleEvent(TranslatingSuspendableChannel.java:112) 
    at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92) 
    at org.xnio.ChannelListeners$DelegatingChannelListener.handleEvent(ChannelListeners.java:1092) 
    at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92) 
    at org.xnio.conduits.ReadReadyHandler$ChannelListenerHandler.readReady(ReadReadyHandler.java:66) 
    at org.xnio.ssl.JsseStreamConduit.run(JsseStreamConduit.java:446) 
    at org.xnio.ssl.JsseStreamConduit.readReady(JsseStreamConduit.java:547) 
    at org.xnio.ssl.JsseStreamConduit$2.readReady(JsseStreamConduit.java:319) 
    at org.xnio.nio.NioSocketConduit.handleReady(NioSocketConduit.java:89) 
    at org.xnio.nio.WorkerThread.run(WorkerThread.java:567) 
    at ...asynchronous invocation...(Unknown Source) 
    at org.jboss.remoting3.EndpointImpl.doConnect(EndpointImpl.java:294) 
    at org.jboss.remoting3.EndpointImpl.connect(EndpointImpl.java:430) 
    at org.jboss.ejb.client.remoting.EndpointPool$PooledEndpoint.connect(EndpointPool.java:192) 
    at org.jboss.ejb.client.remoting.NetworkUtil.connect(NetworkUtil.java:153) 
    at org.jboss.ejb.client.remoting.NetworkUtil.connect(NetworkUtil.java:133) 
    at org.jboss.ejb.client.remoting.ConnectionPool.getConnection(ConnectionPool.java:78) 
    at org.jboss.ejb.client.remoting.RemotingConnectionManager.getConnection(RemotingConnectionManager.java:51) 
    at org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector.setupEJBReceivers(ConfigBasedEJBClientContextSelector.java:161) 
    at org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector.getCurrent(ConfigBasedEJBClientContextSelector.java:118) 
    at org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector.getCurrent(ConfigBasedEJBClientContextSelector.java:47) 
    at org.jboss.ejb.client.EJBClientContext.getCurrent(EJBClientContext.java:281) 
    at org.jboss.ejb.client.EJBClientContext.requireCurrent(EJBClientContext.java:291) 
    at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:178) 
    at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146) 
    at com.sun.proxy.$Proxy6.getVer(Unknown Source) 
    at com.test.clientapp.TestClient.authenticate(TestClient.java:208) 
    at com.test.clientapp.BackgroundServiceEngine.run(BackgroundServiceEngine.java:136) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

В моем WildFly конфигурации домена, я добавил следующий модуль аутентификации в «га» профиль (присвоенный мой хосте-контроллеры) в -> Безопасность -> MySecurityDomain через графический интерфейс:

name: testds01 
code: Database 
flag: required 
module options: 
    dsJndiName = java:/TestDS01 
    principalsQuery = SELECT password FROM users WHERE username=? 
    password-stacking = useFirstPass 
    hashAlgorithm = MD5 
    hashEncoding = BASE64 
    hashCharset = utf-8 

Я также добавил следующий модуль авторизации в той же области:

name: testds01 
code: Delegating 
flag: required 
module options: 
    dsJndiName = java:/TestDS01 
    rolesQuery = SELECT role, 'Roles' FROM roles INNER JOIN users ON users.role_id = roles.role_id WHERE users.username =? 

Честно говоря, я не знаю, что означает флаг «требуется». Также не используется код «Делегирование». Я просто нашел их в книге, которую я читал.

My WildFly включает в себя: 1x контроллер домена, 2x хост-контроллера с 1 сервером каждый, 2 базы данных SQL. Все 5 из них являются отдельными виртуальными машинами. Итак, помимо добавленных выше модулей testds01, у меня есть добавленные модули testds02, указывающие на «java:/TestDS02».

Дайте мне знать, если вам нужна дополнительная информация. Я не уверен, что все покрыл.

Обновление: Это, вероятно, полезно иметь клиентские свойства Я использую для установки & выполнения RMI:

// Set TLS Properties 
System.setProperty("javax.net.ssl.keyStore", "test.keystore"); 
System.setProperty("javax.net.ssl.trustStore", "test.truststore"); 
System.setProperty("javax.net.ssl.keyStorePassword", "testpass1"); 
System.setProperty("javax.net.ssl.trustStorePassword", "testpass2"); 

// Set Application Server Properties 
properties = new Properties(); 
properties.put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", "true"); 
properties.put("remote.connections", "hcl01,hcl02"); 

// Host Controller 
properties.put("remote.connection.hcl01.port", "8443"); 
properties.put("remote.connection.hcl01.host", "10.0.0.1"); 
properties.put("remote.connection.hcl01.protocol", "https-remoting"); 
properties.put("remote.connection.hcl01.connect.options.org.xnio.Options.SSL_STARTTLS", "true"); 
properties.put("remote.connection.hrl01.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false"); 
properties.put("remote.connection.hcl01.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS", "true"); 
properties.put("remote.connection.hrl01.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS", "JBOSS-LOCAL-USER"); 
properties.put("remote.connection.hcl02.port", "8443"); 
properties.put("remote.connection.hcl02.host", "10.0.0.2"); 
properties.put("remote.connection.hcl02.protocol", "https-remoting"); 
properties.put("remote.connection.hcl02.connect.options.org.xnio.Options.SSL_STARTTLS", "true"); 
properties.put("remote.connection.hrl02.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false"); 
properties.put("remote.connection.hcl02.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS", "true"); 
properties.put("remote.connection.hrl02.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS", "JBOSS-LOCAL-USER"); 

// Build SLSB Lookup String 
String appName = "/"; //name of ear containg ejb 
String moduleName = "testapp/"; //name of ejb jar w/o extension 
String distinctName = "/"; //any distinct name set within jboss for this deployment 
String beanName = Login.class.getSimpleName(); //name of the bean we're looking up 
String viewClassName = LoginRemote.class.getName(); //name of the bean interface 
System.out.println("beanName=" + beanName + " viewClassName=" + viewClassName); 
lookupSLSB = "ejb:" + appName + moduleName + distinctName + beanName + "!" + viewClassName; 

// Configure EJB Lookup 
Properties props = new Properties(); 
props.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); 
context = new InitialContext(props); 

properties.put("remote.connection.hcl01.username", au.getUsername()); 
properties.put("remote.connection.hcl01.password", au.getPassword()); 
properties.put("remote.connection.hcl02.username", au.getUsername()); 
properties.put("remote.connection.hcl02.password", au.getPassword()); 

// JBoss Cluster Setup (using properties above) 
EJBClientConfiguration cc = new PropertiesBasedEJBClientConfiguration(properties); 
ContextSelector<EJBClientContext> selector = new ConfigBasedEJBClientContextSelector(cc); 
EJBClientContext.setSelector(selector); 

LoginRemote bean = (LoginRemote)context.lookup(lookupSLSB); 
System.out.println("NIC [From bean]: Class=\"" + bean.getStr() + "\""); 
+0

Является ли эта установка редкой комбинацией или чем-то еще? Я не получал хитов ни на одном из моих вопросов JavaEE/WildFly. В некоторых случаях мне сложно найти ответы. – TrunkFullOfGoats

ответ

0

Я решил этот вопрос. После сброса трафика выяснилось, что запросы отправляются в базу данных. Я включил ведение журнала запросов в базе данных и обнаружил, что они были получены, но возникла проблема с правами пользователя базы данных. После предоставления привилегий запросам таблиц сообщение было успешным.