JBoss 4.0.1 SP1 and JOSSO
thenomad Apr 29, 2005 2:03 PMHey all,
I'm trying desperately to get JOSSO to work with JBoss 4.0.1. In my travels (with a lot of tracing), I've come across what appears to be the big reason it's not working at this juncture. It boils down to a change in JaasSecurityManager between 3.x and 4.x of JBoss in the authenticate method.
You see, right now, when the JOSSO code is calling to get the activeSubject (with this call: Subject activeSubject = securityMgr.getActiveSubject();), the result is coming back null.
When I compare the authenticate methods between 3.x and 4.x in the JaasSecurityManager, 3.x used to make a call to setActivePrincipal that's no longer being called in 4.x.
Here's the 3.x version of the code (the // <===== are my comments):
private boolean authenticate(Principal principal, Object credential,
Subject theSubject)
{
Subject subject = null;
boolean authenticated = false;
LoginException authException = null;
try
{
// Clear any current subject
SubjectActions.setActiveSubject(null); // <=====
// Validate the principal using the login configuration for this domain
LoginContext lc = defaultLogin(principal, credential);
subject = lc.getSubject();
// Set the current subject if login was successful
if( subject != null )
{
// Copy the current subject into theSubject
if( theSubject != null )
{
SubjectActions.copySubject(subject, theSubject);
}
else
{
theSubject = subject;
}
authenticated = true;
// Build the Subject based DomainInfo cache value
Subject cacheSubject = updateCache(lc, subject, principal, credential);
// Associate the subject with the thread
SubjectActions.setActiveSubject(cacheSubject); // <=====
}
}
...catch code snipped...
Here's the 4.x version:
private boolean authenticate(Principal principal, Object credential,
Subject theSubject)
{
Subject subject = null;
boolean authenticated = false;
LoginException authException = null;
try
{
// Validate the principal using the login configuration for this domain
LoginContext lc = defaultLogin(principal, credential);
subject = lc.getSubject();
// Set the current subject if login was successful
if( subject != null )
{
// Copy the current subject into theSubject
if( theSubject != null )
{
SubjectActions.copySubject(subject, theSubject);
}
else
{
theSubject = subject;
}
authenticated = true;
// Build the Subject based DomainInfo cache value
updateCache(lc, subject, principal, credential);
}
}
...catch code snipped...
As near as I can tell in the code, the setActiveSubject stuff in SubjectActions has been replaced by push/pop actions: pushSubjectContext
But no matter what, shouldn't securityMgr.getActiveSubject() return the active subject - especially if it's just been authenticated?
Thanks for your help!
Marc