0

WebSphere Portal Server にデプロイする複数のポートレットを作成しています。各ポートレットは独自の WAR にデプロイされています。ここで、ユーザーがポータルにログオンしているときにアクセスするすべてのポートレットを追跡する必要があります。これを使用してポートレットからセッション識別子を取得しようとしていました:

HttpServletRequest servletRequest = PortletUtils.getHttpServletRequest(request);
String sessionId = servletRequest.getSession().getId();

しかし、ログインした後、sessionIdアクセスしたすべてのポートレット/WAR から異なる値を取得しています。WAR ごとに 1 つのセッション スコープがあるため、これは理にかなっていると思います。

では、(ポートレットではなく) ポータル セッションの識別子を取得するにはどうすればよいでしょうか? Cookie はすべての HTTP リクエストで同じであることがJSESSIONIDわかりますが、それがサーブレットまたはポートレット API を介して公開されているかどうかはわかりません。

4

1 に答える 1

1

ポータルにログインしていないユーザーには、そのようなセッションはありません。公開セッションを有効にすることで、Portal で匿名ユーザーのセッション情報を追跡できます。

http://www-10.lotus.com/ldd/portalwiki.nsf/xpDocViewer.xsp?lookupName=IBM+WebSphere+Portal+7+Product+Documentation#action=openDocument&res_title=Portal_configuration_services_wp7&content=pdcontent

プロパティを変更するには、ナビゲーター サービスを参照してください。

また、これはテーマまたはポートレット フィルターでより簡単に実現できると思います。これらの場所のいずれかでポータル セッションにアクセスできるはずですが、すべてのポートレットにコードを含める必要はありません。

グローバル ポートレット フィルタを作成するためのリンクを次に示します。

http://wpcertification.blogspot.com/2010/11/applying-global-filter-to-all-portlets.html

更新: 他の大きなフレームワークと同様に、多くのオプションがあります。私が考えたり見つけたりできることのブレインダンプを提供します。試してみて、どちらの方法が好ましいかを確認する必要がある場合があります。

JSESSIONID Cookie は、セッション全体を通じてユーザーに対して同じである必要があります。セッションが期限切れになると、新しい JSESSIONID Cookie が取得されます。これを使用すると、単一のセッションでユーザーを追跡できますが、複数のセッションでは追跡できない可能性があります。

PortletRequest オブジェクトの使用getUserPrinipal()または非使用を検討できます。getRemoteUser()私はしばらくこれらの方法を使用していないので、それらからどのような情報が得られるかを確認する必要があります.

もありrequest.getAttribute(PortletRequest.USER_INFO)ます。返されるマップで特定の属性を使用できるようにするには、portlet.xml でいくつかの構成を行う必要があります。ここに例があります。現在のプロジェクトの例のように、姓名の代わりに ibm-primaryEmail を使用しています。

最後に、Portal に組み込まれている PUMA API の使用を検討できます。コーディングが少し重くなり、明らかにコンテナ固有のものになりますが、ユーザーに関連する必要があるほぼすべての作業を実行できるはずです。

于 2013-03-09T05:11:31.397 に答える