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;
         
    }
 
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值