From 7eb2d58485656727c7497048f0262ea92d0c306b Mon Sep 17 00:00:00 2001 From: markt Date: Thu, 23 Jul 2009 17:39:51 +0000 Subject: [PATCH] Preparatory work for https://issues.apache.org/bugzilla/show_bug.cgi?id=40881 As proposed on the dev list, remove the Realm from GenericPrincipal git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@797162 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/catalina/ha/session/DeltaRequest.java | 2 +- .../apache/catalina/ha/session/DeltaSession.java | 2 +- .../catalina/ha/session/SerializablePrincipal.java | 25 ++++++------- .../ha/session/SimpleTcpReplicationManager.java | 2 +- .../org/apache/catalina/realm/DataSourceRealm.java | 7 ++-- .../apache/catalina/realm/GenericPrincipal.java | 41 +++++----------------- java/org/apache/catalina/realm/JAASRealm.java | 2 +- java/org/apache/catalina/realm/JDBCRealm.java | 5 ++- java/org/apache/catalina/realm/JNDIRealm.java | 7 ++-- java/org/apache/catalina/realm/MemoryRealm.java | 2 +- java/org/apache/catalina/realm/RealmBase.java | 4 --- .../apache/catalina/realm/UserDatabaseRealm.java | 2 +- java/org/apache/catalina/startup/Tomcat.java | 2 +- .../ha/session/TestSerializablePrincipal.java | 4 +-- 14 files changed, 36 insertions(+), 71 deletions(-) diff --git a/java/org/apache/catalina/ha/session/DeltaRequest.java b/java/org/apache/catalina/ha/session/DeltaRequest.java index e7db78c7f..f73c0bebf 100644 --- a/java/org/apache/catalina/ha/session/DeltaRequest.java +++ b/java/org/apache/catalina/ha/session/DeltaRequest.java @@ -184,7 +184,7 @@ public class DeltaRequest implements Externalizable { Principal p = null; if ( info.getAction() == ACTION_SET ) { SerializablePrincipal sp = (SerializablePrincipal)info.getValue(); - p = sp.getPrincipal(session.getManager().getContainer().getRealm()); + p = sp.getPrincipal(); } session.setPrincipal(p,false); break; diff --git a/java/org/apache/catalina/ha/session/DeltaSession.java b/java/org/apache/catalina/ha/session/DeltaSession.java index bac0ca7e8..bb12249ce 100644 --- a/java/org/apache/catalina/ha/session/DeltaSession.java +++ b/java/org/apache/catalina/ha/session/DeltaSession.java @@ -598,7 +598,7 @@ public class DeltaSession extends StandardSession implements Externalizable,Clus boolean hasPrincipal = stream.readBoolean(); principal = null; if (hasPrincipal) { - principal = SerializablePrincipal.readPrincipal(stream,getManager().getContainer().getRealm()); + principal = SerializablePrincipal.readPrincipal(stream); } // setId((String) stream.readObject()); diff --git a/java/org/apache/catalina/ha/session/SerializablePrincipal.java b/java/org/apache/catalina/ha/session/SerializablePrincipal.java index 076981c33..419291a44 100644 --- a/java/org/apache/catalina/ha/session/SerializablePrincipal.java +++ b/java/org/apache/catalina/ha/session/SerializablePrincipal.java @@ -64,13 +64,12 @@ public class SerializablePrincipal implements java.io.Serializable { * Construct a new Principal, associated with the specified Realm, for the * specified username and password. * - * @param realm The Realm that owns this Principal * @param name The username of the user represented by this Principal * @param password Credentials used to authenticate this user */ - public SerializablePrincipal(Realm realm, String name, String password) { + public SerializablePrincipal(String name, String password) { - this(realm, name, password, null); + this(name, password, null); } @@ -80,14 +79,13 @@ public class SerializablePrincipal implements java.io.Serializable { * specified username and password, with the specified role names * (as Strings). * - * @param realm The Realm that owns this principal * @param name The username of the user represented by this Principal * @param password Credentials used to authenticate this user * @param roles List of roles (must be Strings) possessed by this user */ - public SerializablePrincipal(Realm realm, String name, String password, + public SerializablePrincipal(String name, String password, List roles) { - this(realm, name, password, roles, null); + this(name, password, roles, null); } @@ -96,17 +94,15 @@ public class SerializablePrincipal implements java.io.Serializable { * specified username and password, with the specified role names * (as Strings). * - * @param realm The Realm that owns this principal * @param name The username of the user represented by this Principal * @param password Credentials used to authenticate this user * @param roles List of roles (must be Strings) possessed by this user * @param userPrincipal The user principal to be exposed to applications */ - public SerializablePrincipal(Realm realm, String name, String password, + public SerializablePrincipal(String name, String password, List roles, Principal userPrincipal) { super(); - this.realm = realm; this.name = name; this.password = password; if (roles != null) { @@ -197,21 +193,20 @@ public class SerializablePrincipal implements java.io.Serializable { public static SerializablePrincipal createPrincipal(GenericPrincipal principal) { if ( principal==null) return null; - return new SerializablePrincipal(principal.getRealm(), - principal.getName(), + return new SerializablePrincipal(principal.getName(), principal.getPassword(), principal.getRoles()!=null?Arrays.asList(principal.getRoles()):null, principal.getUserPrincipal()!=principal?principal.getUserPrincipal():null); } - public GenericPrincipal getPrincipal( Realm realm ) + public GenericPrincipal getPrincipal() { - return new GenericPrincipal(realm, name, password, + return new GenericPrincipal(name, password, getRoles()!=null?Arrays.asList(getRoles()):null, userPrincipal); } - public static GenericPrincipal readPrincipal(ObjectInput in, Realm realm) + public static GenericPrincipal readPrincipal(ObjectInput in) throws IOException, ClassNotFoundException { String name = in.readUTF(); boolean hasPwd = in.readBoolean(); @@ -231,7 +226,7 @@ public class SerializablePrincipal implements java.io.Serializable { throw e; } } - return new GenericPrincipal(realm,name,pwd,Arrays.asList(roles), + return new GenericPrincipal(name,pwd,Arrays.asList(roles), userPrincipal); } diff --git a/java/org/apache/catalina/ha/session/SimpleTcpReplicationManager.java b/java/org/apache/catalina/ha/session/SimpleTcpReplicationManager.java index d659abe81..32c925ae3 100644 --- a/java/org/apache/catalina/ha/session/SimpleTcpReplicationManager.java +++ b/java/org/apache/catalina/ha/session/SimpleTcpReplicationManager.java @@ -434,7 +434,7 @@ public class SimpleTcpReplicationManager extends StandardManager implements Clus p = (SerializablePrincipal)session_in.readObject(); ((ReplicatedSession)session).readObjectData(session_in); if ( hasPrincipal ) - session.setPrincipal(p.getPrincipal(getContainer().getRealm())); + session.setPrincipal(p.getPrincipal()); ((ReplicatedSession)session).setId(sessionId,isNew); ReplicatedSession rsession = (ReplicatedSession)session; rsession.setAccessCount(1); diff --git a/java/org/apache/catalina/realm/DataSourceRealm.java b/java/org/apache/catalina/realm/DataSourceRealm.java index 5235d6029..b0c30d57c 100644 --- a/java/org/apache/catalina/realm/DataSourceRealm.java +++ b/java/org/apache/catalina/realm/DataSourceRealm.java @@ -338,7 +338,7 @@ public class DataSourceRealm ArrayList list = getRoles(dbConnection, username); // Create and return a suitable Principal for this user - return (new GenericPrincipal(this, username, credentials, list)); + return (new GenericPrincipal(username, credentials, list)); } @@ -477,11 +477,10 @@ public class DataSourceRealm protected Principal getPrincipal(String username) { Connection dbConnection = open(); if (dbConnection == null) { - return new GenericPrincipal(this,username, null, null); + return new GenericPrincipal(username, null, null); } try { - return (new GenericPrincipal(this, - username, + return (new GenericPrincipal(username, getPassword(dbConnection, username), getRoles(dbConnection, username))); } finally { diff --git a/java/org/apache/catalina/realm/GenericPrincipal.java b/java/org/apache/catalina/realm/GenericPrincipal.java index 90e556d3a..88f4b8d60 100644 --- a/java/org/apache/catalina/realm/GenericPrincipal.java +++ b/java/org/apache/catalina/realm/GenericPrincipal.java @@ -25,8 +25,6 @@ import java.util.List; import javax.security.auth.login.LoginContext; -import org.apache.catalina.Realm; - /** * Generic implementation of java.security.Principal that @@ -46,13 +44,12 @@ public class GenericPrincipal implements Principal { * Construct a new Principal, associated with the specified Realm, for the * specified username and password. * - * @param realm The Realm that owns this Principal * @param name The username of the user represented by this Principal * @param password Credentials used to authenticate this user */ - public GenericPrincipal(Realm realm, String name, String password) { + public GenericPrincipal(String name, String password) { - this(realm, name, password, null); + this(name, password, null); } @@ -62,14 +59,12 @@ public class GenericPrincipal implements Principal { * specified username and password, with the specified role names * (as Strings). * - * @param realm The Realm that owns this principal * @param name The username of the user represented by this Principal * @param password Credentials used to authenticate this user * @param roles List of roles (must be Strings) possessed by this user */ - public GenericPrincipal(Realm realm, String name, String password, - List roles) { - this(realm, name, password, roles, null); + public GenericPrincipal(String name, String password, List roles) { + this(name, password, roles, null); } /** @@ -77,16 +72,15 @@ public class GenericPrincipal implements Principal { * specified username and password, with the specified role names * (as Strings). * - * @param realm The Realm that owns this principal * @param name The username of the user represented by this Principal * @param password Credentials used to authenticate this user * @param roles List of roles (must be Strings) possessed by this user * @param userPrincipal - the principal to be returned from the request * getUserPrincipal call if not null; if null, this will be returned */ - public GenericPrincipal(Realm realm, String name, String password, - List roles, Principal userPrincipal) { - this(realm, name, password, roles, userPrincipal, null); + public GenericPrincipal(String name, String password, List roles, + Principal userPrincipal) { + this(name, password, roles, userPrincipal, null); } /** @@ -94,7 +88,6 @@ public class GenericPrincipal implements Principal { * specified username and password, with the specified role names * (as Strings). * - * @param realm The Realm that owns this principal * @param name The username of the user represented by this Principal * @param password Credentials used to authenticate this user * @param roles List of roles (must be Strings) possessed by this user @@ -103,11 +96,9 @@ public class GenericPrincipal implements Principal { * @param loginContext - If provided, this will be used to log out the user * at the appropriate time */ - public GenericPrincipal(Realm realm, String name, String password, - List roles, Principal userPrincipal, - LoginContext loginContext) { + public GenericPrincipal(String name, String password, List roles, + Principal userPrincipal, LoginContext loginContext) { super(); - this.realm = realm; this.name = name; this.password = password; this.userPrincipal = userPrincipal; @@ -146,20 +137,6 @@ public class GenericPrincipal implements Principal { /** - * The Realm with which this Principal is associated. - */ - protected Realm realm = null; - - public Realm getRealm() { - return (this.realm); - } - - void setRealm( Realm realm ) { - this.realm=realm; - } - - - /** * The set of roles associated with this user. */ protected String roles[] = new String[0]; diff --git a/java/org/apache/catalina/realm/JAASRealm.java b/java/org/apache/catalina/realm/JAASRealm.java index 79e7464e5..d70107018 100644 --- a/java/org/apache/catalina/realm/JAASRealm.java +++ b/java/org/apache/catalina/realm/JAASRealm.java @@ -539,7 +539,7 @@ public class JAASRealm } // Return the resulting Principal for our authenticated user - return new GenericPrincipal(this, username, null, roles, userPrincipal, + return new GenericPrincipal(username, null, roles, userPrincipal, loginContext); } diff --git a/java/org/apache/catalina/realm/JDBCRealm.java b/java/org/apache/catalina/realm/JDBCRealm.java index c176fc496..9eae7b0be 100644 --- a/java/org/apache/catalina/realm/JDBCRealm.java +++ b/java/org/apache/catalina/realm/JDBCRealm.java @@ -425,7 +425,7 @@ public class JDBCRealm ArrayList roles = getRoles(username); // Create and return a suitable Principal for this user - return (new GenericPrincipal(this, username, credentials, roles)); + return (new GenericPrincipal(username, credentials, roles)); } @@ -595,8 +595,7 @@ public class JDBCRealm */ protected synchronized Principal getPrincipal(String username) { - return (new GenericPrincipal(this, - username, + return (new GenericPrincipal(username, getPassword(username), getRoles(username))); diff --git a/java/org/apache/catalina/realm/JNDIRealm.java b/java/org/apache/catalina/realm/JNDIRealm.java index f1c95fd1e..4aed81a67 100644 --- a/java/org/apache/catalina/realm/JNDIRealm.java +++ b/java/org/apache/catalina/realm/JNDIRealm.java @@ -1025,8 +1025,7 @@ public class JNDIRealm extends RealmBase { containerLog.debug("Found role: " + it.next()); } } - return (new GenericPrincipal(this, - username, + return (new GenericPrincipal(username, credentials, roles)); } @@ -1061,7 +1060,7 @@ public class JNDIRealm extends RealmBase { } // Create and return a suitable Principal for this user - return (new GenericPrincipal(this, username, credentials, roles)); + return (new GenericPrincipal(username, credentials, roles)); } } @@ -1883,7 +1882,7 @@ public class JNDIRealm extends RealmBase { User user = getUser(context, username); - return new GenericPrincipal(this, user.username, user.password , + return new GenericPrincipal(user.username, user.password , getRoles(context, user)); } diff --git a/java/org/apache/catalina/realm/MemoryRealm.java b/java/org/apache/catalina/realm/MemoryRealm.java index c9883bbd8..507be9788 100644 --- a/java/org/apache/catalina/realm/MemoryRealm.java +++ b/java/org/apache/catalina/realm/MemoryRealm.java @@ -197,7 +197,7 @@ public class MemoryRealm extends RealmBase { // Construct and cache the Principal for this user GenericPrincipal principal = - new GenericPrincipal(this, username, password, list); + new GenericPrincipal(username, password, list); principals.put(username, principal); } diff --git a/java/org/apache/catalina/realm/RealmBase.java b/java/org/apache/catalina/realm/RealmBase.java index 42a4e144d..ecacb682f 100644 --- a/java/org/apache/catalina/realm/RealmBase.java +++ b/java/org/apache/catalina/realm/RealmBase.java @@ -870,10 +870,6 @@ public abstract class RealmBase return (false); GenericPrincipal gp = (GenericPrincipal) principal; - if (!(gp.getRealm() == this)) { - if(log.isDebugEnabled()) - log.debug("Different realm " + this + " " + gp.getRealm());// return (false); - } boolean result = gp.hasRole(role); if (log.isDebugEnabled()) { String name = principal.getName(); diff --git a/java/org/apache/catalina/realm/UserDatabaseRealm.java b/java/org/apache/catalina/realm/UserDatabaseRealm.java index ff20ba5f3..c9db3ea59 100644 --- a/java/org/apache/catalina/realm/UserDatabaseRealm.java +++ b/java/org/apache/catalina/realm/UserDatabaseRealm.java @@ -228,7 +228,7 @@ public class UserDatabaseRealm roles.add(role.getName()); } } - return new GenericPrincipal(this, username, user.getPassword(), roles, user); + return new GenericPrincipal(username, user.getPassword(), roles, user); } diff --git a/java/org/apache/catalina/startup/Tomcat.java b/java/org/apache/catalina/startup/Tomcat.java index b4fc2ef3d..d8f155260 100644 --- a/java/org/apache/catalina/startup/Tomcat.java +++ b/java/org/apache/catalina/startup/Tomcat.java @@ -462,7 +462,7 @@ public class Tomcat { if (p == null) { String pass = userPass.get(username); if (pass != null) { - p = new GenericPrincipal(this, username, pass, + p = new GenericPrincipal(username, pass, userRoles.get(username)); userPrincipals.put(username, p); } diff --git a/test/org/apache/catalina/ha/session/TestSerializablePrincipal.java b/test/org/apache/catalina/ha/session/TestSerializablePrincipal.java index 2dc0c7d52..8323bf919 100644 --- a/test/org/apache/catalina/ha/session/TestSerializablePrincipal.java +++ b/test/org/apache/catalina/ha/session/TestSerializablePrincipal.java @@ -53,7 +53,7 @@ public class TestSerializablePrincipal extends TestCase { roles.add("RoleB"); TesterPrincipal tpOriginal = new TesterPrincipal("inner"); GenericPrincipal gpOriginal = - new GenericPrincipal(null, "usr", "pwd", roles, tpOriginal); + new GenericPrincipal("usr", "pwd", roles, tpOriginal); // Do the serialization try { @@ -75,7 +75,7 @@ public class TestSerializablePrincipal extends TestCase { try { FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); - gpNew = SerializablePrincipal.readPrincipal(ois, null); + gpNew = SerializablePrincipal.readPrincipal(ois); } catch (FileNotFoundException e) { e.printStackTrace(); fail("fnfe reading object output stream"); -- 2.11.0