关于Cognos第三方用户认证(CustomJavaProvider)的demo网上的例子很多,当然最权威的你可以从Cognos安装的SDK中去探索,本文不详细的说明代码,主要说一下认证的处理过程,以及处理过程中遇到的问题;

Step1:创建Cognos用户安全库

表的创建脚本:

CREATE TABLE [dbo].[PT_User_Role](
[ID] [int] IDENTITY(,) 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(,) NOT NULL,
[DepID] [int] NULL,
[CardNo] [varchar]() NULL,
[UserName] [varchar]() NULL,
[Password] [varchar]() NULL,
[ChineseName] [varchar]() NULL,
[Sex] [int] NULL,
[Address] [varchar]() NULL,
[Phone] [varchar]() NULL,
[EMail] [varchar]() NULL,
[Duty] [varchar]() NULL,
[LoginFlag] [int] NULL,
[LastLogTime] [datetime] NULL,
[Status] [int] NULL,
[FullPath] [varchar]() NULL,
[BindStatus] [int] NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)
) ON [PRIMARY] CREATE TABLE [dbo].[PT_Role](
[RoleID] [int] IDENTITY(,) NOT NULL,
[RoleName] [varchar]() NULL,
[Description] [varchar]() 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', AS issqluser, AS issqlrole
FROM dbo.PT_Role
UNION ALL
SELECT UserID AS 'uid', UserName AS 'name', ChineseName AS 'givenname', AS issqluser, 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;

Cognos第三方用户认证(CustomJavaProvider)的更多相关文章

  1. Cognos第三方权限认证Oracle用户库

    一:概要描述 1.1:项目背景 Cognos具有强大的报表功能,但是却没有提供一个完善的用户管理体系,针对商业智能系统对数据的安全性要求,我们必须实现不同用户对不同数据的访问,确保企业级以及部门级的数 ...

  2. auth用户认证库

    关于auth库,建议如下:1. ion_auth,基于Redux重写而成,非常不错的认证库,国外用的很多,几个最新的ci2.0.2基础上的开源系统(如doveforum)都用它,支持ci 2.0和以上 ...

  3. 使用Autodesk OAuth服务在用户认证的示例

    大家知道以Autodesk 360为核心的Autodesk 云服务已经陆续发布,ReCap API.InfraWorks API和PLM 360 REST API已经开始的Pilot项目供第三方开发者 ...

  4. 翻译:WebApi 认证--用户认证Oauth解析

        The Web API v2用户认证模板提供了流行的应用用户认证场景,如.使用本地帐号的用户名密码认账 (包括创建用户.设置和修改密码)以及使用第三方的认证方式,如facebook,googl ...

  5. 基于JWT标准的用户认证接口实现

    前面的话 实现用户登录认证的方式常见的有两种:一种是基于 cookie 的认证,另外一种是基于 token 的认证 .本文以基于cookie的认证为参照,详细介绍JWT标准,并实现基于该标签的用户认证 ...

  6. User authentication in Django(用户认证)

    一,概述: auth 系统包括: 1)Users 2)Permissions: Binary (yes/no) flags designating whether a user may perform ...

  7. 最适合入门的Laravel中级教程(二)用户认证

    之前的初级教程主要是学习简单的增删改查: 接着的中级教程的目标是在初级教程的基础上能写出更复杂更健壮的程序: 我们先来学习 laravel 的用户认证功能: 在现代网站中基本都有用户系统: 而我们每开 ...

  8. [django]前后端分离之JWT用户认证

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

  9. 前后端分离之JWT用户认证(转)

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

随机推荐

  1. Redis在Window服务下的安装

    Redis 安装 1.首先在Windows下下载安装Redis 下载地址:https://github.com/MicrosoftArchive/redis/releases 根据你电脑系统的实际情况 ...

  2. 阿里云无法远程连接数据库MySQL错误码10060解决办法

    使用图形界面管理工具Navicat for MySQL连接Mysql数据库时提示错误:Can't connect to MySQL server (10060) 导致些问题可能有以下几个原因: 1.网 ...

  3. [xsy2913]enos

    题意:一棵树,点有$0,1,2$三种颜色,支持路径修改颜色和查询点所在同色连通块的大小 lcm太可怕了,于是去问了sk,得到一个优质做法 考虑lct维护子树信息,$vs_{x,i}$为$x$的虚儿子中 ...

  4. [Assembly]汇编编写简易键盘记录器

    环境:Windows xp sp3工具:masmnotepad++ 首先列出本次编程程序要执行的步骤:(1).读取键盘所输入的字符(2).输出到屏幕上(3).完善Esc.Backspace.空格.回车 ...

  5. JDK源码学习笔记——Enum枚举使用及原理

    一.为什么使用枚举 什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数.一年四季等.或者是在我们编译前就知道其包含的所有值的集合. 利用 public final static 完全可 ...

  6. Py脚本运行后暂停不退出

    方法一:在脚本结束后提示用户按任意键退出 import os os.system('pause') 方法二:在脚本结束后等待输入,按回车键退出 input("") 方法三:在脚本结 ...

  7. maven -- 问题解决(一)解决eclipse中maven项目配置过程和maven install时出现的问题

    问题一: 配置项目时出现的错误: error: Cannot change version of project facet Dynamic Web Module to 2.5. error: One ...

  8. python开发_html_html处理

    ''' python中,html模块提供了只提供了一个方法: html.escape(s, quote = True) 该方法主要是把html文件中的特殊字符(&,<,>,&quo ...

  9. codevs 1204 寻找子串位置 KMP

    1204:寻找子串位置 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 18K  Solved: 8K Description 给出字符串a和字符串b,保 ...

  10. 详解Object.constructor

    对象的constructor属性引用了该对象的构造函数.对于 Object 对象,该指针指向原始的 Object() 函数.如下: var obj = {}; obj.constructor //ƒ ...