s-HR 单点登录及调OSF

调用s-HR的OSF接口必须先单点登录,目前有两种登录方式。下面描述两种登录方式,同时提供封装了两种登录方式的集成依赖包(下文附件中包含.net和php语言单点登录案例)
如果想自己开发一个不需要登录就可以调用的接口可参考:不需要登录就可以调用的接口开发(不推荐)
一、调用OSF
A. 单点登录配置

SSO数据中心:选中需要做单点登录的数据中心
登录认证器:此处仅供查看,目前s-HR提供通过OTP认证的单点登录认证方式
启用白名单拦截:勾选之后会启用白名单校验规则,如果第三方地址没有配置在白名单中可能会apusic拦截
白名单地址:在启用白名单之后,此处填写第三方地址,域名或者IP都可
webservice开启安全模式:支持会话粘贴,集群环境需要勾选保证webservice单点登录正常。
注意:配置修改完成之后需要重启服务才能生效。OTP认证配置是实时生效的
B.调用OSF接口
代码示例
import com.kingdee.shr.api.Response;
import com.kingdee.shr.api.SHRClient;
public class SSOTest{
public static void main(String[] args) throws Exception{
String SHR_LOCAL = "http://127.0.0.1:6888/shr";
//OSF名称,注意是名称不是编码
String serviceName = "getAccountService";
SHRClient client = new SHRClient();
//调用OSF所需要的参数
Map<String,Object> param = new HashMap<String,Object>();
Response res = client.executeService(SHR_LOCAL ,serviceName,param);
System.out.println(res.getData());
}
}
此处依赖shr_sso_client.jar
client.executeService()方法中已经默认封装好了登录、调用OSF和登出的方法,返回的res结果就是OSF的结果,所以不需要另外登录。该方法中默认使用了user用户做单点登录,所以系统中的user用户不能被禁用或者删除
如果想通过webservice调用OSF,需要确认s-HR是否已经部署了WSOSFWebserviceFacade?wsdl,可通过地址http://127.0.0.1:6888/ormrpc/services/WSOSFWebserviceFacade?wsdl确认。如果没有可部署下文附件中的私包。
webservice单点登录调用OSF代码示例
import com.kingdee.shr.api.OSFWSClient;
import com.kingdee.shr.osf.webservice.client.UserInfo;
public class SSOTest{
public static void main(String[] args) throws Exception{
String SHR_LOCAL = "http://127.0.0.1:6888/shr";
//OSF名称,注意是名称不是编码
String serviceName = "getAccountService";
//调用OSF所需要的参数
Map<String,Object> param = new HashMap<String,Object>();
OSFWSClient client = new OSFWSClient();
//webservice登录系统的用户信息
UserInfo userInfo=new UserInfo();
userInfo.setDcName("数据中心ID");//数据中心ID可在管理控制台中查看,为数据中心代码
userInfo.setLanguage("L2");//多语言,L1,L2,L3
userInfo.setUserName("username");//用户名
userInfo.setPassword("password");//用户密码
userInfo.setSlnName("eas");//固定值eas
userInfo.setDbType(1);//数据库类型,0-SQL Server, 1-Oracle, 2-DB2
String res = client.proceedOSF(SHR_LOCAL,serviceName,param,userInfo);
System.out.println(res);
}
}
此处依赖shr_osfws_client.jar
client.proceedOSF()方法中封装好了登录、调用OSF和登出的方法,res就是OSF的结果,不需要另外登录
webservice中还一种免密登录的方式,但是需要确认系统中是否存在这种登录方法,可通过地址http://127.0.0.1:6888/ormrpc/services/EASLogin?wsdl确认,查看是否存在loginByLtpaToken。
参考代码如下
import com.kingdee.shr.api.OSFWSClient;
import com.kingdee.shr.osf.webservice.client.UserInfo;
import com.kingdee.eas.cp.eip.sso.ltpa.LtpaTokenManager;
public class SSOTest{
public static void main(String[] args) throws Exception{
String SHR_LOCAL = "http://127.0.0.1:6888/shr";
//OSF名称,注意是名称不是编码
String serviceName = "getAccountService";
//调用OSF所需要的参数
Map<String,Object> param = new HashMap<String,Object>();
OSFWSClient client = new OSFWSClient();
//webservice登录系统的用户信息
UserInfo userInfo=new UserInfo();
userInfo.setDcName("数据中心ID");//数据中心ID可在管理控制台中查看,为数据中心代码
userInfo.setLanguage("L2");//多语言,L1,L2,L3
userInfo.setUserName("username");//用户名
//配置文件路径,该配置文件需与s-HR服务端的一个配置文件内容保持一致,后续有详解
String configFile = "LtpaToken.properties";//configFile是指LtpaToken.properties配置文件的路径
//根据密钥生成的密码串
String password = LtpaTokenManager.generate("username",configFile).toString();
userInfo.setPassword(password);//生成的密码串
userInfo.setSlnName("eas");//固定值eas
userInfo.setDbType();//数据库类型,0-SQL Server, 1-Oracle, 2-DB2
String res = client.proceedOSFByLtpa(SHR_LOCAL,serviceName,param,userInfo);
System.out.println(res);
}
}
此处依赖shr_osfws_client.jar、kingdee_Ltpa.jar和LtpaToken.properties
client.proceedOSF()方法中封装好了登录、调用OSF和登出的方法,res就是OSF的结果,不需要另外登录
注意:此处的LtpaToken.properties文件必须与服务端{EAS-HOME}/eas/server/profiles/server(1-n)/config/portalConfig/LtpaToken.properties的配置文件中的domino.secret内容保持一致,这是生成密码的密钥串。如果是多个实例,每个实例的该文件都必须一致。
二、第三方页面跳转
A. 走EAS页面
参考地址:
http://127.0.0.1:6888/portal/index2sso.jsp?username=username&password=password&redirectTo=redirectTo
代码示例
import java.net.URLEncoder;
import com.kingdee.eas.cp.eip.sso.ltpa.LtpaTokenManager;
import com.kingdee.eas.cp.eip.sso.ltpa.LtpaToken;
public class SSOTest{
public static void main(String[] args) throws Exception{
//s-HR地址
String SHR_LOCAL = "http://127.0.0.1:6888/shr/home.do";
//登录用户名
String username="user";
//配置文件路径,该配置文件需与s-HR服务端的一个配置文件内容保持一致,后续有详解
String configFile = "LtpaToken.properties";//configFile是指LtpaToken.properties配置文件的路径
//登录成功之后重定向的地址,需要编码一次
String redirectTo = URLEncoder.encode(SHR_LOCAL);
//根据密钥生成的密码串
String password = LtpaTokenManager.generate(username,configFile).toString();
String url = "http://127.0.0.1:6888/portal/index2sso.jsp?username="+username+"&password="+password+"&redirectTo="+redirectTo;
System.out.println(url);
}
}
此处依赖kingdee_Ltpa.jar和LtpaToken.properties
如果是多语言环境,需跳转到其他的语言环境,请在将url改成http://127.0.0.1:6888/portal/index2sso.jsp?locale=L2&username=username&password=password&redirectTo=redirectTo,增加参数locale,值可为L1、L2或L3
注意:此处的LtpaToken.properties文件必须与服务端{EAS-HOME}/eas/server/profiles/server(1-n)/config/portalConfig/LtpaToken.properties的配置文件中的domino.secret内容保持一致,这是生成密码的密钥串。如果是多个实例,每个实例的该文件都必须一致。
B.走s-HR页面
参考地址:
http://127.0.0.1:6888/shr/OTP2sso.jsp?username=username&password=password&userAuthPattern=OTP&isNotCheckRelogin=true&redirectTo=redirectTo
import java.net.URLEncoder;
import com.kingdee.shr.sso.client.ltpa.LtpaTokenManager;
public class SSOTest{
public static void main(String[] args) throws Exception{
//s-HR地址
String SHR_LOCAL = "http://127.0.0.1:6888/shr/home.do";
//登录用户名
String username="user";
//登录成功之后重定向的地址,需要编码一次
String s-HR 单点登录及调OSF
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



