Glassfish でサーバー認証モジュール (JSR196) を有効にしました。モジュールは期待どおりに機能しますが、サーブレット内の認証モジュールの存在をプログラムで判断する必要があります。
java を使用して認証モジュールの存在を確認する方法はありますか?
Dexter meyers のアプローチは、次の条件を満たしていれば、問題なく機能するはずです。
ServerAuthModule(SAM) を使用し、AuthConfigFactorywithnull appContextおよび"HttpServlet"ornull layer引数で登録されAuthConfigProviderている) が確立されていない。AuthConfigProvider独自の、ServerAuthConfigおよびServerAuthContext実装を提供しない、およびそれ以外の場合、nullfrom が返されないことは、アプリケーションが SAM を使用しているAuthConfigFactory#getConfigProvider(String, String, RegistrationListener)とは必ずしも断言しないという意味で、誤解を招く可能性があります。必要なコンポーネント (など) も登録されています。AuthConfigProviderServerAuthConfig
さらに、アプリケーションがどの 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);