tokenmgr
sap bo端提供了一些api,供java调用,供第三方java应用跳过登陆等。这篇文章详细讲解如何书写代码。主要分为以下3步。
1,引入的jar包主要有2个。如下图红框中所示。
2,java代码核心(api如何调用)
通过以下代码段,可以看到我们得到了String类型的 token字符串,得到字符串之后,如何跳过登陆页面直接访问报表呢?答案是:直接通过url拼接的方式即可。
/**
* 封装登陆逻辑,获取token;
* @throws SDKException
* 如果服务器及网络均正常,那么这个问题很可能是由于未配置系统IP地址解析。可修改本机的hosts文件修复该问题.
*/
@SuppressWarnings("deprecation")
public static String getWcaToken(HttpServletrequest request) throws SDKException{
String wcaToken = "";
Httpsession session = request.getSession();
ISessionMgr sessionMgr;
IEnterpriseSession entsession = (IEnterpriseSession) request.getSession().getAttribute("boesession");
if (entsession == null) {
sessionMgr = CrystalEnterprise.getSessionMgr();
//以下userName,password需要改为自己bo登录页面的用户名和密码,ip也要修改为bo所在服务器的ip;
String userName="???",passWord="???",ip="138.6.4.170";
entsession = sessionMgr.logon(userName, passWord,ip+":6400", "secEnterprise");
session.setattribute("boesession", entsession);
}
request.getSession().setAttribute("boesession", entsession);
/* 其中createLogonToken(java.lang.String clientComputerName, int validMinutes, int validNumOfLogons)
clientComputerName为使用这个token的客户端计算机名,空字符串表示该token可被任何客户端使用;
validMinutes为token的有效时间(分钟);
validNumOfLogons 表示该token允许被使用的最大次数。*/
wcaToken = entsession.getLogontokenmgr().createLogonToken("", 1000,1000);
// wcaToken = entsession.getLogonTokenMgr().createWCAToken("", 1000,1000);//既然提示过期的方法,就可能有问题
return wcaToken;
}
3,拼接url(必须把token字符串拼接到url后面)例如系统最终拼成的url为:http://10.6.4.170:8080/BOE/OpenDocument/opendoc/openDocument.jsp?sIDType=CUID&sType=wid&iDocID=AQa.zJ7BBUBAolv5NdN3X2A&lsSP_DATE=20180415&token=BIPRD0:6400@129477Jg4Sy5pocBTNao8qOGGws6j129475J1JhLhH8z4qO7A6adlV4R1hONEOFF
注:在自己测试的时候,可以直接把上面的url填入浏览器中访问。如果访问通过(也就是直接跳过登陆页面),即为成功。
4,错误处理
如果第三步成功跳过则可以忽略下面这一步。
报错:尝试连接到服务器 10.6.4.170:6400 时出现通信错误 (FWM 01009)
如果服务器及网络均正常,那么这个问题很可能是由于未配置系统IP地址解析。可修改本机的Hosts文件修复该问题,Hosts文件的地址一般为 %windir%\system32\drivers\etc\hosts,用记事本打开host文件。如果服务器IP地址为1.2.3.4,服务器主机名为MYSERVER01,则向文件添加以下内容即可
1.2.3.4 MYSERVER01
--over