X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fcore%2FThreadedLoginModule.java;fp=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fcore%2FThreadedLoginModule.java;h=8ddac8905cc1532bb7355a1576a1b214a830fdd6;hb=559786a622e24c7d213960a7873e105db82a03ab;hp=0000000000000000000000000000000000000000;hpb=84591aefd3116474b79a7734b3ce5373ebdb0c29;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/src/org/argeo/security/core/ThreadedLoginModule.java b/org.argeo.security.core/src/org/argeo/security/core/ThreadedLoginModule.java new file mode 100644 index 000000000..8ddac8905 --- /dev/null +++ b/org.argeo.security.core/src/org/argeo/security/core/ThreadedLoginModule.java @@ -0,0 +1,50 @@ +package org.argeo.security.core; + +import java.util.Map; + +import javax.security.auth.Subject; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.login.LoginException; +import javax.security.auth.spi.LoginModule; + +/** Attach login modules to threads. */ +public abstract class ThreadedLoginModule implements LoginModule { + private ThreadLocal loginModule = new ThreadLocal() { + + @Override + protected LoginModule initialValue() { + return createLoginModule(); + } + + }; + + protected abstract LoginModule createLoginModule(); + + @Override + public void initialize(Subject subject, CallbackHandler callbackHandler, + Map sharedState, Map options) { + loginModule.get().initialize(subject, callbackHandler, sharedState, + options); + } + + @Override + public boolean login() throws LoginException { + return loginModule.get().login(); + } + + @Override + public boolean commit() throws LoginException { + return loginModule.get().commit(); + } + + @Override + public boolean abort() throws LoginException { + return loginModule.get().abort(); + } + + @Override + public boolean logout() throws LoginException { + return loginModule.get().logout(); + } + +}