| Interstage Application Server シングル・サインオン運用ガイド |
目次
索引
![]()
|
| 付録B ユーザプログラムの記述例 |
本記述例では、次の環境を想定しています。ご使用の環境にあわせて変更してください。

CSVファイルにはパスワードが含まれます。CSVファイルを使用する際にはパスワードアタックへの対策を考慮し、取り扱いには十分注意してください。
パスワードアタックへの対策については、“セキュリティシステム運用ガイド”の“セキュリティ侵害の脅威”−“Interstage シングル・サインオン”−“セキュリティ対策”を参照してください。

CSVの形式は、カンマ(,)を区切りとしており、例では以下の順に指定しています。
1. cn 2. sn 3. uid 4. userPassword 5. employeeNumber 6. mail 7. ssoAuthType 8. ssoCredentialTTL 9. ssoNotBefore 10. ssoNotAfter 11. ssoUserStatus 12. ssoRoleName
なお、以下の例において1行目の数字は、上記属性との対応を示しています。実際のCSVファイルには記述しないでください。
1 2 3 4 5 6 7 8 9 10 11 12
Fujitsu Tarou,Fujitsu,tarou,tarou,100001,tarou@jp.fujitsu.com,basicAuthOrCertAuth,60,20010101090000+0900,,good,Admin
Fujitsu Hanako,Fujitsu,Hanako,hanako,100002,hanako@jp.fujitsu.com,basicAuthOrCertAuth,60,20010101090000+0900,,good,Admin
Fujitsu Jirou,Fujitsu,Jirou,jirou,100003,jirou@jp.fujitsu.com,basicAuthOrCertAuth,60,20010101090000+0900,,good,Leader
: |

// CSVファイルの値と、属性の対応づけ
private static final int INDEX_CN = 0;
private static final int INDEX_SN = 1;
private static final int INDEX_UID = 2;
private static final int INDEX_USERPASSWORD = 3;
private static final int INDEX_EMPLOYEENUMBER = 4;
private static final int INDEX_MAIL = 5;
private static final int INDEX_SSOAUTHTYPE = 6;
private static final int INDEX_SSOCREDENTIALTTL = 7;
private static final int INDEX_SSONOTBEFORE = 8;
private static final int INDEX_SSONOTAFTER = 9;
private static final int INDEX_USERSTATUS = 10;
private static final int INDEX_SSOROLENAME = 11;
private static final int INDEX_RDN = 0;
private static final String [] attributeNames = {
"cn",
"sn",
"uid",
"userPassword",
"employeeNumber",
"mail",
"ssoAuthType",
"ssoCredentialTTL",
"ssoNotBefore",
"ssoNotAfter",
"ssoUserStatus",
"ssoRoleName"
};
:
【前処理】
:
// CSVファイルをオープンする(カレントのsimple.csvをオープン)
java.io.FileInputStream fis = new java.io.FileInputStream("sample.csv");
java.io.InputStreamReader isr = new java.io.InputStreamReader(fis);
java.io.BufferedReader br = new java.io.BufferedReader(isr);
// CSVファイルを1行ずつ読みながら処理する
String line;
String [] data;
while((line = br.readLine()) != null) {
java.util.StringTokenizer st = new java.util.StringTokenizer(line, ",", true);
int index = 0;
java.util.ArrayList al = new java.util.ArrayList(64);
al.add(0, null);
String s;
while(st.hasMoreTokens()) {
s = st.nextToken();
if(s.equals(",")) {
index++;
al.add(index, null);
} else {
al.set(index, s);
}
}
data = (String[])al.toArray(new String[0]); if( data == null || data.length == 0 ) {
continue;
}
Attributes attrs = new BasicAttributes(); Attribute objectClass = new BasicAttribute("objectClass");
objectClass.add("top");
objectClass.add("person");
objectClass.add("organizationalPerson");
objectClass.add("inetOrgPerson");
objectClass.add("ssoUser");
attrs.put(objectClass);
// ssoRoleName までを設定する
for(int i = 0; i < INDEX_SSOROLENAME; i++ ) {
if( data[ i ] != null ) {
attrs.put( attributeNames[ i ], data[ i ] );
}
}
// ssoRoleName を設定する
Attribute ssoRoleName = new BasicAttribute( "ssoRoleName" );
for(int i = INDEX_SSOROLENAME; i < data.length; i++ ) {
if( data[ i ] != null ) {
ssoRoleName.add( data[ i ] );
}
}
if( ssoRoleName.size() > 0 ) {
attrs.put( ssoRoleName );
}
String dn = "cn=" + data[INDEX_RDN] + ",ou=User,ou=interstage,o=fujitsu,dc=com"; ctx.createSubcontext( dn, attrs ); } :
【後処理】 |
目次
索引
![]()
|