Hello, I'm trying to connect to JNDI over HTTP. Right now I'm on the local lan and actually the same host that is running jboss. My test case works fine if I use the standard JNDI InitialContext for JBoss.
I wrote a relatively simple test case as follows: | /** | * | */ | package com.foo.webservice.client; | | import java.io.IOException; | import java.rmi.RMISecurityManager; | import java.util.Hashtable; | | import javax.naming.Context; | import javax.naming.InitialContext; | import javax.naming.NamingException; | import javax.security.auth.Subject; | import javax.security.auth.callback.Callback; | import javax.security.auth.callback.CallbackHandler; | import javax.security.auth.callback.NameCallback; | import javax.security.auth.callback.PasswordCallback; | import javax.security.auth.callback.UnsupportedCallbackException; | import javax.security.auth.login.LoginContext; | import javax.security.auth.login.LoginException; | | import com.foo.web.services.db.*; | /** | * @author pmadden | * | */ | public class DBServiceTest | { | LoginContext loginContext; | | public DBServiceTest() | { | | } | | private class ClientCallbackHandler implements CallbackHandler | { | String user; | String pass; | public ClientCallbackHandler(String user, String pass) | { | this.user = user; | this.pass = pass; | } | | /* | * (non-Javadoc) | * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[]) | */ | public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException | { | int len = callbacks.length; | Callback cb; | | for (int i = 0; i < len; i++) | { | cb = callbacks; | | if (cb instanceof NameCallback) | { | ((NameCallback) cb).setName(this.user); | } | else if (cb instanceof PasswordCallback) | { | ((PasswordCallback) cb).setPassword(this.pass.toCharArray()); | } | else | { | throw new UnsupportedCallbackException(cb, "Don't know what to do with this!"); | } | } | } | } | | protected Subject login(String user, String pass) throws LoginException | { | // reads the jaas.config file - looks for clooster setting. | loginContext = new LoginContext("clooster", | new ClientCallbackHandler(user, pass)); | | loginContext.login(); | | return loginContext.getSubject(); | } | | protected void logout() throws LoginException | { | if (this.loginContext != null) | { | this.loginContext.logout(); | } | } | | public void testDBService() throws Exception | { | if (System.getSecurityManager() == null) | System.setSecurityManager(new RMISecurityManager()); | | InitialContext initContext = this.getInitialContext(); | EJB3RemoteDBService dbService = (EJB3RemoteDBService) initContext.lookup("ejb3/EJB3DBService"); | } | | @SuppressWarnings("unchecked") | protected InitialContext getInitialContext() throws NamingException | { | Hashtable<String, String> env = new Hashtable<String, String>(); | | env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.HttpNamingContextFactory"); | env.put(Context.PROVIDER_URL, "http://10.10.10.6:8080/invoker/JNDIFactory"); | env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); | | InitialContext initContext = new InitialContext(env); | | env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming.client"); | env.put("j2ee.clientName", "jbossws-client"); | return initContext; | } | | public static void main(String[] args) | { | DBServiceTest test = new DBServiceTest(); | | try | { | Subject subject = test.login("foo","bar"); | | if (subject != null) | { | System.out.println(subject.toString()); | | test.testDBService(); | } | } | catch (Exception e) | { | e.printStackTrace(System.err); | } | finally | { | try | { | test.logout(); | } | catch (LoginException e) | { | e.printStackTrace(System.err); | } | } | } | } | I can actually get the LoginContext to login. It fails trying to create the InitialContext with the following output: | Subject: | Principal: foo | | javax.naming.NamingException: Failed to retrieve Naming interface [Root exception is java.io.IOException: Server returned HTTP response code: 403 for URL: http://10.10.10.6:8080/invoker/JNDIFactory] | at org.jboss.naming.HttpNamingContextFactory.getInitialContext(HttpNamingContextFactory.java:84) | at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) | at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) | at javax.naming.InitialContext.init(Unknown Source) | at javax.naming.InitialContext.<init>(Unknown Source) | at com.clooster.webservice.client.DBServiceTest.getInitialContext(DBServiceTest.java:112) | at com.clooster.webservice.client.DBServiceTest.testDBService(DBServiceTest.java:99) | at com.clooster.webservice.client.DBServiceTest.main(DBServiceTest.java:131) | Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://10.10.10.6:8080/invoker/JNDIFactory | at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) | at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) | at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) | at java.lang.reflect.Constructor.newInstance(Unknown Source) | at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source) | at java.security.AccessController.doPrivileged(Native Method) | at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source) | at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) | at org.jboss.naming.HttpNamingContextFactory.getNamingServer(HttpNamingContextFactory.java:133) | at org.jboss.naming.HttpNamingContextFactory.getInitialContext(HttpNamingContextFactory.java:80) | ... 7 more | Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://10.10.10.6:8080/invoker/JNDIFactory | at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) | at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(Unknown Source) | at java.net.URLConnection.getHeaderFieldInt(Unknown Source) | at java.net.URLConnection.getContentLength(Unknown Source) | at org.jboss.naming.HttpNamingContextFactory.getNamingServer(HttpNamingContextFactory.java:128) | ... 8 more | I'm running on standard port 8080. I added the username and password to both users.properties and conf\props\jmx-console-users.properties. Any help would be greatly appreciated. Thanks, PVM View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4004358#4004358 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4004358 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user