Cognos第三方用户认证(CustomJavaProvider)
关于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)的更多相关文章
- Cognos第三方权限认证Oracle用户库
一:概要描述 1.1:项目背景 Cognos具有强大的报表功能,但是却没有提供一个完善的用户管理体系,针对商业智能系统对数据的安全性要求,我们必须实现不同用户对不同数据的访问,确保企业级以及部门级的数 ...
- auth用户认证库
关于auth库,建议如下:1. ion_auth,基于Redux重写而成,非常不错的认证库,国外用的很多,几个最新的ci2.0.2基础上的开源系统(如doveforum)都用它,支持ci 2.0和以上 ...
- 使用Autodesk OAuth服务在用户认证的示例
大家知道以Autodesk 360为核心的Autodesk 云服务已经陆续发布,ReCap API.InfraWorks API和PLM 360 REST API已经开始的Pilot项目供第三方开发者 ...
- 翻译:WebApi 认证--用户认证Oauth解析
The Web API v2用户认证模板提供了流行的应用用户认证场景,如.使用本地帐号的用户名密码认账 (包括创建用户.设置和修改密码)以及使用第三方的认证方式,如facebook,googl ...
- 基于JWT标准的用户认证接口实现
前面的话 实现用户登录认证的方式常见的有两种:一种是基于 cookie 的认证,另外一种是基于 token 的认证 .本文以基于cookie的认证为参照,详细介绍JWT标准,并实现基于该标签的用户认证 ...
- User authentication in Django(用户认证)
一,概述: auth 系统包括: 1)Users 2)Permissions: Binary (yes/no) flags designating whether a user may perform ...
- 最适合入门的Laravel中级教程(二)用户认证
之前的初级教程主要是学习简单的增删改查: 接着的中级教程的目标是在初级教程的基础上能写出更复杂更健壮的程序: 我们先来学习 laravel 的用户认证功能: 在现代网站中基本都有用户系统: 而我们每开 ...
- [django]前后端分离之JWT用户认证
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- 前后端分离之JWT用户认证(转)
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
随机推荐
- 使用SoapUI测试windows身份验证的webservice
有个朋友问到用soapui测试wcf服务时如果使用windows身份验证要怎么传输凭据,于是自己试了一下.其实服务端是wcf还是webservice还是webapi都无所谓,关键是windows身份验 ...
- [BZOJ5291][BJOI2018]链上二次求和(线段树)
感觉自己做的麻烦了,但常数似乎不算差.(只是Luogu最慢的点不到2s本地要跑10+s) 感觉我的想法是最自然的,但不明白为什么网上似乎找不到这种做法.(不过当然所有的做法都是分类大讨论,而我的方法手 ...
- BZOJ 2648 SJY摆棋子(KD树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2716 [题目大意] 给出一些点,同时不断插入点和询问某点离插入点最近距离 [题解] 我 ...
- [CodeChef-QUERY]Observing the Tree
题目大意: 给你一棵树,一开始每个点的权值都是0,要求支持一下三种操作: 1.路径加等差数列. 2.路径求和. 3.回到以前的某次操作. 强制在线. 思路: 树链剖分+主席树. 最坏情况下,n个点的树 ...
- zookeeper【3】服务发现
服务发现:指对集群中的服务上下线做统一管理,每个工作服务器都可以作为数据的发布方,向集群注册自己的基本信息,而让某些监控服务器作为订阅方,订阅工作服务器的基本信息.当工作服务器的基本信息改变时,如服务 ...
- bzoj 3653
每个点维护一颗以深度为下标,size-1为值的线段树,保存整颗子树的信息,这样就可以查询了,但是如果为每个节点都建立这么一颗树,显然会MLE,所以考虑在DFS序上建立主席树,然后每个节点原来对应的线段 ...
- Codeforces Round #294 (Div. 2)C - A and B and Team Training 水题
C. A and B and Team Training time limit per test 1 second memory limit per test 256 megabytes input ...
- wikioi 1048 石子归并
dp[i][j]=min(dp[i][j],dp[i][k],dp[k+1][j]+sum[i][j]); 表示i-j的最小合并代价. #include <iostream> #inclu ...
- 使用TensorFlow低级别的API进行编程
Tensorflow的低级API要使用张量(Tensor).图(Graph).会话(Session)等来进行编程.虽然从一定程度上来看使用低级的API非常的繁重,但是它能够帮助我们更好的理解Tenso ...
- centos7安装kafka_2.11-1.0.0 新手入门
系统环境 1.操作系统:64位CentOS Linux release 7.2.1511 (Core) 2.jdk版本:1.8.0_121 3.zookeeper版本:zookeeper-3.4.9. ...