Cognos第三方用戶認證(CustomJavaProvider)


關於Cognos第三方用戶認證(CustomJavaProvider)的demo網上的例子很多,當然最權威的你可以從Cognos安裝的SDK中去探索,本文不詳細的說明代碼,主要說一下認證的處理過程,以及處理過程中遇到的問題;

Step1:創建Cognos用戶安全庫

表的創建腳本:

CREATE TABLE [dbo].[PT_User_Role](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [UserID] [int] NULL,
    [RoleID] [int] NULL,
 CONSTRAINT [PK_User_Role] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)
) ON [PRIMARY]

CREATE TABLE [dbo].[PT_User](
    [UserID] [int] IDENTITY(1,1) NOT NULL,
    [DepID] [int] NULL,
    [CardNo] [varchar](10) NULL,
    [UserName] [varchar](20) NULL,
    [Password] [varchar](50) NULL,
    [ChineseName] [varchar](50) NULL,
    [Sex] [int] NULL,
    [Address] [varchar](200) NULL,
    [Phone] [varchar](20) NULL,
    [EMail] [varchar](50) NULL,
    [Duty] [varchar](50) NULL,
    [LoginFlag] [int] NULL,
    [LastLogTime] [datetime] NULL,
    [Status] [int] NULL,
    [FullPath] [varchar](500) NULL,
    [BindStatus] [int] NULL,
 CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
    [UserID] ASC
)
) ON [PRIMARY]

CREATE TABLE [dbo].[PT_Role](
    [RoleID] [int] IDENTITY(1,1) NOT NULL,
    [RoleName] [varchar](50) NULL,
    [Description] [varchar](500) NULL,
    [RoleType] [int] NULL,
 CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED 
(
    [RoleID] ASC
)
) ON [PRIMARY]

 CREATE VIEW [dbo].[pt_user_view]
AS
SELECT     RoleID AS 'uid', RoleName AS 'name', RoleName AS 'givenname', 0 AS issqluser, 1 AS issqlrole
FROM         dbo.PT_Role
UNION ALL
SELECT     UserID AS 'uid', UserName AS 'name', ChineseName AS 'givenname', 1 AS issqluser, 0 AS issqlrole
FROM         dbo.PT_User

Step2:創建第三方認證project

Project目錄如圖所示

導出為EnFoProvider.jar

Step3:將各種需要文件放入指定目錄

准備工作已經做好,我們可以看cognos的SDK關於第三方java認證的提醒如下:

/**
* Licensed Materials - Property of IBM
*
* IBM Cognos Products: CAMAAA
*
* (C) Copyright IBM Corp. 2005, 2011
*
* US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with
* IBM Corp.
*/

Running the IBM Cognos SDK custom authentication JDBC provider sample
--------------------------------------------------------------------

To configure and run the sample provided, please follow these steps:

1) Add the Java SDK to your path.
2) Build the sample using the command build.bat on Windows or
build.sh on Unix.
3) Add the jar file to your IBM Cognos 10 classpath or copy the jar to
<install>/webapps/p2pd/WEB-INF/lib.
4) Add the MS SQL server jarfiles (sqljdbc.jar or sqljdbc4.jar) to your classpath or copy the files to
<install>/webapps/p2pd/WEB-INF/lib.
Refer to http://technet.microsoft.com/en-us/library/ms378422.aspx for the system requirements.
5) Copy the JDBC configuration file to the <install>/configuration
directory. Ensure that the name contains the namespaceID to be
recognized (namespaceID is case sensitive).
Ex:
namespaceID = Sample1
JDBC configurations file = JDBC_Config_Sample1.properties
6) Modify the content of the configuration file to point to your
MSSQL database.
7) In IBM Cognos Configuration, configure the Custom Java namespace
using the configuration tool, (the class name and NamespaceID
are case sensitive):
Type: Custom Java provider
Namespace ID: Sample1
Java class name: JDBCSample
8) Apply changes and restart IBM Cognos 10.

The new authentication namespace should now appear in IBM Cognos 10 for
logon and security administration tasks within IBM Cognos 10.

NOTE: Should IBM Cognos 10 fail to start up once the new namespace
is configured, please verify your configuration. IBM Cognos 10 will
not start up if it cannot successfully communicate to the
authentication source.

--按照上面的步驟操作

注意的地方是:集成的jar文件放在/webapps/p2pd/WEB-INF/lib 目錄,JDBC_Config_EnFoProvider.properties數據庫配置文件放在<install>/configuration目錄,

然后/webapps/p2pd/WEB-INF/lib也要有數據庫驅動文件,比如sqljdbc.jar,class12.jar等等;

Step4:在Cognos Configuration中配置命名空間;

4.1:進入安全→身份驗證右鍵點擊新建資源-名稱空間,如圖確定

確定以后,如下配置

空間標示符需要和JDBC_Config_EnFoProvider.properties中文件的末尾一樣,java類名就是指我們自己的project中認證的入口類的完整路徑,OK,保存測試:

注意,此處我們會遇到一個最常見的問題就是無法加載類,問題分析:

第一:可能是jdk版本問題,最好不要太低(cognos10最好是jdk1.6以上)

第二:可能是當前cognos配置沒有加載,關掉Cognos Configuration界面然后重新test 如下圖

則說明jar文件已經被加載成功。

4.2:關閉cognos匿名訪問

啟動cognos報表服務:訪問cognos connection

這里的admin 來自sqlserver庫中表[dbo].[PT_User]中

我們換個用戶登錄,

 

 

 

 

從上面我們可以看出來,我們自己庫中的用戶可以登錄了,而且登錄以后都可以管理cognos的內容,這說明了我們現在的所有用戶都是管理員,是什么原因呢,OK進入看一下我們的名稱空間,如下圖:

從上面可以看出在cognos的默認空間中,系統管理員的角色中包含任何人這個用戶組,所以我們就需要把這個任何人從Cognos這個名稱空間中刪除,切記:刪除之前,把我們自己的管理組角色添加來,如果不添加進來,那么就沒有管理員角色了,唯一的辦法只有去執行管理員初始化腳本,先回復所有人管理員的權限,然后執行上面的操作;

OK,在cognos名稱空間中添加了我們自己名稱空間中數據管理員的角色,然后再刪除了任何人以后;

我們再次用wxj普通用戶和屬於數據管理員的用戶admin登錄,可以看到普通用戶不在具有管理cognos內容的功能了,admin就可以

OK,截止目前一個簡單的第三方認證登錄已經完成了;

需要注意的是:我們只是把我們自己創建的名稱空間中的角色加入了Cognos自帶的角色中,而這個操作需要管理員的權限來完成,我們一開始要保留所有用戶/匿名用戶的系統管理員權限(這里也可以說是在cognos的名稱空間中系統管理員角色中包含‘任何人’這個成員),這個是cognos初始默認的情況;然后我們用我們自己名稱空間中的用戶登錄,此時所有用戶都具有管理員的權限,然后執行:添加自定義管理員到cognos的管理員中,從cognos的管理員中去掉‘任何人’OK,結果是:在我們的操作中,我們自己名稱空間中的管理員組擁有了cognos管理員的權限,不是管理員的組的用戶的權限也可以用我們具有管理員權限的用戶來操作了;

此文:感謝http://www.cnblogs.com/lijun4017/的支持;

問題補充:如果一切OK以后,並且訪問了cognos connection以后,名稱空間的camid就會被保存在Content Manager的內容庫中,如果再次修改資料空間的名稱就要報錯了,因為相同ID的名稱空間已經存在

解決辦法:刪掉內容庫,重新配置,一切OK;

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM