私はこの場合を持っています:ログインフォームは使用しますDatabaseServerLoginModule
-すべての認証データは分離されたテーブルのデータベースに保存されます私はj_usertype
[ドロップダウンリストから]フラグを渡す必要があり、テーブルを切り替えて特定のユーザーを連れてくることができますj_security_check
。DatabaseServletLoginModule
何か案は....?
ログインフォームにパラメータを簡単に追加できます。もちろん、独自のログイン モジュールを作成する必要があります。問題は、追加されたパラメーターをログインモジュールに取得することです!
に追加のパラメータを追加する標準準拠の方法はありませんj_security_check
(これは残念です - 多くの人がこれを行う必要がありました)。
ただし、同じ効果を得る巧妙な方法があります。Java Authorization Contract for Containers (JACC)と呼ばれる、目立たないが有用なセキュリティ仕様があります。それは多くのことを行います。あいまいで疑わしいものの 1 つは、コール スタックのどこからでも現在の要求に関連するさまざまなオブジェクトにアクセスする方法を提供することです。PolicyContext
これは、静的メソッドを持つクラスを使用して行いますgetContext
。これは、文字列キーで識別される「ポリシー コンテキスト ハンドラ」からオブジェクトを取得します。仕様では、次のようなハンドラーが必要です。
4.6.1.3 HttpServletRequest ポリシー コンテキスト ハンドラ
すべてのサーブレット コンテナは、キー「javax.servlet.http.HttpServletRequest」で呼び出されたときに getContext メソッドが javax.servlet.http.HttpServletRequest オブジェクトを返す PolicyContextHandler を登録する必要があります。このハンドラーがアクティブ化されると、コンテナーは、コンテナーによって処理されているコンポーネント要求に対応する HttpServletRequest オブジェクトを返す必要があります。
それをまとめると、次のことができます。
HttpServletRequest request = (HttpServletRequest)PolicyContext.getContext("javax.servlet.http.HttpServletRequest")
を取得したらHttpServletRequest
、 を使用して任意のリクエスト パラメータを簡単に取得できますgetParameter
。
私は、これを提案した最初の人ではないことを指摘する義務があります。その答えは、わずかに優れた形式も示唆しています。
HttpServletRequest request = (HttpServletRequest)PolicyContext.getContext(HttpServletRequest.class.getName())