UADフレームワークの追加
Liferay の User Associated Data (UAD) 管理ツールを使用すると、 ユーザー データを管理および削除 できます。 本ツールは、Liferayの多くのアプリケーション(ブログ、ドキュメントとメディア、掲示板など)ですぐに利用できます。 このフレームワークは、お客様のカスタムアプリケーションに適用することも可能です。
このタスクは、 サービス ビルダーを使用すると簡単になります。 サービスビルダーがアプリケーションのためにUADを有効にするために必要なコードを自動的に生成する方法については、以下の例を参照してください。
サンプルコードをダウンロードする
新しいLiferay DXPインスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:2025.q1.6-lts
メールアドレス test@liferay.com とパスワード testを使用して、 http://localhost:8080 で Liferay にサインインします。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、以下の手順に従います。
-
UAD Frameworkをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-h6d2.zip -Ounzip liferay-h6d2.zip -
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
-
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.h6d2.api_1.0.0 [1433] STARTED com.acme.h6d2.service_1.0.0 [1434] STARTED com.acme.h6d2.uad_1.0.0 [1435] STARTED com.acme.h6d2.web_1.0.0 [1436] -
ブラウザで
https://localhost:8080を開きます。 -
H6D2ポートレットをページに追加します。 サンプルポートレットは、サンプルウィジェットの下にあります。

-
テスト用に新しいユーザー を作成します。
-
新規ユーザーとしてログインし、H6D2ポートレットにコンテンツを追加してください。
-
管理者として再度ログインし、 コントロール パネル → ユーザー → ユーザーと組織に移動します。
-
新しいユーザーの アクション (
) → 個人データの削除をクリックします。 [OK] をクリックして、ユーザーの無効化を確認します。 -
UAD管理ツールが表示されます。 H6D2ポートレットでは、新規ユーザーが追加したデータの表示、匿名化、削除を行うことができます。

サービスモデルの定義の変更
このチュートリアルでは、サービスビルダーを使用して作成したアプリケーションが動作していることを前提としています。 UADを有効にするには、まず、次のようにエンティティを変更します。
-
-serviceフォルダにあるservice.xmlファイルを開いてください。 -
UADを有効にする
entityパラメータには2つあります。entity属性説明 uad-application-nameエンティティタイプが所属するアプリケーションの名前を指定します。 uad-package-path生成されたUADクラスのパッケージパスを指定します。
<entity local-service="true" name="H6D2Entry" remote-service="false" uad-application-name="H6D2" uad-package-path="com.acme.h6d2" uuid="true">
-
以下のデータフィールドがまだ定義されていない場合は、追加してください。
<!-- Group instance --> <column name="groupId" type="long" /> <!-- Audit fields --> <column name="companyId" type="long" /> <column name="userId" type="long" /> <column name="userName" type="String" /> <column name="createDate" type="Date" /> <column name="modifiedDate" type="Date" />UADフレームワークには、ユーザーデータを追跡し、匿名化する上記のフィールドが必要です。
-
次に、匿名化するデータフィールドを指定します。 これは、2つの属性を用いて行われます。
-
uad-anonymize-field-name=[fieldName]属性は、UAD自動匿名化処理で匿名ユーザーの値で置換されるフィールドを表します。 例えば、uad-anonymize-field-name=fullNameと設定すると、そのフィールドの値が匿名ユーザーのフルネームに置換されます。 匿名ユーザーの詳細については、 匿名ユーザーの設定 を参照してください。 -
uad-nonanonymizable="true"属性は、自動的に匿名化されないが、管理者が確認する必要があるデータを示します。
-
<column name="userName" type="String" uad-anonymize-field-name="fullName" />
UADモジュールを生成する
-
-serviceフォルダから移動して、-uadフォルダを新規に作成します。 -
モジュール用の
bnd.bndファイルを作成します。
Bundle-Name: Liferay H6D2 UAD
Bundle-SymbolicName: com.acme.h6d2.uad
Bundle-Version: 1.0.0
-dsannotations-options: inherit
-dsannotations-options: inherit アノテーションを必ず含めてください。 OSGi サービス コンポーネント クラスは、クラス階層から OSGi 宣言型サービス アノテーションを継承します。
- モジュール用の
build.gradleファイルを作成します。
dependencies {
compileOnly group: "com.liferay.portal", name: "release.portal.api"
compileOnly project(":h6d2-api")
}
プロジェクトの -api モジュールを含め、必要な依存関係を追加することを確認してください。
-
モジュールの
-serviceフォルダに戻り、Service Builder を実行して UAD モジュールを生成してください。../gradlew buildService出力:
> Task :h6d2-service:buildService Building H6D2Entry Writing ../h6d2-uad/src/main/java/com/acme/h6d2/uad/anonymizer/BaseH6D2EntryUADAnonymizer.java Writing ../h6d2-uad/src/main/java/com/acme/h6d2/uad/exporter/BaseH6D2EntryUADExporter.java Writing ../h6d2-uad/src/main/java/com/acme/h6d2/uad/anonymizer/H6D2EntryUADAnonymizer.java Writing ../h6d2-uad/src/main/java/com/acme/h6d2/uad/exporter/H6D2EntryUADExporter.java Writing ../h6d2-uad/src/main/java/com/acme/h6d2/uad/display/BaseH6D2EntryUADDisplay.java Writing ../h6d2-uad/src/main/java/com/acme/h6d2/uad/display/H6D2EntryUADDisplay.java Writing src/main/resources/service.properties Writing ../h6d2-uad/src/main/java/com/acme/h6d2/uad/constants/H6D2UADConstants.java
ポートレットを変更する
フォームからアプリケーション固有のデータフィールドを渡す場合、 service.xml ファイルで追加したユーザー関連のデータフィールドも渡す必要があります。
public class H6D2Portlet extends MVCPortlet {
public void addH6D2Entry(
ActionRequest actionRequest, ActionResponse actionResponse)
throws PortalException {
ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
WebKeys.THEME_DISPLAY);
User user = _portal.getUser(actionRequest);
H6D2Entry h6d2Entry = _h6d2EntryLocalService.createH6D2Entry(
_counterLocalService.increment());
h6d2Entry.setCompanyId(user.getCompanyId());
h6d2Entry.setUserId(user.getUserId());
h6d2Entry.setUserName(user.getFullName());
h6d2Entry.setGroupId(themeDisplay.getSiteGroupId());
h6d2Entry.setName(ParamUtil.getString(actionRequest, "name"));
_h6d2EntryLocalService.addH6D2Entry(h6d2Entry);
}
@Reference
private CounterLocalService _counterLocalService;
@Reference
private H6D2EntryLocalService _h6d2EntryLocalService;
@Reference
private Portal _portal;
}
H6D2 Portletには_h6d2EntryLocalServiceと呼ばれるH6D2EntryLocalService フィールドとaddH6D2Entryと呼ばれるアクション処理メソッドがあります。 addH6D2Entryメソッドは H6D2EntryLocalServiceのaddH6D2Entryメソッドを呼び、 ActionRequestから受け取ったデータフィールドを渡しています。
ポートレットの view.jsp には、ユーザーが ActionRequest から H6D2 Portletに送信できるフォームが含まれています。
<h5>Add H6D2 Entry</h5>
<portlet:actionURL name="addH6D2Entry" var="addH6D2EntryURL" />
<aui:form action="<%= addH6D2EntryURL %>">
<aui:input name="name" type="text" />
<aui:button type="submit" value="submit" />
</aui:form>
ActionRequest を actionURL と共に送信すると、ポートレットの addH6D2Entry メソッドを呼び出せるようになります。