]> git.argeo.org Git - lgpl/argeo-commons.git/blob - auth/ArgeoLoginContext.java
Prepare next development cycle
[lgpl/argeo-commons.git] / auth / ArgeoLoginContext.java
1 package org.argeo.cms.auth;
2
3 import javax.security.auth.Subject;
4 import javax.security.auth.callback.CallbackHandler;
5 import javax.security.auth.login.LoginContext;
6 import javax.security.auth.login.LoginException;
7
8 /**
9 * Integrates JAAS with the Argeo platform, by using the Argeo CMS bundle
10 * classloader as context classloader.
11 */
12 public class ArgeoLoginContext extends LoginContext {
13 private static ThreadLocal<ClassLoader> currentContextClassLoader = new ThreadLocal<ClassLoader>() {
14 @Override
15 protected ClassLoader initialValue() {
16 return Thread.currentThread().getContextClassLoader();
17 }
18
19 @Override
20 public void set(ClassLoader value) {
21 throw new IllegalAccessError("Current class loader is read-only");
22 }
23 };
24
25 public ArgeoLoginContext(String name, Subject subject,
26 CallbackHandler callbackHandler) throws LoginException {
27 super(setContextClassLoaderForName(name), subject, callbackHandler);
28 // reset current context classloader
29 Thread.currentThread().setContextClassLoader(
30 currentContextClassLoader.get());
31 currentContextClassLoader.remove();
32 }
33
34 public ArgeoLoginContext(String name, Subject subject)
35 throws LoginException {
36 super(setContextClassLoaderForName(name), subject);
37 // reset current context classloader
38 Thread.currentThread().setContextClassLoader(
39 currentContextClassLoader.get());
40 currentContextClassLoader.remove();
41 }
42
43 /**
44 * Set the context classloader
45 *
46 * @return the passed name, in order to chain calls in the constructor
47 */
48 private static String setContextClassLoaderForName(String name) {
49 // store current context class loader;
50 currentContextClassLoader.get();
51 Thread.currentThread().setContextClassLoader(
52 ArgeoLoginContext.class.getClassLoader());
53 return name;
54 }
55
56 @Override
57 public void login() throws LoginException {
58 super.login();
59 }
60
61 @Override
62 public void logout() throws LoginException {
63 super.logout();
64 }
65 }