]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.core/src/org/argeo/security/core/ThreadedLoginModule.java
Centralise login in Kernel
[lgpl/argeo-commons.git] / org.argeo.security.core / src / org / argeo / security / core / ThreadedLoginModule.java
1 package org.argeo.security.core;
2
3 import java.util.Map;
4
5 import javax.security.auth.Subject;
6 import javax.security.auth.callback.CallbackHandler;
7 import javax.security.auth.login.LoginException;
8 import javax.security.auth.spi.LoginModule;
9
10 /** Attach login modules to threads. */
11 public abstract class ThreadedLoginModule implements LoginModule {
12 private ThreadLocal<LoginModule> loginModule = new ThreadLocal<LoginModule>() {
13
14 @Override
15 protected LoginModule initialValue() {
16 return createLoginModule();
17 }
18
19 };
20
21 protected abstract LoginModule createLoginModule();
22
23 @Override
24 public void initialize(Subject subject, CallbackHandler callbackHandler,
25 Map<String, ?> sharedState, Map<String, ?> options) {
26 loginModule.get().initialize(subject, callbackHandler, sharedState,
27 options);
28 }
29
30 @Override
31 public boolean login() throws LoginException {
32 return loginModule.get().login();
33 }
34
35 @Override
36 public boolean commit() throws LoginException {
37 return loginModule.get().commit();
38 }
39
40 @Override
41 public boolean abort() throws LoginException {
42 return loginModule.get().abort();
43 }
44
45 @Override
46 public boolean logout() throws LoginException {
47 return loginModule.get().logout();
48 }
49
50 }