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 は商用製品であり、評価しているだけなので、サポートにお金を払うことはできません。誰か提案があれば、私は感謝します。