Glassfish でサーバー認証モジュール (JSR196) を有効にしました。モジュールは期待どおりに機能しますが、サーブレット内の認証モジュールの存在をプログラムで判断する必要があります。
java を使用して認証モジュールの存在を確認する方法はありますか?
Dexter meyers のアプローチは、次の条件を満たしていれば、問題なく機能するはずです。
ServerAuthModule
(SAM) を使用し、AuthConfigFactory
withnull appContext
および"HttpServlet"
ornull layer
引数で登録されAuthConfigProvider
ている) が確立されていない。AuthConfigProvider
独自の、ServerAuthConfig
およびServerAuthContext
実装を提供しない、およびそれ以外の場合、null
from が返されないことは、アプリケーションが SAM を使用しているAuthConfigFactory#getConfigProvider(String, String, RegistrationListener)
とは必ずしも断言しないという意味で、誤解を招く可能性があります。必要なコンポーネント (など) も登録されています。AuthConfigProvider
ServerAuthConfig
さらに、アプリケーションがどの SAM を使用するように構成されているかを正確に知る必要がある場合、まず第一に、ServerAuthContext
カプセル化された SAM を公開しないため、これを行うための標準的な方法はありません (そして、それを介した取得ServerAuthConfig#getAuthContext(String, Subject, Map)
は簡単ではありません) 。とにかく、JASPIC のサーブレット プロファイルはauthContextIDを任意のままにするため)。これは基本的に、その機能を得るために独自のものを実装する必要があることを意味しますServerAuthContext
(さらに2つの間接化とともに)、またはSAMを表す識別子を or に添付するHttpServletRequest
必要HttpSession
があります。リクエスト。javax.servlet.http.authType MessageInfo
コールバック プロパティを使用して返される値を設定する場合に注意してください。HttpServletRequest#getAuthType()
代わりに、認証が成功した場合、つまり、SAMvalidateRequest(...)
が非null
呼び出し元Principal
および/または少なくとも 1 つの AS グループを確立してPrincipal
を返した場合にのみ機能しますAuthStatus.SUCCESS
。そうしないとnull
、コールバック プロパティを設定したにもかかわらず、 が返されます。
これは、をチェックすることで可能になるはずです。これは、次のAuthConfigProvider
方法で実行できます。
最初にヘルパー メソッドを定義します。
String getAppContextID(ServletContext context)
return context.getVirtualServerName() + " " + context.getContextPath();
}
次に、次のように ServletContext が使用可能になったら、このコードを呼び出します@WebListener
。
AuthConfigFactory factory = AuthConfigFactory.getFactory();
String appContextID = getAppContextID(context);
AuthConfigProvider provider = factory.getConfigProvider("HttpServlet", appContextID, null);