这两天都在研究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是不用输入用户名和密码可以直接进入的。还请大家多多帮忙收起