/* ================================================================== * 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.um.sso.othersystem; import com.jinhe.tss.core.Global; import com.jinhe.tss.core.exception.BusinessException; import com.jinhe.tss.core.exception.UserIdentificationException; import com.jinhe.tss.core.sso.IOperator; import com.jinhe.tss.core.sso.IPWDOperator; import com.jinhe.tss.core.sso.context.Context; import com.jinhe.tss.core.sso.context.RequestContext; import com.jinhe.tss.core.sso.identifier.BaseUserIdentifier; import com.jinhe.tss.core.util.InfoEncoder; import com.jinhe.tss.um.service.ILoginService; /** * <p> * Token身份认证器 <br> * 通过验证是否存在Token来判断用户是否已经登录 一期的平台,如果是,则让其在新平台登录。 <br> * * 用户在一期的平台中登录以后,通过以下地址转入到门户中: <br> * http://ip/pms/login.do?identifier=com.jinhe.tss.um.identification.identifier.PTTokenIdentifier&sso=true <br> * 需要在PMS的application.properties文件中设置SSO成功后调整的页面地址,例如: <br> * sso.index.page = /tss/default.portal <br> * 默认login.do只返回成功信息,但如果有sso=true和sso.index.page的配置同时存在,则会自动sendRedirect至sso.index.page页面。 * </p> */ public class PTTokenIdentifier extends BaseUserIdentifier { private static InfoEncoder encrypt = new InfoEncoder(); ILoginService service = (ILoginService) Global.getContext().getBean("LoginService"); protected IOperator validate() throws UserIdentificationException { RequestContext requestContext = Context.getRequestContext(); String token = requestContext.getValueFromRequest("token"); if(token == null) throw new UserIdentificationException("Token为空,用户可能还没有登录,请重新登录"); String orignToken = encrypt.createDecryptor(token); //解码 String loginName = orignToken.split(",")[3]; IPWDOperator operator = service.getOperatorDTOByLoginName(loginName); if (operator == null) throw new BusinessException("用户在UMS里不存在!"); return operator; } }