1 package org
.argeo
.security
.jackrabbit
;
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
;
8 import org
.apache
.jackrabbit
.core
.security
.authentication
.AuthContext
;
10 /** Wraps a regular {@link LoginContext}, using the proper class loader. */
11 class ArgeoAuthContext
implements AuthContext
{
12 private LoginContext lc
;
14 private String loginContextName
;
16 public ArgeoAuthContext(String appName
, Subject subject
, CallbackHandler callbackHandler
) {
17 this.loginContextName
= appName
;
18 // Context class loader for login context is set when it is created.
19 // we make sure that it uses our won class loader
20 ClassLoader currentContextCl
= Thread
.currentThread().getContextClassLoader();
22 Thread
.currentThread().setContextClassLoader(SystemJackrabbitLoginModule
.class.getClassLoader());
23 lc
= new LoginContext(loginContextName
, subject
, callbackHandler
);
24 } catch (LoginException e
) {
25 throw new IllegalStateException("Cannot configure Jackrabbit login context", e
);
27 Thread
.currentThread().setContextClassLoader(currentContextCl
);
32 public void login() throws LoginException
{
35 } catch (LoginException e
) {
36 // we force a runtime exception since Jackrabbit swallows LoginException
37 // and still create a session
38 throw new IllegalStateException("Login context " + loginContextName
+ " failed", e
);
43 public Subject
getSubject() {
44 return lc
.getSubject();
48 public void logout() throws LoginException
{