liferay 6.1.1.ga2 コミュニティ エディションを使用しています。
保険申込書を含むカスタム ポートレットがあります。
postLogin(login hook) を使用して、ログインすると、この保険申請ページにリダイレクトできます。
public void run(HttpServletRequest request, HttpServletResponse response)
throws ActionException {
long usersId = PortalUtil.getUserId(request);
User u=UserLocalServiceUtil.getUser(usersId);
Role role = RoleLocalServiceUtil.getRole(u.getCompanyId(),
"Not Insured");
if(!RoleLocalServiceUtil.hasUserRole(u.getUserId(),role.getRoleId())){
response.sendRedirect("/group/secure/insuranceForm");
}
}
これは私にとってはうまくいきます。しかし、ユーザーが url (入力されたアプリケーションの他の url) を変更しようとしてヒットした場合、その url にリダイレクトされるべきではありません。
彼がそれを完了するまで、私は保険申請のユーザーを維持したいことを意味します。ユーザーが初めてログインしたときに、パスワード画面、リマインダー *質問* 画面、または同意*ページ* に表示されるのと同じ機能。
保険申請ページでも同じことを行います。これどうやってするの?liferay 6.1.1 を使用しています。
そのためのextプラグインを作成したPortalRequestProcessor.javaファイルを試しました。
保護された String processPath(HttpServletRequest request, HttpServletResponse response){} メソッドがあるので、条件も適用して、この方法で私の保険フォーム ページに過ぎない静的文字列を返そうとしました。
if (!RoleLocalServiceUtil.hasUserRole(user.getUserId(),roles.getRoleId()) {
return _PATH_INSURANCE_FORM;
}
.....
//static variables declaration
private static final String _PATH_PORTAL_LOGOUT = "/portal/logout";
private static final String _PATH_INSURANCE_FORM =
"/group/app/insurance?insurances=insuranceform";
しかし、それは次のようにエラーを示します
コンテンツ エンコーディング エラー 表示しようとしているページは、無効またはサポートされていない形式の圧縮を使用しているため、表示できません。
ログレベルでは次のように表示されます。
ERROR [http-bio-8080-exec-9][RequestProcessor:676] Invalid path was requested /group/app/insurance?insurances=insuranceform
ERROR [http-bio-8080-exec-9][PortalRequestProcessor:550] User ID 16040
And at browser console it's showing "NetworkError: 404 Not Found - http://189.0.25.23:8080/group/app/insurance?insurances=insuranceform"
しかし、戻りパスを既存のパス (例: :_PATH_PORTAL_LOGOUT) に置き換えると、ユーザーは適切にログアウトされます。
私も LoginPostAction(login-hook) で同じ条件を確認し、保険ページにリダイレクトしています。
これらの静的文字列変数の宣言場所は別の場所ですか?
では、この問題をどのように克服できるか教えてもらえますか?
ありがとう、