[解決済み] Java EE / JSF で j_security_check を使用してユーザー認証を行う。
質問
JSF 2.0(およびコンポーネントが存在する場合)とJava EE 6のコアメカニズム(ログイン/パーミッションの確認/ログアウト)を使用するWebアプリケーションのユーザー認証に関する現在のアプローチは、JPAエンティティにユーザー情報を保持しているのかどうか疑問に思っています。Oracle Java EEチュートリアルは、これに関して少し疎いです(サーブレットのみを扱います)。
これは なし Spring-Security (acegi) や Seam のような他のフレームワークを利用しつつ、できれば新しい Java EE 6 プラットフォーム (web profile) にこだわろうと思っています。
どのように解決するのか?
Webを検索し、さまざまな方法を試した結果、Java EE 6の認証には次のような方法があります。
セキュリティ・レルムを設定する。
私の場合、データベース内にユーザーを登録していました。そこで、このブログの記事に従って、データベースのテーブルにあるユーザー名とMD5ハッシュ化したパスワードに基づいてユーザーを認証できるJDBC Realmを作成しました。
http://blog.gamatam.com/2009/11/jdbc-realm-setup-with-glassfish-v3.html
注:この投稿では、データベースのユーザーテーブルとグループテーブルについて述べています。私は、UserType enum属性を持つUserクラスが、javax.persistenceアノテーションを介してデータベースにマッピングされていました。私は、userTypeカラムをgroupカラムとして使用し、ユーザとグループに対して同じテーブルを持つレルムを構成し、それはうまく機能しました。
フォーム認証を使用します。
上記ブログの記事に引き続き、web.xml と sun-web.xml を設定しますが、BASIC 認証ではなく、FORM を使用します(実は、どちらでも良いのですが、私は結局 FORM を使用しました)。JSF ではなく、標準の HTML を使用します。
それから、上記のBalusCのヒントで、データベースからユーザー情報を遅延して初期化することを利用します。彼は、フェースコンテキストからプリンシパルを取得するマネージドビーンの中でそれを行うことを提案しました。私はその代わりに、各ユーザーのセッション情報を保存するためにステートフルセッションBeanを使用しましたので、セッションコンテキストを注入しました。
@Resource
private SessionContext sessionContext;
プリンシパルがあれば、ユーザ名を確認し、EJB Entity Managerを使ってデータベースからユーザ情報を取得し、私の
SessionInformation
EJBです。
ログアウトします。
また、ログアウトするのに最適な方法はないかと調べてみました。その結果、Servletを使うのが一番いいということがわかりました。
@WebServlet(name = "LogoutServlet", urlPatterns = {"/logout"})
public class LogoutServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
// Destroys the session for this user.
if (session != null)
session.invalidate();
// Redirects back to the initial page.
response.sendRedirect(request.getContextPath());
}
}
質問の日付からすると、私の回答は本当に遅いのですが、私と同じようにGoogleからここにたどり着いた他の人々の助けになることを願っています。
では、また。
ヴィトール・ソウザ
関連
-
[解決済み] <f:facet>は何をするもので、どのような場合に使用するのですか?
-
[解決済み] javax.validation.ConstraintViolationException
-
[解決済み] p:dashboardが終了してもソート順を維持する。
-
[解決済み] ビーンスコープを正しく選ぶには?
-
[解決済み] commandButton/commandLink/ajax アクション/リスナーメソッドが呼び出されないか、入力値が設定/更新されない。
-
[解決済み】BASIC認証でWebサイトからユーザーをログアウトさせる方法は?
-
[解決済み】node.jsのユーザー認証ライブラリは?
-
[解決済み] JSF2 FaceletsでJSTL...意味があるのか?
-
[解決済み] Java EE / JSF で j_security_check を使用してユーザー認証を行う。
-
[解決済み] javax.el.PropertyNotFoundException の識別と解決。ターゲットに到達できない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] javax.faces.application.ViewExpiredException: ビューを復元できませんでした
-
[解決済み] JSF 2.2でターゲットが到達できない、識別子がヌルに解決される [重複] 。
-
[解決済み] java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config [duplicate].
-
[解決済み] javax.validation.ConstraintViolationException
-
[解決済み] actionとactionListenerの違い
-
[解決済み] ビーンスコープを正しく選ぶには?
-
[解決済み】JSFリソースライブラリは何のためにあり、どのように使用すべきですか?
-
[解決済み】PrimeFacesのprocess/updateとJSFのf:ajax execute/renderの属性を理解する。
-
[解決済み] Java EE / JSF で j_security_check を使用してユーザー認証を行う。
-
[解決済み] <f:metadata>、<f:viewParam>、<f:viewAction>は何に使えるのでしょうか?