背景:
Liferayのデフォルト設定では使用できないスクリーン名があります。 その制限の回避方法をご紹介します。
詳細:
使用不可能な文字
デフォルトのLiferayで、スクリーン名に使用出来ない文字や文字列は以下の通りです:
- 「半角英数字(0-9, a-z)」、「-(ハイフン)」、「.(ドット)」、「_(アンダースコア)」以外の文字列
※半角大文字で入力した場合でも全て小文字に変換されます
- @を含む文字列
- 半角数字のみの文字列
- 75文字より多い文字列
- admin.reserved.screen.namesプロパティに指定された文字列
又は「コントロールパネル>インスタンス設定>設定>ユーザー”使用禁止スクリーン名とメール」の「スクリーン名」欄に設定した文字列
- 以下のフレーズ(大文字小文字の組み合わせを問わず使用不可)
null
guest
anonymous-guest
anonymous
postfix
半角数字のみ文字列を可能にする
半角数字のみの文字列をスクリーン名に使用できるようにするには、次のプロパティを設定します。デフォルトでは無効になっています。
users.screen.name.allow.numeric=true |
※ただし、このプロパティを設定した場合でも、以下の制限がありますので、予めご了承ください。
半角数字のみ文字列の制限と回避方法
半角数字のみのスクリーン名を有効にした場合でも、以下と重複するものはスクリーン名に使用できませんのでご注意ください。
- Group_.groupIdと重複する数値
- UserGroup.userGroupIdと重複する数値
※現時点で上記をスクリーン名に使用する方法は無く、コアエンジニアが仕様の見直しを検討中でございます(LPS-66460)。ただし、後述の手順を実施することで、これら数値の重複を防ぐことができます。
回避方法は2つありますが、完全回避のできる前者を推奨します。
1) 初期化が可能な場合(開発段階)
この方法は、データベースの初期化が必要になります。すでに運用を開始しており初期化できない場合は、後述の「初期化が不可能な場合」をご参照ください。
- Liferayを停止
- データベースをバックアップ
- Counterテーブルを除く、全テーブルをドロップ(初期化)
- Counterテーブルの「com.liferay.counter.model.Counter」を除く、全レコードを削除
- 「com.liferay.counter.model.Counter」の値を「100000000(想定されるユーザーの範囲以上)」に変更
- Liferayを起動
「Table 'counter' already exists: create table Counter」と
「Duplicate entry 'com.liferay.counter.model.Counter' for key 'PRIMARY': insert into Counter」エラーが発生しますが、問題ありません。
- 「com.liferay.counter.model.Counter」に指定した値(100000000)以降からサイトID(グループID)等が作成されます。
これにより、ユーザーのスクリーン名との重複を防ぐことができます。
2) 初期化が不可能な場合(運用段階)
この方法により、ワークアラウンド実施以降に作成されるサイトID(グループID)については、スクリーン名との重複を防ぐことができます。ただし既存のサイトID(グループID)は例外となります。
- Liferayを停止
- データベースをバックアップ
- 「com.liferay.counter.model.Counter」の値を「100000000(想定されるユーザーの範囲以上)」に変更
- Liferayを起動