/* ================================================================== * 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 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.IdentityTranslator; import com.jinhe.tss.core.sso.IdentityTranslatorFactory; import com.jinhe.tss.core.sso.TokenUtil; import com.jinhe.tss.core.sso.context.Context; import com.jinhe.tss.core.sso.online.IOnlineUserManager; import com.jinhe.tss.core.sso.online.OnlineUserManagerFactory; /** * <p> OnlineUserIdentifier.java </p> * <p> * 在线用户库方式用户签定器。 * 通过根据令牌来判断该令牌是否已经在在线用户库中注册过了。如果已经注册则验证通过返回用户IdentityCard(类似身份证)。 * </p> */ public class OnlineUserIdentifier implements IUserIdentifier { public IdentityCard identify() throws UserIdentificationException { String token = Context.getRequestContext().getUserToken(); //如果在线,则说明令牌合法,获取用户当前系统相关信息并且重新注册到在线用户库(可能跟原先在线的应用不同,appCode不同) IOnlineUserManager onlineUserManager = OnlineUserManagerFactory.getManager(); if (onlineUserManager.isOnline(token)) { IdentityTranslator translator = IdentityTranslatorFactory.getTranslator(); IOperator operator = translator.translate(TokenUtil.getUserIdFromToken(token)); String appCode = Context.getApplicationContext().getCurrentAppCode(); String sessionId = Context.getRequestContext().getSessionId(); onlineUserManager.register(token, appCode, sessionId, operator.getId(), operator.getUserName()); return new IdentityCard(token, operator); } //用户不在线说明token令牌是伪造的或是已经过期的,返回null,表示验证不通过。 return null; } }