All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dswork.sso.AuthFactory Maven / Gradle / Ivy

The newest version!
/**
 * 调用webapi的工厂类
 */
package dswork.sso;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.reflect.TypeToken;

import dswork.sso.http.HttpUtil;
import dswork.sso.model.AccessToken;
import dswork.sso.model.IFunc;
import dswork.sso.model.IOrg;
import dswork.sso.model.ISystem;
import dswork.sso.model.IUser;
import dswork.sso.model.JsonResult;

public class AuthFactory
{
	static String url = "";
	static org.slf4j.Logger log = AuthGlobal.log;

	private AuthFactory()
	{
	}
	
	public static String getEncodeURL(String url)
	{
		try
		{
			return java.net.URLEncoder.encode(url, "UTF-8");
		}
		catch(Exception e)
		{
			return "";
		}
	}
	
	public static String getRedirectURI(String url)
	{
		return AuthWebConfig.getSystemRedirectURI().length() > 0 ? AuthWebConfig.getSystemRedirectURI() : url;
	}
	
	public static HttpUtil getAppHttp(String path)
	{
		String token = AuthGlobal.getAccessToken();
		if(!AuthGlobal.getInitAccessToken())
		{
			if(token.length() > 0)
			{
				log.warn("sso.initAccessToken=false");
			}
			else
			{
				log.error("sso.initAccessToken=false");
			}
		}
		return AuthGlobal.getHttp(path).addForm("access_token", token);
	}

	public static HttpUtil getSystemHttp(String path)
	{
		return getAppHttp(path).addForm("systemAlias", AuthWebConfig.getSystemAlias()).addForm("systemPassword", AuthWebConfig.getSystemPassword());
	}

	//////////////////////////////////////////////////////////////////////////////
	// 用户相关的方法
	//////////////////////////////////////////////////////////////////////////////
	/**
	 * 后端获取用户凭证(access_token)
	 * @param code 用户授权令牌
	 * @return JsonResult<AccessToken>
	 */
	public static JsonResult getUserAccessToken(String code)
	{
		return AuthGlobal.getUserAccessToken(code);
	}

	/**
	 * 前端检查用户凭证(access_token)是否还有效
	 * @param openid 用户标识
	 * @param access_token 用户凭证
	 * @return JsonResult<String>
	 */
	public static JsonResult getUserAuthToken(String openid, String access_token)
	{
		return AuthGlobal.getUserAuthToken(openid, access_token);
	}

	/**
	 * 前端账户信息
	 * @param openid 用户标识
	 * @param access_token 用户凭证
	 * @return JsonResult<IUser>
	 */
	public static JsonResult getUserUserinfo(String openid, String access_token)
	{
		return AuthGlobal.getUserUserinfo(openid, access_token);
	}

	/**
	 * 前端授权页面地址
	 * @param redirect_uri 重定向地址,如果配置的redirect_uri不为空,则忽略
	 * @return String
	 */
	public static String getUserAuthorizeURL(String redirect_uri)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(AuthWebConfig.getSystemLoginURL()).append("&redirect_uri=");
		String uri = AuthWebConfig.getSystemWebURL() + "/sso/login?url=" + getEncodeURL(getRedirectURI(redirect_uri));
		sb.append(getEncodeURL(uri));
		return sb.toString();
	}

	/**
	 * 前端登入认证地址(post),获取用户授权令牌(code)或用户凭证(access_token),其中该地址因authtime只有2小时有效,另还需增加grant_type=password|sms
	 * @param isCode code|token
	 * @param redirect_uri 重定向地址,如果为配置的redirect_uri不为空,则忽略
	 * @return String /user/login?appid=应用ID&response_type=code|token&redirect_uri=重定向地址
	 */
	public static String getUserLoginURL(boolean isCode, String redirect_uri)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(AuthWebConfig.getSsoWebURL()).append("/user/login").append("?appid=").append(AuthGlobal.getAppID()).append("&response_type=").append(isCode ? "code" : "token");
		String uri = AuthWebConfig.getSystemWebURL() + "/sso/login?url=" + getEncodeURL(getRedirectURI(redirect_uri));
		sb.append("&redirect_uri=").append(getEncodeURL(uri));
		return sb.toString();
	}

	/**
	 * 前端登出认证地址,即取消用户凭证
	 * @param openid 用户标识
	 * @param access_token 用户凭证
	 * @return String /user/logout?appid=应用ID&openid=用户标识&access_token=用户凭证
	 */
	public static String getUserLogoutURL(String openid, String access_token)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(AuthWebConfig.getSsoWebURL()).append("/user/logout").append("?appid=").append(AuthGlobal.getAppID()).append("&openid=").append(openid).append("&access_token=").append(access_token);
		return sb.toString();
	}

	/**
	 * 授权后访问重定向地址
	 * @param code 用户授权令牌
	 * @return String /user/redirect?appid=应用ID&code=用户授权令牌
	 */
	public static String getUserRedirectURL(String code)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(AuthWebConfig.getSsoWebURL()).append("/user/redirect").append("?appid=").append(AuthGlobal.getAppID()).append("&code=").append(code);
		return sb.toString();
	}

	/**
	 * 修改密码地址
	 * @param openid 用户标识
	 * @param access_token 用户凭证
	 * @param redirect_uri 重定向地址,即修改完密码需跳转至指定地址,为空则不跳转
	 * @return String /user/password?appid=应用ID&openid=用户标识&access_token=用户凭证&
	 */
	public static String getUserPasswordURL(String openid, String access_token, String redirect_uri)
	{
		if(redirect_uri == null)
		{
			redirect_uri = "";
		}
		StringBuilder sb = new StringBuilder();
		sb.append(AuthWebConfig.getSsoWebURL()).append("/user/password").append("?appid=").append(AuthGlobal.getAppID()).append("&openid=").append(openid).append("&access_token=").append(access_token);
		sb.append("&redirect_uri=").append(getEncodeURL(redirect_uri));
		return sb.toString();
	}

	/**
	 * 前后端发送6位短信验证码
	 * @param mobile 手机号码
	 * @return JsonResult<String>
	 */
	public static JsonResult getSmsCode(String mobile)
	{
		HttpUtil h = getAppHttp("/sms/code").addForm("mobile", mobile);
		JsonResult result = null;
		String v = "";
		try
		{
			v = h.connect().trim();
			result = AuthGlobal.gson.fromJson(v, new TypeToken>()
			{
			}.getType());
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return result;
	}

	//////////////////////////////////////////////////////////////////////////////
	// 组织机构及用户的方法
	//////////////////////////////////////////////////////////////////////////////
	/**
	 * 获取组织机构(单位、部门、岗位)
	 * @param orgId 组织机构ID(单位ID、部门ID、岗位ID)
	 * @return IOrg
	 */
	public static IOrg getOrg(String orgId)
	{
		HttpUtil h = getAppHttp("/api/getOrg").addForm("orgId", orgId);
		String v = "";
		IOrg m = null;
		try
		{
			v = h.connect().trim();
			m = AuthGlobal.gson.fromJson(v, IOrg.class);
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return m;
	}

	/**
	 * 获取下级组织机构(status:2单位,1部门,0岗位)
	 * @param orgPid 组织机构ID,为0则取顶级
	 * @return IOrg[]
	 */
	public static IOrg[] queryOrgByOrgParent(String orgPid)
	{
		HttpUtil h = getAppHttp("/api/queryOrgByOrgParent").addForm("orgPid", orgPid);
		String v = "";
		List list = null;
		try
		{
			v = h.connect().trim();
			list = AuthGlobal.gson.fromJson(v, new TypeToken>()
			{
			}.getType());
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return list == null ? new IOrg[0] : list.toArray(new IOrg[list.size()]);
	}

	/**
	 * 获取指定用户的基本信息
	 * @param userAccount 用户帐号
	 * @return IUser
	 */
	public static IUser getUser(String userAccount)
	{
		HttpUtil h = getAppHttp("/api/getUser").addForm("userAccount", userAccount);
		String v = "";
		IUser m = null;
		try
		{
			v = h.connect().trim();
			m = AuthGlobal.gson.fromJson(v, IUser.class);
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return m;
	}

	/**
	 * 获取指定用户的基本信息
	 * @param userOpenid 用户标识
	 * @return IUser
	 */
	public static IUser getUserByOpenid(String userOpenid)
	{
		HttpUtil h = getAppHttp("/api/getUserByOpenid").addForm("userOpenid", userOpenid);
		String v = "";
		IUser m = null;
		try
		{
			v = h.connect().trim();
			m = AuthGlobal.gson.fromJson(v, IUser.class);
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return m;
	}

	/**
	 * 获取指定单位下的用户,不含子单位
	 * @param orgPid 单位ID
	 * @return IUser[]
	 */
	public static IUser[] queryUserByOrgParent(String orgPid)
	{
		HttpUtil h = getAppHttp("/api/queryUserByOrgParent").addForm("orgPid", orgPid);
		String v = "";
		List list = null;
		try
		{
			v = h.connect().trim();
			list = AuthGlobal.gson.fromJson(v, new TypeToken>()
			{
			}.getType());
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			list = new ArrayList();
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return list == null ? new IUser[0] : list.toArray(new IUser[list.size()]);
	}

	/**
	 * 获取指定部门下的用户,不含子部门
	 * @param orgId 部门 ID
	 * @return IUser[]
	 */
	public static IUser[] queryUserByOrg(String orgId)
	{
		HttpUtil h = getAppHttp("/api/queryUserByOrg").addForm("orgId", orgId);
		String v = "";
		List list = null;
		try
		{
			v = h.connect().trim();
			list = AuthGlobal.gson.fromJson(v, new TypeToken>()
			{
			}.getType());
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return list == null ? new IUser[0] : list.toArray(new IUser[list.size()]);
	}

	//////////////////////////////////////////////////////////////////////////////
	// 统一权限相关的方法,以下方法需要systemAlias和systemPassword
	//////////////////////////////////////////////////////////////////////////////
	/**
	 * 获取子系统信息
	 * @return ISystem
	 */
	public static ISystem getSystem()
	{
		if(!AuthWebConfig.use)
		{
			return null;
		}
		HttpUtil h = getSystemHttp("/api/getSystem");
		String v = "";
		ISystem m = null;
		try
		{
			v = h.connect().trim();
			m = AuthGlobal.gson.fromJson(v, ISystem.class);
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return m;
	}

	/**
	 * 获取用户有权限访问的子系统
	 * @param userAccount 用户帐号
	 * @return ISystem[]
	 */
	public static ISystem[] getSystemByUser(String userAccount)
	{
		if(!AuthWebConfig.use)
		{
			return new ISystem[0];
		}
		HttpUtil h = getSystemHttp("/api/getSystemByUser").addForm("userAccount", userAccount);
		String v = "";
		List list = null;
		try
		{
			v = h.connect().trim();
			list = AuthGlobal.gson.fromJson(v, new TypeToken>()
			{
			}.getType());
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return list == null ? new ISystem[0] : list.toArray(new ISystem[list.size()]);
	}

	/**
	 * 获取系统的功能结构
	 * @return IFunc[]
	 */
	public static IFunc[] getFunctionBySystem()
	{
		if(!AuthWebConfig.use)
		{
			return new IFunc[0];
		}
		HttpUtil h = getSystemHttp("/api/getFunctionBySystem");
		String v = "";
		List list = null;
		try
		{
			v = h.connect().trim();
			list = AuthGlobal.gson.fromJson(v, new TypeToken>()
			{
			}.getType());
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return list == null ? new IFunc[0] : list.toArray(new IFunc[list.size()]);
	}

	/**
	 * 获取用户权限范围内的系统功能结构
	 * @param userAccount 用户帐号
	 * @return IFunc[]
	 */
	public static IFunc[] getFunctionByUser(String userAccount)
	{
		if(!AuthWebConfig.use)
		{
			return new IFunc[0];
		}
		HttpUtil h = getSystemHttp("/api/getFunctionByUser").addForm("userAccount", userAccount);
		String v = "";
		List list = null;
		try
		{
			v = h.connect().trim();
			list = AuthGlobal.gson.fromJson(v, new TypeToken>()
			{
			}.getType());
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return list == null ? new IFunc[0] : list.toArray(new IFunc[list.size()]);
	}

	/**
	 * 获取用户权限范围内的系统功能结构
	 * @param systemAlias 系统标识
	 * @param systemPassword 系统访问密码
	 * @param userAccount 用户帐号
	 * @return IFunc[]
	 */
	public static IFunc[] getFunctionByUser(String systemAlias, String systemPassword, String userAccount)
	{
		if(!AuthWebConfig.use)
		{
			return new IFunc[0];
		}
		HttpUtil h = getAppHttp("/api/getFunctionByUser").addForm("systemAlias", systemAlias).addForm("systemPassword", systemPassword).addForm("userAccount", userAccount);
		String v = "";
		List list = null;
		try
		{
			v = h.connect().trim();
			list = AuthGlobal.gson.fromJson(v, new TypeToken>()
			{
			}.getType());
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return list == null ? new IFunc[0] : list.toArray(new IFunc[list.size()]);
	}

	/**
	 * 获取岗位权限范围内的系统功能结构
	 * @param orgId 组织机构ID(单位ID、部门ID、岗位ID)
	 * @return IFunc[]
	 */
	public static IFunc[] getFunctionByOrg(String orgId)
	{
		if(!AuthWebConfig.use)
		{
			return new IFunc[0];
		}
		HttpUtil h = getSystemHttp("/api/getFunctionByOrg").addForm("orgId", orgId);
		String v = "";
		List list = null;
		try
		{
			v = h.connect().trim();
			list = AuthGlobal.gson.fromJson(v, new TypeToken>()
			{
			}.getType());
			if(log.isDebugEnabled())
			{
				log.debug("AuthFactory:url=" + h.getUrl() + ", json:" + v);
			}
		}
		catch(Exception e)
		{
			log.error("AuthFactory:url=" + h.getUrl() + ", json:" + v);
		}
		return list == null ? new IFunc[0] : list.toArray(new IFunc[list.size()]);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy