フォーム・ベースのログイン・メカニズムを使用すると、 ログイン画面のルック・アンド・フィールを制御できます。 フォーム・ベースのログインでは、ユーザー ID およびパスワード情報 を取り出すために使用するログイン・ページを指定します。認証が失敗したときに 表示されるエラー・ペ ージを指定することもできます。
認証の前後に追加の認証 または追加処理が必要な場合は、オプションでサーブレット・フィルターを使用できます。サーブレット・フィルターは、 要求と応答を動的にインターセプトし、その要求または応答に含まれている 情報を変換または使用することができます。 1 つ以上のサーブレット・フィルターを、サーブレットまたはサーブレットの グループに付加することができます。 サーブレット・フィルターは、JavaServer Pages (JSP) ファイルおよび HTML ページに付加することもできます。付加されたすべてのサーブレット・フィルターは、 サーブレットを起動する前に呼び出されます。
フォーム・ベースのログインとサーブレット・フィルターは両方とも、 サーブレット・バージョン 2.3 仕様に準拠するすべての Web コンテナーによって サポートされます。 フォーム・ログイン・サーブレットは認証を実行し、サーブレット・フィルターは、 追加の認証または情報の監査やロギングを実行します。
サーブレット・フィルターを使用して事前ログインおよび事後ログインのアクション を実行するには、これらのフィルターを、フォーム・ログイン・ページ・サポート 用または /j_security_check URL 用のいずれかに構成してください。j_security_check は、ユーザー名を含む j_username パラメーター、 およびパスワードを含む j_password パラメーターを指定した、 フォーム・ログイン・ページでポストされます。サーブレット・フィルターは、 ユーザー名パラメーターおよびパスワード情報を使用して、さらに多くの認証またはその他の特別なニーズ を実行できます。
import javax.servlet.*; public class LoginFilter implements Filter { protected FilterConfig filterConfig; // Called once when this filter is instantiated. // If mapped to j_security_check, called // very first time j_security_check is invoked. public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } public void destroy() { this.filterConfig = null; } // Called for every request that is mapped to this filter. // If mapped to j_security_check, // called for every j_security_check action public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // perform pre-login action here chain.doFilter(request, response); // calls the next filter in chain. // j_security_check if this filter is // mapped to j_security_check. // perform post-login action here. } }