You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2020/11/11 14:46:23 UTC
[tomee] branch master updated: Update Callback handler fork from
Tomcat so it matches API updates
This is an automated email from the ASF dual-hosted git repository.
jlmonteiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git
The following commit(s) were added to refs/heads/master by this push:
new a5d59f2 Update Callback handler fork from Tomcat so it matches API updates
a5d59f2 is described below
commit a5d59f238e3124e65288cb18b19975f3378df4e7
Author: Jean-Louis Monteiro <je...@gmail.com>
AuthorDate: Wed Nov 11 15:45:41 2020 +0100
Update Callback handler fork from Tomcat so it matches API updates
---
.../security/provider/CallbackHandlerImpl.java | 53 +++++++++++++---------
1 file changed, 31 insertions(+), 22 deletions(-)
diff --git a/tomee/tomee-security/src/main/java/org/apache/tomee/security/provider/CallbackHandlerImpl.java b/tomee/tomee-security/src/main/java/org/apache/tomee/security/provider/CallbackHandlerImpl.java
index 3b704ff..b40d7bc 100644
--- a/tomee/tomee-security/src/main/java/org/apache/tomee/security/provider/CallbackHandlerImpl.java
+++ b/tomee/tomee-security/src/main/java/org/apache/tomee/security/provider/CallbackHandlerImpl.java
@@ -16,6 +16,8 @@
*/
package org.apache.tomee.security.provider;
+import org.apache.catalina.Contained;
+import org.apache.catalina.Container;
import org.apache.catalina.realm.GenericPrincipal;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -27,6 +29,7 @@ import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.message.callback.CallerPrincipalCallback;
import javax.security.auth.message.callback.GroupPrincipalCallback;
+import javax.security.auth.message.callback.PasswordValidationCallback;
import java.io.IOException;
import java.security.Principal;
import java.util.ArrayList;
@@ -43,27 +46,13 @@ import java.util.List;
* https://github.com/apache/tomcat/blob/master/java/org/apache/catalina/authenticator/AuthenticatorBase.java#L956
* randomly picks the first one. So it results in random failures
*/
-public class CallbackHandlerImpl implements CallbackHandler {
+public class CallbackHandlerImpl implements CallbackHandler, Contained {
- private static final StringManager sm = StringManager.getManager(CallbackHandlerImpl.class);
+ private static final StringManager sm = StringManager.getManager(
+ org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl.class);
+ private final Log log = LogFactory.getLog(org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl.class); // must not be static
- private static CallbackHandler instance;
-
-
- static {
- instance = new CallbackHandlerImpl();
- }
-
-
- public static CallbackHandler getInstance() {
- return instance;
- }
-
-
- // switched to public so Tomcat can instanciate
- public CallbackHandlerImpl() {
- // Hide default constructor
- }
+ private Container container;
@Override
@@ -87,10 +76,19 @@ public class CallbackHandlerImpl implements CallbackHandler {
} else if (callback instanceof GroupPrincipalCallback) {
GroupPrincipalCallback gpc = (GroupPrincipalCallback) callback;
groups = gpc.getGroups();
+ } else if (callback instanceof PasswordValidationCallback) {
+ if (container == null) {
+ log.warn(sm.getString("callbackHandlerImpl.containerMissing", callback.getClass().getName()));
+ } else if (container.getRealm() == null) {
+ log.warn(sm.getString("callbackHandlerImpl.realmMissing",
+ callback.getClass().getName(), container.getName()));
+ } else {
+ PasswordValidationCallback pvc = (PasswordValidationCallback) callback;
+ principal = container.getRealm().authenticate(pvc.getUsername(),
+ String.valueOf(pvc.getPassword()));
+ subject = pvc.getSubject();
+ }
} else {
- // This is a singleton so need to get correct Logger for
- // current TCCL
- Log log = LogFactory.getLog(CallbackHandlerImpl.class);
log.error(sm.getString("callbackHandlerImpl.jaspicCallbackMissing",
callback.getClass().getName()));
}
@@ -142,4 +140,15 @@ public class CallbackHandlerImpl implements CallbackHandler {
return new GenericPrincipal(name, null, roles, principal);
}
+ // Contained interface methods
+ @Override
+ public Container getContainer() {
+ return this.container;
+ }
+
+
+ @Override
+ public void setContainer(Container container) {
+ this.container = container;
+ }
}