LoginSignup
1
0

More than 3 years have passed since last update.

Cognos カスタム認証(JDBCSample)のOracle版

Posted at

Cognos カスタム認証(JDBCSample)について

Cognos SDKで認証機能を実装するカスタム認証(JDBCSample)については、こちらの記事をご参照ください。
Cognos SDK でカスタム認証プロバイダーを開発する時に参考になるJDBCSampleの説明
https://qiita.com/shinyama/items/33b6349916380b8fe960

このサンプルとして提供されているJDBCSampleですが、ユーザー情報を保持するデータベースはDb2とSQL Serverのみで、Oracleをソースとしてやってみるとエラーとなり動きません。

とはいえ、全社的にOracleを標準データベースとしているお客様環境は多々あり、Cognosのカスタム認証でもOracleを使用してもらわないと困る、という事があります。

Oracleでカスタム認証が動くように修正しましたので、修正箇所を共有します。
ただし、個人的に動くものを作ったというだけですので、これが正式なものではなく、不具合があってもサポートされるものではないので、あくまで参考としてご活用ください。

Oracle用テーブル定義

USERS表
varchar2に統一しています

create table USERS (
        USERID                  varchar2(8) not null ,
        USERNAME                varchar2(255) not null ,
        PASSWORD                varchar2(255) not null ,
        FULLNAME                varchar2(255) ,
        EMAIL                   varchar2(255) ,
        LOCALE                  varchar2(5) ,
        TENANT                  varchar2(128)
);

alter table USERS add constraint PK_USERS primary key (USERID);

GROUPS表
varchar2に統一しています

create table GROUPS (
        GROUPID                 varchar2(8) not null,
        GROUPNAME               varchar2(255) NOT NULL,
        USERID                  varchar2(8),
        TENANT                  varchar2(128) not null
);

OBJECTVIEWビュー
変更なし

Javaソース

すいません、以下のサンプルとのdiff結果で読み取って下さい。
基本はテーブル定義のintegerをvarchar2に変更した対応です。
比較対象の.org拡張子のファイルが、Db2&SQL Server版のデフォルトサンプルです。

AccountCache.java

# diff AccountCache.java AccountCache.java.org
43,44c43,44
<               final String userID = account.getObjectID().substring(2);
< //            final Integer userID = Integer.parseInt(userIDStr.substring(2));
---
>               final String userIDStr = account.getObjectID();
>               final Integer userID = Integer.parseInt(userIDStr.substring(2));

GroupCache.java

# diff GroupCache.java GroupCache.java.org
45,46c45,46
<               final String groupID = group.getObjectID().substring(2);
< //            final Integer groupID = Integer.parseInt(groupIDStr.substring(2));
---
>               final String groupIDStr = group.getObjectID();
>               final Integer groupID = Integer.parseInt(groupIDStr.substring(2));

QueryUtil.java

# diff QueryUtil.java QueryUtil.java.org
10d9
< import java.math.BigDecimal;
137c136
<                       return (String) row[0];
---
>                       return String.valueOf(row[0]);
383,384c382,383
<                               final boolean bIsUser = ((BigDecimal) row[isUserCol]).intValue() == 1;
<                               final boolean bIsGroup = ((BigDecimal) row[isGroupCol]).intValue() == 1;
---
>                               final boolean bIsUser = ((Integer) row[isUserCol]).intValue() == 1;
>                               final boolean bIsGroup = ((Integer) row[isGroupCol]).intValue() == 1;
410c409
<                               final String objectID = (String) row[0];
---
>                               final String objectID = String.valueOf(row[0]);
452c451
<                       final String groupID = (String) row[0];
---
>                       final String groupID = String.valueOf(row[0]);

JDBC_Config_Restorable.properties ファイル

# For Oracle connections
connectionString=jdbc:oracle:thin:@OracleHost:1521:ORCL
driverClass=oracle.jdbc.driver.OracleDriver
username=orauser
password=password
singleSignon=true
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0