互联网服务商业智能

Cognos单点登录问题

这两天都在研究Cognos的单点登录问题,首先说说自己对单点登录的一些认识,一般Cognos集成单点登录都是在系统已经有一套用户权限的情况下,而客户要求在登录了原有的系统使同时登录Cognos。用户权限可以通过Java SDK认证实现,但是如何实现同时登录Cognos呢?目前我会的是通过URL...显示全部
这两天都在研究Cognos的单点登录问题,首先说说自己对单点登录的一些认识,一般Cognos集成单点登录都是在系统已经有一套用户权限的情况下,而客户要求在登录了原有的系统使同时登录Cognos。用户权限可以通过Java SDK认证实现,但是如何实现同时登录Cognos呢?目前我会的是通过URL方式通过在报表后面添加CAMUsername=admin&CAMPassword=admin或者m_passportID=101:e521af37-bd65-ccba-965f-728deb1ac622:0580892245,随着研究的深入,我觉得这样的方式并不是我理解中的单点登录
下面是我这两天研究出来的一段程序,我觉的比较接近答案了,但是还没实现,但我觉得这样的方式应该才是Cognos单点登录好的方式,大家有时间帮我瞧瞧问题出在哪里?
public class CognosLogin extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException {
  String url = "http://xxx.xxx.xxx.xx/cognos10/cgi-bin/cognos.cgi";
  ContentManagerService_ServiceLocator cmServiceLocator = new ContentManagerService_ServiceLocator();
  ContentManagerService_PortType cmService = null;
  try {
   cmService = cmServiceLocator
     .getcontentManagerService(new java.net.URL(url));
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (ServiceException e) {
   e.printStackTrace();
  }
  StringBuffer credentialXML = new StringBuffer();
  credentialXML.append("");
  credentialXML.append("").append("SunOne").append(
    "
");
  credentialXML.append("").append("admin").append(
    "
");
  credentialXML.append("").append("admin").append(
    "
");
  credentialXML.append("
");
  String encodedCredentials = credentialXML.toString();
  try {
     cmService.logon(new XmlEncodedXML(encodedCredentials),new SearchPathSingleObject[] {});
  } catch (RemoteException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  BiBusHeader cmBiBusHeader = null;
  SOAPHeaderElement temp = ((Stub) cmService).getResponseHeader(
    "http://developer.cognos.com/schemas/bibus/3/", "biBusHeader");
  cmBiBusHeader = BIBusHeaderHelper.getHeaderObject(temp, true, "");
  ((Stub) cmService).setHeader(
    "http://developer.cognos.com/schemas/bibus/3/", "biBusHeader",
    cmBiBusHeader);
  Cookie newCookie = null;
  for (int i = 0; i < cmBiBusHeader.getHdrSession().getSetCookieVars().length; i++) {
      newCookie = new Cookie(cmBiBusHeader.getHdrSession()
     .getSetCookieVars().getName(), cmBiBusHeader
     .getHdrSession().getSetCookieVars().getValue());
     newCookie.setDomain("xxx.xxx.xxx.xx");
     newCookie.setMaxAge(-1);
     newCookie.setPath("/");
     resp.addCookie(newCookie);
  }
  
}
我验证单点登录成功的方法为:如果这段程序执行成功了话,那么我在浏览器中直接输入http://xxx.xxx.xxx.xx/cognos10/cgi-bin/cognos.cgi是不用输入用户名和密码可以直接进入的。还请大家多多帮忙收起
参与27

查看其它 23 个回答a136893103的回答

a136893103a136893103软件开发工程师合度云天
通过sdk的方式实现会比较安全,建议这样做..
互联网服务 · 2013-09-13
浏览599

回答者

a136893103
软件开发工程师合度云天
擅长领域: 商业智能大数据服务器

a136893103 最近回答过的问题

回答状态

  • 发布时间:2013-09-13
  • 关注会员:1 人
  • 回答浏览:599
  • X社区推广