java 与BO集成
Posted bluss-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 与BO集成相关的知识,希望对你有一定的参考价值。
SAP BO说来比较曲折,BO本是一家公司,叫Business Object,同时这个公司有个产品叫Business Object,这个BO公司旨在做动态报表等商业解决方案,后被SAP收购.主要用来做Business Object Dashboard,Crystal Report,Web Intelligence等,某些功能可能与互联网上的开源框架有点距离。不做评价。
现在java成了一门大众化语言,国内java程序员也会对BO进行二次扩展开发,功能可能涉及授权,计划,查看,下载等。好多公司都会去做单点登录。想把BO给集成到一起。所以就得跳过登录。
1.bo登录(主要思想是基于session,token)
1.1 basic logon+Logon token
讲下basic logon+Logon token,获取到session,已经成功了一大半。如果是因为网络不通原因报错,就要添加host映射,查找网络。
IEnterpriseSession basicLogon() throws SDKException
ISessionMgr sessionManager = CrystalEnterprise.getSessionMgr();
IEnterpriseSession enterpriseSession = sessionManager.logon("username",
"password", "<cms>:<port>", "secEnterprise");
return enterpriseSession;
有了session就能获取到token了。
String defaultToken() throws SDKException
IEnterpriseSession enterpriseSession1 =
CrystalEnterprise.getSessionMgr().logon("username", "password",
"<cms>:<port>", "secEnterprise");
ILogonTokenMgr tokenMgr = enterpriseSession1.getLogonTokenMgr();
String defaultLogonToken = tokenMgr.getDefaultToken();
当你拥有了token之后操作bo就如鱼得水了。
2. 登录CMC,BI
登录CMC,BI都可以用token操作了。
2.1 登录BI http://IP:8080/BOE/BI/logon/start.do?ivsLogonToken=defaultLogonToke
2.2 登录cmc cmc成功后的url xxxx&bttoken=defaultLogonToke
demo会上传
3 .个人见解
但是因为有些公司的单点登录是不会传密码的。所以用Using trusted authentication 比较好。这个需要basis或者你自己配置下信任验证
IS essionMgr sessionMgr = CrystalEnterprise.getSessionMgr();
ITrustedPrincipal trustedPrincipal =
sessionMgr.createTrustedPrincipal("userName", "<cms>:<port>", "sharedSecret");
IEnterpriseSession enterpriseSession = sessionMgr.logon(trustedPrincipal);
序列化session
只能说用到的人会觉得他很重要,主要还是看系统用户(万级别)使用率,使用频率(万次/s)等等
系统优化方面的东西太多(计划优化,查询优化,用户登录优化),就不在这里举例。
代码:
public class BoLogin
/**
* 封装登陆逻辑,获取token;
* @throws SDKException
* 如果服务器及网络均正常,那么这个问题很可能是由于未配置系统IP地址解析。可修改本机的Hosts文件修复该问题.
*/
@SuppressWarnings("deprecation")
public static String getWcaToken(HttpServletRequest request,HttpServletResponse response) 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="";
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);//既然提示过期的方法,就可能有问题
String path="http://IP:8080/BOE/BI/logon/start.do?ivsLogonToken=";
return path+wcaToken;
@Controller
public class HelloWorldController
@RequestMapping("/hello")
public String hello( HttpServletRequest request,HttpServletResponse response)
try
String path=BoLogin.getWcaToken(request, response);
request.setAttribute("path", path);
return "helloworld";
catch (SDKException e)
// TODO Auto-generated catch block
e.printStackTrace();
return null;
以上是关于java 与BO集成的主要内容,如果未能解决你的问题,请参考以下文章