Hello!

I'm using a remote java client and here's the client side test code;


  | Hashtable<String,String> jndiProps=new Hashtable<String, String>();
  | jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.jnp.interfaces.NamingContextFactory");
  | jndiProps.put(Context.PROVIDER_URL, "jnp://localhost:1099");
  | jndiProps.put(Context.URL_PKG_PREFIXES, 
"org.jboss.naming:org.jnp.interfaces");
  | 
  | InitialContext initialContext;
  | try {
  |       SecurityClient securityClient = 
SecurityClientFactory.getSecurityClient();
  |       securityClient.setSimple("jamai", "jamai1");
  |       securityClient.login();
  |       initialContext = new InitialContext(jndiProps);
  |       
  |       Object obj=initialContext.lookup("test/SecTestBean/remote");
  |       SecTest ops=(SecTest)PortableRemoteObject.narrow(obj, SecTest.class);
  |       String currentUser=ops.getCurrentUser("jamai");
  |       System.out.println(currentUser);
  | } catch (Exception e) {
  |     e.printStackTrace();
  | }
  | 

And then here's a basic login module used just for testing this case, it does 
not perform the actual authentication;


  | package test.ejb;
  | 
  | import java.security.Principal;
  | import java.security.acl.Group;
  | import java.util.Map;
  | 
  | 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.login.LoginException;
  | 
  | import org.jboss.security.SimpleGroup;
  | import org.jboss.security.SimplePrincipal;
  | import org.jboss.security.auth.spi.AbstractServerLoginModule;
  | 
  | public class BypassLogin extends AbstractServerLoginModule{
  |     private boolean debug;
  |     private Principal identity;
  |     private SimpleGroup userRoles;
  |     private SimpleGroup callerPrincipal;
  |     private String userName;
  |     
  |     @Override
  |     protected Principal getIdentity() {
  |             return identity;
  |     }
  | 
  |     @Override
  |     protected Group[] getRoleSets() throws LoginException {
  |             return new Group[] { userRoles, callerPrincipal };
  |     }
  | 
  |     /////////////////////////////
  |     
  |     public void initialize(Subject subject, CallbackHandler 
callbackHandler, Map sharedState, Map options) {
  |             super.initialize(subject,callbackHandler, sharedState, 
options);                
  |             this.userRoles = new SimpleGroup( "Roles" );
  |             this.callerPrincipal=new SimpleGroup("CallerPrincipal");
  |     }
  | 
  |     /**
  |      * Handle the login. Remember to set the loginOk boolean when 
successful 
  |      * @return true if login was successful
  |      */
  |     public boolean login() throws LoginException {
  |             String username = null;
  |             String password = null;
  | 
  |             if( identity == null ) {
  |                     if( callbackHandler == null ) {
  |                             throw new LoginException( "No callback handler 
for login");
  |                     }
  | 
  |                     NameCallback nc = new NameCallback("Name:", "guest");
  |                     PasswordCallback pc = new PasswordCallback("Password:", 
false);
  |                     Callback[] callbacks = {nc, pc};
  |                     
  |                     try {
  |                             callbackHandler.handle(callbacks);
  |                             username = nc.getName();
  |                             if(username==null) throw new 
LoginException("User name is null.");
  |                             char[] tmpPassword = pc.getPassword();
  |                             if( tmpPassword != null ) {
  |                                     password = new String(tmpPassword);
  |                             }
  |                     }
  |                     catch(LoginException e) {
  |                             if(debug)System.out.println(e.getMessage());
  |                             throw e;
  |                     }
  |                     catch ( Exception e ) {
  |                             if(debug)e.printStackTrace();
  |                             throw new LoginException( "Error in login; 
"+e.getMessage());
  |                     }
  | 
  |                     this.userName=username;
  |             }
  |             
  |             loginOk = true;         
  |             return true;
  |     }
  |     
  |     private void authorize(String userName) throws LoginException {
  |             try {
  |                     identity = createIdentity(userName);
  |             } catch (Exception e) {
  |                     throw new LoginException("Error creating identity; 
"+e.getMessage());
  |             }
  |             
  |             callerPrincipal.addMember(new SimplePrincipal(userName));
  |             userRoles.addMember(new SimplePrincipal("delos"));
  |     }
  | 
  |     @Override
  |     public boolean commit() throws LoginException {
  |             authorize(userName);
  |             return true;
  |     }
  | }
  | 

And then the simple server side bean;


  | package test.ejb;
  | 
  | import java.security.Principal;
  | 
  | import javax.annotation.Resource;
  | import javax.ejb.Remote;
  | import javax.ejb.SessionContext;
  | import javax.ejb.Stateless;
  | 
  | @Stateless
  | @org.jboss.ejb3.annotation.SecurityDomain(value="bypass")
  | @Remote(SecTest.class)
  | public class SecTestBean implements SecTest {
  |     @Resource
  |     private SessionContext ctx;
  | 
  |     public String getCurrentUser(String thoughtUserName) throws Exception {
  |             Principal principal=ctx.getCallerPrincipal();
  |             if(!thoughtUserName.equals(principal.getName())) throw new 
Exception("MISMATCHING CTX.PRINCIPAL USER; 
"+thoughtUserName+"!="+principal.getName());
  |             return principal.getName();
  |     }
  | }
  | 

So i checked the situation at server side, and the principal is "" when the 
client first time is run, and also the credientals returned by 
SecurityAssociation are also null. 

Maybe I have missed something in the login module development, because after 
succesfull login the principal and credientals exist correctly.

Br, Janne

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

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4220484
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to