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.
}