/* ================================================================== * 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; import java.util.ArrayList; import java.util.List; import com.jinhe.tss.core.Config; import com.jinhe.tss.core.util.BeanUtil; /** * <p> LoginCustomizerFactory.java </p> * <p> * 登录自定义器工厂 * </p> */ public class LoginCustomizerFactory { /** * 自定义器实体 */ protected static ILoginCustomizer customizer = null; /** * 工厂类实体 */ private static LoginCustomizerFactory factory = null; /** * <p> * 获取自定义器 * </p> * @return ILoginCustomizer 自定义器 */ public ILoginCustomizer getCustomizer() { if (customizer == null) { String className = Config.getAttribute(SSOConstants.LOGIN_COSTOMIZER); if (className != null) { String[] classNames = className.split(","); if (classNames.length > 1) { customizer = new ArrayLoginCustomizer(classNames); } else { customizer = (ILoginCustomizer) BeanUtil.newInstanceByName(classNames[0]); } } if (customizer == null) { customizer = new DoNothingLoginCustomizer(); } } return customizer; } /** * <p> * 实例化工厂类 * </p> * @return */ public static LoginCustomizerFactory instance() { if (factory == null) { factory = new LoginCustomizerFactory(); } return factory; } } /** * <p> ArrayLoginCustomizer </p> * <p> * 登录时参数自定义器:可以同时执行多个定义的登录时参数自定义器,定义方法为使用逗号格开多个自定义器全类名 * </p> */ class ArrayLoginCustomizer implements ILoginCustomizer { /** * 自定义器列表 */ private List<ILoginCustomizer> customizers; /** * 自定义器类名数组 */ private String[] classNames; /** * 构造函数 * @param classNames */ public ArrayLoginCustomizer(String[] classNames) { this.classNames = classNames; } public void execute() { if (customizers == null) { init(); } for(ILoginCustomizer customizer : customizers) { customizer.execute(); } } /** * <p> * 初始化自定义器列表 * </p> */ private void init() { if (classNames != null) { return; } customizers = new ArrayList<ILoginCustomizer>(); for (String className : classNames) { if (className == null || "".equals(className)) continue; Object customizer = BeanUtil.newInstanceByName(className); if (customizer != null && customizer instanceof ILoginCustomizer) { customizers.add((ILoginCustomizer) customizer); } } } }