1 package org
.argeo
.cms
.auth
;
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
;
9 * Integrates JAAS with the Argeo platform, by using the Argeo CMS bundle
10 * classloader as context classloader.
12 public class ArgeoLoginContext
extends LoginContext
{
13 private static ThreadLocal
<ClassLoader
> currentContextClassLoader
= new ThreadLocal
<ClassLoader
>() {
15 protected ClassLoader
initialValue() {
16 return Thread
.currentThread().getContextClassLoader();
20 public void set(ClassLoader value
) {
21 throw new IllegalAccessError("Current class loader is read-only");
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();
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();
44 * Set the context classloader
46 * @return the passed name, in order to chain calls in the constructor
48 private static String
setContextClassLoaderForName(String name
) {
49 // store current context class loader;
50 currentContextClassLoader
.get();
51 Thread
.currentThread().setContextClassLoader(
52 ArgeoLoginContext
.class.getClassLoader());
57 public void login() throws LoginException
{
62 public void logout() throws LoginException
{