/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.core.sso.identifier;
import org.apache.log4j.Logger;
import com.jinhe.tss.core.exception.UserIdentificationException;
import com.jinhe.tss.core.sso.IOperator;
import com.jinhe.tss.core.sso.IUserIdentifier;
import com.jinhe.tss.core.sso.IdentityCard;
import com.jinhe.tss.core.sso.TokenUtil;
import com.jinhe.tss.core.sso.context.Context;
import com.jinhe.tss.core.sso.online.OnlineUserManagerFactory;
/**
* <p>
* BaseUserIdentifier.java
* </p>
* <p>
* 身份认证器超类
* </p>
*
*/
public abstract class BaseUserIdentifier implements IUserIdentifier {
protected Logger log = Logger.getLogger(this.getClass());
public IdentityCard identify() throws UserIdentificationException {
// 验证通行证
IOperator operator = validate();
// 如果合法,注册在线用户,并获取相关用户信息对象,放入身份对象
if (operator != null) {
String appCode = Context.getApplicationContext().getCurrentAppCode();
String sessionId = Context.getRequestContext().getSessionId();
Long userId = operator.getId();
String userName = operator.getUserName();
String token = TokenUtil.createToken(sessionId, userId);
// 注册到在线用户库
OnlineUserManagerFactory.getManager().register(token, appCode, sessionId, userId, userName);
return new IdentityCard(token, operator);
}
else {
throw new UserIdentificationException("用户认证失败,没有对应合法身份");
}
}
/**
* <p>
* 验证用户是否合法,如果合法,返回相应的operator对象,否则返回Null。
* 验证过程中任务业务逻辑错误,需要通知用户的,都必须抛出UserIdentificationException异常
* </p>
*
* @return
*/
protected abstract IOperator validate() throws UserIdentificationException;
}