package org.infinispan.server.core.security.simple;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.security.Principal;
import java.util.Collection;
import javax.security.auth.Subject;
import org.infinispan.commons.marshall.SerializeWith;
import org.infinispan.security.Security;
import org.infinispan.server.core.security.SubjectUserInfo;
/**
* SimpleSubjectUserInfo.
*
* @author Tristan Tarrant
* @since 7.0
*/
@SerializeWith(SimpleSubjectUserInfo.Externalizer.class)
public class SimpleSubjectUserInfo implements SubjectUserInfo {
final String userName;
final Subject subject;
public SimpleSubjectUserInfo(Subject subject) {
this.userName = Security.getSubjectUserPrincipal(subject).getName();
this.subject = subject;
}
public SimpleSubjectUserInfo(String userName, Subject subject) {
this.userName = userName;
this.subject = subject;
}
@Override
public String getUserName() {
return userName;
}
@Override
public Collection<Principal> getPrincipals() {
return subject.getPrincipals();
}
@Override
public Subject getSubject() {
return subject;
}
public static class Externalizer implements org.infinispan.commons.marshall.Externalizer<SimpleSubjectUserInfo> {
@Override
public void writeObject(ObjectOutput output, SimpleSubjectUserInfo object) throws IOException {
output.writeUTF(object.userName);
output.writeObject(object.subject);
}
@Override
public SimpleSubjectUserInfo readObject(ObjectInput input) throws IOException, ClassNotFoundException {
return new SimpleSubjectUserInfo(input.readUTF(), (Subject)input.readObject());
}
}
}