3.4. テーマの作成
テーマは、以下で設定されます。
- HTML テンプレート (Freemarker テンプレート)
- イメージ
- メッセージバンドル
- スタイルシート
- スクリプト
- テーマのプロパティー
すべてのページを置き換える予定がない限り、別のテーマを拡張してください。Red Hat Single Sign-On テーマを拡張する場合が多くですが、ページの外観と操作感を大幅に変更している場合は、ベーステーマの拡張も検討してみてください。ベーステーマは主に HTML テンプレートとメッセージバンドルで設定されており、Red Hat Single Sign-On テーマにはイメージとスタイルシートが含まれます。
テーマを拡張する場合は、個別のリソース (テンプレート、スタイルシートなど) をオーバーライドできます。HTML テンプレートの上書きをすることにした場合は、新しいリリースにアップグレードする際にカスタムテンプレートを更新する必要があることに注意してください。
テーマを作成する際に、Red Hat Single Sign-On を再起動せずに themes
ディレクトリーから直接テーマリソースを編集できるため、キャッシングを無効にするとよいでしょう。
手順
-
standalone.xml
を編集します。 theme
の場合は、staticMaxAge
を-1
に設定し、cacheTemplates
およびcacheThemes
をfalse
に設定します。<theme> <staticMaxAge>-1</staticMaxAge> <cacheThemes>false</cacheThemes> <cacheTemplates>false</cacheTemplates> ... </theme>
themes
ディレクトリーにディレクトリーを作成します。ディレクトリーの名前はテーマの名前になります。たとえば、
mytheme
というテーマを作成するには、themes/mytheme
ディレクトリーを作成します。theme ディレクトリーには、テーマが提供するタイプごとにディレクトリーを作成します。
たとえば、ログインタイプを
mytheme
テーマに追加するには、themes/mytheme/login
ディレクトリーを作成します。それぞれのタイプに対して、テーマの設定を可能にする
theme.properties
ファイルを作成します。たとえば、作成したテーマ
themes/mytheme/login
を設定して基本テーマを拡張し、いくつかの共通リソースをインポートするには、次の内容でファイルthemes/mytheme/login/theme.properties
を作成します。parent=base import=common/keycloak
これで、ログインタイプのサポートのあるテーマが作成されました。
- 管理コンソールにログインして、新しいテーマをチェックアウトします。
- レルムを選択します。
- メニューで Realm Settings をクリックします。
- Themes タブをクリックします。
- Login Theme については mytheme を選択し、Save をクリックします。
レルムのログインページを開きます。
これは、アプリケーションからログインするか、Account Management コンソール (
/realms/{realm name}/account
) を開いて実行できます。-
親テーマの変更の効果を確認するには、
parent=keycloak
intheme.properties
に設定し、ログインページを更新します。
パフォーマンスに大きく影響するため、必ず実稼働環境でキャッシュを再度有効にしてください。
3.4.1. テーマのプロパティー
テーマプロパティーは、テーマディレクトリーの <THEME TYPE>/theme.properties
ファイルで設定されます。
- parent - 拡張する親テーマ
- import - 別のテーマからのリソースのインポート
- styles - 追加するスタイルのスペース区切りリスト
- locales - サポートされるロケールのコンマ区切りリスト
特定の要素タイプに使用される css クラスを変更するために使用できるプロパティーのリストがあります。これらのプロパティーの一覧は、keycloak テーマ (themes/keycloak/<THEME TYPE>/theme.properties
) の対応するタイプの theme.properties ファイルを参照してください。
独自のカスタムプロパティーを追加して、カスタムテンプレートから使用することもできます。
これを行うには、次の形式を使用してシステムプロパティーまたは環境変数を置き換えることができます。
-
${some.system.property}
- システムプロパティーの場合。 -
${env.ENV_VAR}
- 環境変数の場合。
システムプロパティーまたは環境変数が ${foo:defaultValue}
で見つからない場合は、デフォルト値を指定することもできます。
デフォルト値が指定されておらず、対応するシステムプロパティーまたは環境変数がない場合は、何も置き換えられず、テンプレートの形式が使用されることになります。
以下は、実現できる例の一部です。
javaVersion=${java.version} unixHome=${env.HOME:Unix home not found} windowsHome=${env.HOMEPATH:Windows home not found}
3.4.2. テーマにスタイルシートを追加
テーマに 1 つ以上のスタイルシートを追加できます。
手順
-
テーマの
<THEME TYPE>/resources/css
ディレクトリーにファイルを作成します。 それを
theme.properties
のstyles
プロパティーに追加します。たとえば、
styles.css
をmytheme
に追加するには、以下の内容を含むthemes/mytheme/login/resources/css/styles.css
を作成します。.login-pf body { background: DimGrey none; }
themes/mytheme/login/theme.properties
を編集し、以下を追加します。styles=css/styles.css
変更を確認するには、レルムのログインページを開きます。
適用されるスタイルは、カスタムのスタイルシートからのものだけであることに注目してください。
親テーマのスタイルを含めるには、そのテーマのスタイルを読み込みます。
themes/mytheme/login/theme.properties
を編集し、styles
を次のように変更します。styles=web_modules/@fontawesome/fontawesome-free/css/icons/all.css web_modules/@patternfly/react-core/dist/styles/base.css web_modules/@patternfly/react-core/dist/styles/app.css node_modules/patternfly/dist/css/patternfly.min.css node_modules/patternfly/dist/css/patternfly-additions.min.css css/login.css css/styles.css
注記親スタイルシートのスタイルをオーバーライドするには、スタイルシートが最後にリストされていることを確認してください。
3.4.3. テーマにスクリプトを追加
1 つ以上のスクリプトをテーマに追加できます。
手順
-
テーマの
<THEMETYPE>/resources/js
ディレクトリーにファイルを作成します。 ファイルを
theme.properties
のscripts
プロパティーに追加します。たとえば、
script.js
をmytheme
に追加するには、以下の内容でthemes/mytheme/login/resources/js/script.js
を作成します。alert('Hello');
次に、
themes/mytheme/login/theme.properties
を編集し、以下を追加します。scripts=js/script.js
3.4.4. テーマにイメージを追加
テーマがイメージを使用できるようにするには、テーマの <THEME TYPE>/resources/img
ディレクトリーにイメージを追加します。これらはスタイルシート内から使用することも、HTML テンプレートで直接使用することもできます。
たとえば、イメージを mytheme
に追加するには、イメージを themes/mytheme/login/resources/img/image.jpg
にイメージをコピーします。
次に、以下を使用して、カスタムスタイルシート内からこのイメージを使用できます。
body { background-image: url('../img/image.jpg'); background-size: cover; }
または、HTML テンプレートで直接使用するには、以下をカスタム HTML テンプレートに追加します。
<img src="${url.resourcesPath}/img/image.jpg">
3.4.5. メッセージ
テンプレートのテキストは、メッセージバンドルからロードされます。別のテーマを拡張するテーマは、親のメッセージバンドルからすべてのメッセージを継承し、<THEME TYPE>/messages/messages_en.properties
をテーマに追加して個別のメッセージを上書きできます。
たとえば、ログインフォーム上の Username
を、mytheme
の Your Username
に置き換えるには、以下の内容で themes/mytheme/login/messages/messages_en.properties
ファイルを作成します。
usernameOrEmail=Your Username
メッセージの使用時に {0}
や {1}
などのメッセージ値内では引数に置き換えられます。たとえば、Log in to {0}
の {0} はレルム名に置き換えられます。
これらのメッセージバンドルのテキストは、レルム固有の値で上書きすることができます。レルム固有の値は、UI や API で管理できます。
3.4.6. レルムに言語を追加
前提条件
- レルムの国際化を有効にするには、サーバー管理ガイド を参照してください。
手順
-
テーマのディレクトリーに
<THEME TYPE>/messages/messages_<LOCALE>.properties
ファイルを作成します。 このファイルを
<THEME TYPE>/theme.properties
のlocales
プロパティーに追加します。言語をユーザーが利用できるようにするには、レルムのlogin
、account
およびemail
テーマがその言語をサポートしていなければならないため、これらのテーマタイプに言語を追加する必要があります。たとえば、
mytheme
テーマにノルウェー語の翻訳を追加するには、以下の内容でthemes/mytheme/login/messages/messages_no.properties
ファイルを作成します。usernameOrEmail=Brukernavn password=Passord
メッセージの翻訳を省略すると、英語が使用されます。
themes/mytheme/login/theme.properties
を編集し、以下を追加します。locales=en,no
-
account
とemail
のテーマタイプにも同じものを追加します。そのためには、themes/mytheme/account/messages/messages_no.properties
およびthemes/mytheme/email/messages/messages_no.properties
を作成します。これらのファイルを空のままにすると、英語のメッセージが使用されます。 -
themes/mytheme/login/theme.properties
をthemes/mytheme/account/theme.properties
およびthemes/mytheme/email/theme.properties
にコピーします。 言語セレクターの翻訳を追加します。これには、英語の翻訳にメッセージを追加します。これには、以下を
themes/mytheme/account/messages/messages_en.properties
およびthemes/mytheme/login/messages/messages_en.properties
に追加します。locale_no=Norsk
デフォルトでは、メッセージプロパティーファイルは ISO-8859-1 を使用してエンコードする必要があります。特別なヘッダーを使用してエンコーディングを指定することもできます。たとえば、UTF-8 エンコーディングを使用するには、次のコマンドを実行します。
# encoding: UTF-8 usernameOrEmail=....
関連情報
- 現在のロケールの選択方法の詳細については、ロケールセレクター を参照してください。
3.4.7. カスタム ID プロバイダーアイコンの追加
Red Hat Single Sign-On は、ログイン画面に表示されるカスタム ID プロバイダーのアイコンの追加に対応しています。
手順
-
ログイン
theme.properties
ファイル (themes/mytheme/login/theme.properties
など) の中で、キーパターンkcLogoIdP-<alias>
でアイコンクラスを定義します。 myProvider
というエイリアスを持つ Identity プロバイダーの場合は、カスタムテーマのtheme.properties
ファイルに行を追加できます。以下に例を示します。kcLogoIdP-myProvider = fa fa-lock
すべてのアイコンは、PatternFly4 の公式 Web サイトで公開されています。ソーシャルプロバイダー用のアイコンは、ベースとなるログインテーマのプロパティー (themes/keycloak/login/theme.properties
) ですでに定義されており、自身で選択することができます。
3.4.8. カスタム HTML テンプレートの作成
Red Hat Single Sign-On は、HTML を生成するために Apache Freemarker を使用します。<THEME TYPE>/<TEMPLATE>.ftl
を作成して、独自のテーマで個別のテンプレートを上書きできます。使用されるテンプレートの一覧は、themes/base/<THEME TYPE>
を参照してください。
手順
- テンプレートをベーステーマから独自のテーマにコピーします。
必要な変更を適用します。
たとえば、
mytheme
テーマのカスタムログインフォームを作成するには、themes/base/login/login.ftl
をthemes/mytheme/login
にコピーし、エディターで開きます。最初の行 (<#import …>) の後に、
<h1>HELLO WORLD!</h1>
を以下のように追加します。<#import "template.ftl" as layout> <h1>HELLO WORLD!</h1> ...
- 変更したテンプレートをバックアップします。Red Hat Single Sign-On の新規バージョンにアップグレードする場合は、必要に応じて元のテンプレートに変更を適用できるようにカスタムテンプレートを更新する必要があるかもしれません。
関連情報
- テンプレートの編集方法の詳細については、FreeMarker Manual を参照してください。
3.4.9. 電子メール
パスワードリカバリーメールなどのメールの件名および内容を編集するには、テーマの email
タイプにメッセージバンドルをを追加します。メールごとに 3 つのメッセージがあります。このサブジェクトの 1 つ。1 つはプレーンテキストの本文用に、もう 1 つは html 本文用です。
利用可能なすべてのメールを確認するには、themes/base/email/messages/messages_en.properties
を確認します。
たとえば、mytheme
テーマのパスワードリカバリーメールを変更するには、以下の内容で themes/mytheme/email/messages/messages_en.properties
を作成します。
passwordResetSubject=My password recovery passwordResetBody=Reset password link: {0} passwordResetBodyHtml=<a href="{0}">Reset password</a>