0

NTLM 認証を実行している Sharepoint サーバーに対して認証する必要がある Java コードがいくつかあります。IDE のコマンド ラインでこのコードを正常に実行していますが、Liferay 内にポートレットとしてデプロイすると、401 Unauthorized で失敗します。

コードは、呼び出し方を除いてまったく同じです。1 つは doView() ポートレット メソッド中 (ポートレット レンダリング フェーズ) で、もう 1 つは public static void main メソッドからのものです。

出力を確認するために、Jespa のログ記録をレベル 4 に設定しました。NetBeans IDE で:

HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=401
NtlmSecurityProvider: null
HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=401
NtlmSecurityProvider: NTLM2 Session Security key negotiated successfully
NtlmSecurityProvider: Initiator negotiated NTLMv2
HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=200

Liferay ログ:

HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=401
NtlmSecurityProvider: null
HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=401
18:37:58,578 ERROR [SharepointListPortlet:76] 
java.security.PrivilegedActionException: our.portlet.util.HttpException: 401 Unauthorized
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at jespa.security.RunAs.runAs(RunAs.java:261)
    at jespa.security.RunAs.runAs(RunAs.java:269)

おそらく単純なことですが、指を置くことはできません。Jespa のサンプル コードをすべて調べましたが、何も見つかりませんでした。もちろん、Jespa は商用製品であり、評価しているだけなので、サポートにお金を払うことはできません。誰か提案があれば、私は感謝します。

4

1 に答える 1

0

製品を購入していなくても、IOPLEX のサポートは引き続き役立ちます。

あなたの質問に関しては、javax.security.auth.Subject を使用して資格情報を提供する代わりに、「ヘッダー プロパティ」を使用して資格情報を提供してみてください。Liferay が新しいスレッドを作成していて、サブジェクト ベースの資格情報が削除されている可能性があります。この機能はどこにも文書化されていません (技術的にはサポートされていません) が、examples/HttpGetWithHeaderProperties.java を見てください。

于 2011-11-01T03:41:42.673 に答える