User: jules_gosnell
  Date: 02/01/13 05:28:49

  Added:       jetty/src/main/org/jboss/jetty/security JBossUserRealm.java
  Log:
  split into dirs
  
  Revision  Changes    Path
  1.1                  
contrib/jetty/src/main/org/jboss/jetty/security/JBossUserRealm.java
  
  Index: JBossUserRealm.java
  ===================================================================
  /*
   * jBoss, the OpenSource EJB server
   *
   * Distributable under GPL license.
   * See terms of license at gnu.org.
   */
  
  // $Id: JBossUserRealm.java,v 1.1 2002/01/13 13:28:49 jules_gosnell Exp $
  
  package org.jboss.jetty.security;
  
  import java.util.Collections;
  import java.util.HashMap;
  import java.util.Set;
  import javax.naming.Context;
  import javax.naming.InitialContext;
  import javax.naming.NamingException;
  import javax.security.auth.Subject;
  import org.jboss.logging.Logger;
  import org.jboss.security.AuthenticationManager;
  import org.jboss.security.RealmMapping;
  import org.jboss.security.SecurityAssociation;
  import org.jboss.security.SimplePrincipal;
  import org.jboss.security.SubjectSecurityManager;
  import org.mortbay.http.HttpRequest;
  import org.mortbay.http.UserPrincipal;
  import org.mortbay.http.UserRealm;
  
  /** An implementation of UserRealm that integrates with the JBossSX
   * security manager associted with the web application.
   * @author  [EMAIL PROTECTED]
   * @version $Revision: 1.1 $
   */
  
  // TODO
  
  public class JBossUserRealm
    implements UserRealm                // Jetty API
  {
    class JBossUserPrincipal
      extends SimplePrincipal   // JBoss API
      implements UserPrincipal  // Jetty API
    {
      JBossUserPrincipal(String name)
      {
        super(name);
        _log.info("created JBossUserRealm::JBossUserPrincipal: "+name);
      }
  
      protected boolean
        isAuthenticated(String password)
      {
        String  userName      = this.getName(); // needs disambiguation because our 
outer class....
        boolean authenticated = false;
  
        if (password==null)
        password="";
  
        char[] passwordChars = password.toCharArray();
        _log.info("authenticating: Name:"+userName+" Password:"+password);
        if(_authMgr!=null &&_authMgr.isValid(this, passwordChars))
        {
        _log.info("JBossUserPrincipal: "+userName+" is authenticated");
        SecurityAssociation.setPrincipal(this);
        SecurityAssociation.setCredential(passwordChars);
        authenticated=true;
        }
        else
        {
        _log.warn("JBossUserPrincipal: "+userName+" is NOT authenticated");
        }
  
        return authenticated;
      }
  
      public boolean
        equals(Object o)
      {
        if (o==this)
        return true;
  
        if (o==null)
        return false;
  
        if (getClass()!=o.getClass())
        return false;
  
        String myName  =this.getName();
        String yourName=((JBossUserPrincipal)o).getName();
  
        if (myName==null && yourName==null)
        return true;
  
        if (myName!=null && myName.equals(yourName))
        return true;
  
        return false;
      }
  
      //----------------------------------------
      // SimplePrincipal - for JBoss
  
      //----------------------------------------
      // UserPrincipal - for Jetty
  
      public boolean
        authenticate(String password, HttpRequest request)
      {
        _password=password;
        boolean authenticated=false;
        authenticated=isAuthenticated(_password);
  
        // This doesn't mean anything to Jetty - but may to some
        // Servlets - confirm later...
        if (authenticated && _subjSecMgr!=null)
        {
        Subject subject = _subjSecMgr.getActiveSubject();
        request.setAttribute(_subjAttrName, subject);
        }
  
        return authenticated;
      }
  
      public boolean
        isAuthenticated()
      {
        return isAuthenticated(_password);
      }
  
      public UserRealm
        getUserRealm()
      {
        return JBossUserRealm.this;
      }
  
      public boolean
        isUserInRole(String role)
      {
        boolean isUserInRole = false;
        String userName      = this.getName();
  
        Set requiredRoles = Collections.singleton(new SimplePrincipal(role));
        if(_realmMapping!=null && _realmMapping.doesUserHaveRole(this, requiredRoles))
        {
        _log.info("JBossUserPrincipal: "+userName+" is in Role: "+role);
        isUserInRole = true;
        }
        else
        {
        _log.warn("JBossUserPrincipal: "+userName+" is NOT in Role: "+role);
        }
  
        return isUserInRole;
      }
    }
  
    private Logger                 _log;
    private String                 _realmName;
    private AuthenticationManager  _authMgr;
    private RealmMapping           _realmMapping;
    private HashMap                _users = new HashMap();
    private String                 _subjAttrName = "j_subject"; // needs accessors - 
TODO
    private SubjectSecurityManager _subjSecMgr;
    private String                 _password;
  
    public
      JBossUserRealm(String realmName)
    {
      _realmName = realmName;
      _log       = Logger.getLogger(JBossUserRealm.class.getName() + "#" + _realmName);
  
      try
      {
        // can I get away with just doing this lookup once per webapp ?
        InitialContext iniCtx = new InitialContext();
        // do we need the 'java:comp/env' prefix ? TODO
        Context securityCtx  =(Context) iniCtx.lookup("java:comp/env/security");
        _authMgr      =(AuthenticationManager) securityCtx.lookup("securityMgr");
        _realmMapping =(RealmMapping)          securityCtx.lookup("realmMapping");
        iniCtx=null;
  
        if (_authMgr instanceof SubjectSecurityManager)
        _subjSecMgr = (SubjectSecurityManager) _authMgr;
      }
      catch (NamingException e)
      {
        _log.error("java:comp/env/security does not appear to be correctly set up", e);
      }
    }
  
    // this is going to cause contention - TODO
    private synchronized JBossUserPrincipal
      ensureUser(String userName)
    {
      JBossUserPrincipal user = (JBossUserPrincipal)_users.get(userName);
  
      if (user==null)
      {
        user=new JBossUserPrincipal(userName);
        _users.put(userName, user);
      }
  
      return user;
    }
  
    public UserPrincipal
      getUser(String userName)
    {
      _log.info("JBossUserPrincipal: "+userName);
      return ensureUser(userName);
    }
  
    public String
      getName()
    {
      return _realmName;
    }
  }
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to