]> 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 /** Integrates JAAS with the Argeo platform */
9 public class ArgeoLoginContext extends LoginContext {
10 private static ThreadLocal<ClassLoader> currentContextClassLoader = new ThreadLocal<ClassLoader>() {
11 @Override
12 protected ClassLoader initialValue() {
13 return Thread.currentThread().getContextClassLoader();
14 }
15
16 @Override
17 public void set(ClassLoader value) {
18 throw new IllegalAccessError("Current class loader is read-only");
19 }
20 };
21
22 public ArgeoLoginContext(String name, Subject subject,
23 CallbackHandler callbackHandler) throws LoginException {
24 super(setContextClassLoaderForName(name), subject, callbackHandler);
25 // reset current context classloader
26 Thread.currentThread().setContextClassLoader(
27 currentContextClassLoader.get());
28 currentContextClassLoader.remove();
29 }
30
31 /**
32 * Set the context classloader
33 *
34 * @return the passed name, in order to chain calls in the constructor
35 */
36 private static String setContextClassLoaderForName(String name) {
37 // store current context class loader;
38 currentContextClassLoader.get();
39 Thread.currentThread().setContextClassLoader(
40 ArgeoLoginContext.class.getClassLoader());
41 return name;
42 }
43
44 @Override
45 public void login() throws LoginException {
46 super.login();
47 }
48
49 @Override
50 public void logout() throws LoginException {
51 super.logout();
52 }
53 }