* different identity.
*/
boolean authenticated = false;
if (SecurityActions.remotingContextIsSet()) {
// In this case the principal and credential will not have been set to set some random values.
SecurityContextUtil util = current.getUtil();
UserInfo userInfo = SecurityActions.remotingContextGetConnection().getUserInfo();
Principal p = null;
String credential = null;
Subject subject = null;
if (userInfo instanceof SubjectUserInfo) {
SubjectUserInfo sinfo = (SubjectUserInfo) userInfo;
subject = sinfo.getSubject();
Set<PasswordCredential> pcSet = subject.getPrivateCredentials(PasswordCredential.class);
if (pcSet.size() > 0) {
PasswordCredential pc = pcSet.iterator().next();
p = new SimplePrincipal(pc.getUserName());
credential = new String(pc.getCredential());
SecurityActions.remotingContextClear(); // Now that it has been used clear it.
}
if ((p == null || credential == null) && userInfo instanceof UniqueIdUserInfo) {
UniqueIdUserInfo uinfo = (UniqueIdUserInfo) userInfo;
p = new SimplePrincipal(sinfo.getUserName());
credential = uinfo.getId();
// In this case we do not clear the RemotingContext as it is still to be used
// here extracting the ID just ensures we are not continually calling the modules
// for each invocation.
}
}
if (p == null || credential == null) {
p = new SimplePrincipal(UUID.randomUUID().toString());
credential = UUID.randomUUID().toString();
}
util.createSubjectInfo(p, credential, subject);
}
// If we have a trusted identity no need for a re-auth.
if (authenticated == false) {
authenticated = authenticate(current, null);