package com.ctrip.framework.apollo.portal.spi.ctrip;
import com.ctrip.framework.apollo.portal.spi.UserInfoHolder;
import com.ctrip.framework.apollo.portal.entity.bo.UserInfo;
import java.lang.reflect.Method;
/**
* ctrip内部实现的获取用户信息
*/
public class CtripUserInfoHolder implements UserInfoHolder {
private Object assertionHolder;
private Method getAssertion;
public CtripUserInfoHolder() {
Class clazz = null;
try {
clazz = Class.forName("org.jasig.cas.client.util.AssertionHolder");
assertionHolder = clazz.newInstance();
getAssertion = assertionHolder.getClass().getMethod("getAssertion");
} catch (Exception e) {
throw new RuntimeException("init AssertionHolder fail", e);
}
}
@Override
public UserInfo getUser() {
try {
Object assertion = getAssertion.invoke(assertionHolder);
Method getPrincipal = assertion.getClass().getMethod("getPrincipal");
Object principal = getPrincipal.invoke(assertion);
Method getName = principal.getClass().getMethod("getName");
String name = (String) getName.invoke(principal);
UserInfo userInfo = new UserInfo();
userInfo.setUserId(name);
return userInfo;
} catch (Exception e) {
throw new RuntimeException("get user info from assertion holder error", e);
}
}
}