package com.github.ebnew.ki4so.core.authentication.resolvers;
import com.github.ebnew.ki4so.core.authentication.*;
import com.github.ebnew.ki4so.core.model.KnightCredentialInfo;
/**
* 实现了加密后的凭据转换为对应的用户主体对象的解析器
*
* @author Administrator
*
*/
public class EncryCredentialToPrincipalResolver implements CredentialToPrincipalResolver {
/**
* Default class to support if one is not supplied.
*/
private static final Class<KnightCredential> DEFAULT_CLASS = KnightCredential.class;
/**
* Class that this instance will support.
*/
private Class<?> classToSupport = DEFAULT_CLASS;
/**
* Boolean to determine whether to support subclasses of the class to
* support.
*/
private boolean supportSubClasses = true;
public void setSupportSubClasses(boolean supportSubClasses) {
this.supportSubClasses = supportSubClasses;
}
public KnightUser resolvePrincipal(KnightCredential credential) {
//若类型匹配,则进行转换。
if (credential != null && this.supports(credential)) {
KnightEncryCredential encryCredential = (KnightEncryCredential) credential;
DefaultKnightUser principal = new DefaultKnightUser();
//解析加密后凭据信息。
KnightCredentialInfo encryCredentialInfo = encryCredential.getCredentialInfo();
//设置用户名为唯一标识。
if (encryCredentialInfo != null) {
principal.setId(encryCredentialInfo.getUserId());
//设置参数表为用户属性。
principal.setAttributes(encryCredential.getParameters());
}
return principal;
}
return null;
}
public boolean supports(KnightCredential credential) {
return credential != null
&& (this.classToSupport.equals(credential.getClass()) || (this.classToSupport
.isAssignableFrom(credential.getClass()))
&& this.supportSubClasses);
}
}