サーブレットコンテナには独自の認証機能がありますが、業務要件と合致するケースが多いとは言えず、結局独自の認証処理を作成することが多いと思います。
しかし認証に対応したAPIを使う事ができなくなり、認証結果に対する処理までゴリゴリと書いていたりしていませんか?例えばStrutsのタグライブラリではlogic:presentタグでロールベールの判定処理が書けますが、利用できずにlogic:equalsタグでなんとかやり過ごしている事が多いと思います。
認証に関わる部分はjavax.servlet.http.HttpServletRequest#getUserPrincipal()とjavax.servlet.http.HttpServletRequest#isUserInRole(java.lang.String)で表現されますが、通常このメソッドはサーブレットコンテナの認証機能による認証結果が利用されます。
しかしサーブレットにはサーブレットフィルタというものがあり、その中でjavax.servlet.http.HttpServletRequestのインスタンスをjavax.servlet.http.HttpServletRequestWrapperでラップすることが出来ます。ラッパークラスを予め継承したクラスを用意し、#isUserInRole(java.lang.String)と#getUserPrincipal()をオーバーライドしておきます。そのメソッドの中で独自の認証処理の認証結果を呼び出せばよいのです。
この方法を使用してもサーブレットコンテナのセキュリティ機構との連動はできません。それでも標準のAPIに独自の認証機構を組み込めるのはメリットではないでしょうか。