[jboss-user] [JBossWS] - remote authentication=>no route to host found

timeagentess do-not-reply at jboss.com
Fri Jul 4 11:06:36 EDT 2008


Hello all,

I am testing authenticated access to a web service, with a security domain of my own and username/password taken from a mySQL database. I am using JBoss 4.0.5 and JBossWS 2.0.3, and on my localhost I have the mySQL database from where the username and password are taken, as well as the client.

Everything works perfectly when I have all things deployed locally (web service, database, client). However, I run into problems when invoking the web service deployed on a remote machine. 

On the remote server console a "no route to host" error appears:
anonymous wrote : 
  | Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 
  | 
  | ** BEGIN NESTED EXCEPTION ** 
  | 
  | java.net.SocketException
  | MESSAGE: java.net.NoRouteToHostException: No route to host
  | 
  | STACKTRACE:
  | 
  | java.net.SocketException: java.net.NoRouteToHostException: No route to host
  | 	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
  | 	at com.mysql.jdbc.MysqlIO.(MysqlIO.java:284)
  | 

On the client side I receive an "Unauthorized" error:
anonymous wrote : 3875 [main] DEBUG org.jboss.remoting.transport.http.HTTPClientInvoker  - Error invoking http client invoker.
  | org.jboss.ws.WSException: Invalid HTTP server response [401] - Unauthorized
  | 	at org.jboss.ws.core.soap.SOAPMessageUnMarshaller.read(SOAPMessageUnMarshaller.java:77)
  | 	at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:175)
  | 	...
  | 	javax.xml.ws.WebServiceException: java.io.IOException: Could not transmit message
  |  

Using the default "JBossWS" security domain, with username "kermit" and password "thefrog" taken from users.properties, works with both local and remote deployment of my web service. So I was thinking maybe the data source is not found?

However, the database seems to be correctly bound, judging by the server log data:
anonymous wrote : INFO  [org.jboss.resource.adapter.jdbc.remote.WrapperDataSourceService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=jdbc/WSTwoDS' to JNDI name 'java:jdbc/WSTwoDS'  

Perhaps my client needs special jndi.properties settings? (pure brainstorming, potentially stupid, based on some forum posts I browsed)

How my files look like: 

Security-relevant annotations on Web Service (which is deployed as SLSB in an ear):
@org.jboss.wsf.spi.annotation.WebContext(contextRoot = "/webservices-ws", urlPattern="/services/WSTwo/*", authMethod="BASIC", transportGuarantee="NONE", secureWSDLAccess=false)
  | @SecurityDomain("wstwo")
  | @RolesAllowed("friend")

In server/default/conf/login-config.xml on the remote machine I have added the "wstwo" application policy thus:
<application-policy name="wstwo">   
  | <authentication> 
  |         <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" 
  |                          flag="required"> 
  |             <module-option name="dsJndiName">java:/jdbc/WSTwoDS</module-option> 
  |             <module-option name="principalsQuery">   
  |                 select pass from USERS where login=? 
  |             </module-option> 
  |             <module-option name="rolesQuery"> 
  |                 select role,'Roles' from USER_ROLES where login=? 
  |             </module-option> 
  |         </login-module> 
  |     </authentication> 
  | </application-policy> 

And the data source for the web service is defined in the server/default/deploy/*-ds.xml file like this:
  <local-tx-datasource>
  |     <jndi-name>jdbc/WSTwoDS</jndi-name>
  |     <connection-url>jdbc:mysql://IP_OF_MY_LOCALHOST:3306/security</connection-url>
  | 	...
  |   </local-tx-datasource>

And of course the tables as described in the application policy are defined on my local machine.

In the client I pass the username and password:
((BindingProvider)wstwo).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "user");
  | ((BindingProvider)wstwo).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pass");

Does anyone have any idea about where I'm doing something wrong? Thank you!

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4162598#4162598

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4162598



More information about the jboss-user mailing list