This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push: new 0163f97 Fix some serialization warnings 0163f97 is described below commit 0163f976bf32a33d5f004e4c7ff2f999d9c0a8a1 Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Jun 23 12:28:43 2021 +0100 Fix some serialization warnings --- .../apache/catalina/realm/UserDatabaseRealm.java | 21 +++++++++++++-------- .../catalina/users/MemoryUserDatabaseTests.java | 3 +-- webapps/docs/changelog.xml | 4 ++++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/java/org/apache/catalina/realm/UserDatabaseRealm.java b/java/org/apache/catalina/realm/UserDatabaseRealm.java index 6c5f474..c783ea5 100644 --- a/java/org/apache/catalina/realm/UserDatabaseRealm.java +++ b/java/org/apache/catalina/realm/UserDatabaseRealm.java @@ -16,6 +16,7 @@ */ package org.apache.catalina.realm; +import java.io.ObjectStreamException; import java.security.Principal; import java.util.Arrays; import java.util.HashSet; @@ -156,7 +157,7 @@ public class UserDatabaseRealm extends RealmBase { if (user == null) { return null; } else { - return new UserDatabasePrincipal(user); + return new UserDatabasePrincipal(user, database); } } @@ -230,13 +231,15 @@ public class UserDatabaseRealm extends RealmBase { } - public final class UserDatabasePrincipal extends GenericPrincipal { + public static final class UserDatabasePrincipal extends GenericPrincipal { private static final long serialVersionUID = 1L; - private final User user; + private final transient User user; + private final transient UserDatabase database; - public UserDatabasePrincipal(User user) { + public UserDatabasePrincipal(User user, UserDatabase database) { super(user.getName()); this.user = user; + this.database = database; } @Override @@ -266,7 +269,6 @@ public class UserDatabaseRealm extends RealmBase { } else if (role == null) { return false; } - UserDatabase database = getUserDatabase(); if (database == null) { return super.hasRole(role); } @@ -287,11 +289,14 @@ public class UserDatabaseRealm extends RealmBase { return false; } - private Object writeReplace() { + /** + * Magic method from {@link java.io.Serializable}. + * + * @throws ObjectStreamException Not thrown by this implementation + */ + private Object writeReplace() throws ObjectStreamException { // Replace with a static principal disconnected from the database return new GenericPrincipal(getName(), Arrays.asList(getRoles())); } - } - } diff --git a/test/org/apache/catalina/users/MemoryUserDatabaseTests.java b/test/org/apache/catalina/users/MemoryUserDatabaseTests.java index f8e168f..5724ac7 100644 --- a/test/org/apache/catalina/users/MemoryUserDatabaseTests.java +++ b/test/org/apache/catalina/users/MemoryUserDatabaseTests.java @@ -189,9 +189,8 @@ public class MemoryUserDatabaseTests { @Test public void testSerializePrincipal() throws Exception { - UserDatabaseRealm realm = new UserDatabaseRealm(); User user = db.findUser("admin"); - GenericPrincipal gpIn = realm.new UserDatabasePrincipal(user); + GenericPrincipal gpIn = new UserDatabaseRealm.UserDatabasePrincipal(user, db); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(gpIn); diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index fbe0725..d90d5bb 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -115,6 +115,10 @@ Refactor <code>JNDIRealm$JNDIConnection</code> so its fields are accessible to sub-classes of <code>JNDIRealm</code>. (markt) </scode> + <fix> + Fix serialization warnings in <code>UserDatabasePrincipal</code> + reported by SpotBugs. (markt) + </fix> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org