]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/auth/ArgeoLoginContext.java
Fix a few glitches in the various maintenance pages.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / 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 public ArgeoLoginContext(String name, Subject subject)
32 throws LoginException {
33 super(setContextClassLoaderForName(name), subject);
34 // reset current context classloader
35 Thread.currentThread().setContextClassLoader(
36 currentContextClassLoader.get());
37 currentContextClassLoader.remove();
38 }
39
40 /**
41 * Set the context classloader
42 *
43 * @return the passed name, in order to chain calls in the constructor
44 */
45 private static String setContextClassLoaderForName(String name) {
46 // store current context class loader;
47 currentContextClassLoader.get();
48 Thread.currentThread().setContextClassLoader(
49 ArgeoLoginContext.class.getClassLoader());
50 return name;
51 }
52
53 @Override
54 public void login() throws LoginException {
55 super.login();
56 }
57
58 @Override
59 public void logout() throws LoginException {
60 super.logout();
61 }
62 }