Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java JSP/Servlet

JavaのServletでフォーム認証(Form認証)をカスタム実装する方法

投稿日:2021年5月6日 更新日:

<目次>

(1) JavaのServletでフォーム認証(Form認証)をカスタム実装する方法
 (1-1) フォーム認証の概要
 (1-2) フォーム認証をカスタムする際のポイント
 (1-3) 構文
 (1-4) サンプルプログラム

(1) JavaのServletでフォーム認証(Form認証)をカスタム実装する方法

今回はJSP/Servletのフォーム認証におけるログイン処理を独自でカスタム実装する方法をご紹介します。

(1-1) フォーム認証の概要

最もベーシックなフォーム認証では、「web.xml」で認証の範囲やロールなどを設定してフォーム認証を有効化し、ユーザ情報はTomcatの場合デフォルトでは「tomcat-users.xml」に設定し、「ログイン画面」と「ログインエラー画面」を用意する事で、最低限のログイン処理を手軽に実現する事ができます。

この基本的なフォーム認証の設定方法については、下記の別記事にて詳しくご紹介しています。
 

 

(表)最も基本的なフォーム認証の設定項目
・web.xml フォーム認証の設定(認証範囲やロールの設定など)
・tomcat-users.xml ログインユーザの設定(ID、パスワード、付与ロール)など
・ログイン画面 ログインをするための画面(jsp)
・ログインエラー画面 ログインに失敗した時に遷移する画面

目次にもどる

(1-2) フォーム認証をカスタムする際のポイント

ポイントとなるのは上記のベーシックなフォーム認証では「ログイン画面」の<form>タグのaction属性にJavaEEで定義されている「j_security_check」というアクションを用いて認証を行っている点です。

この「j_security_check」はServletのAPIで、サーブレットコンテナ(Tomcatなど)に組み込まれています。Tomcatの場合は「org.apache.catalina.authenticator.FormAuthenticator」クラスに含まれています。

フォーム認証を独自にカスタムするために行うのはただ1つ、この「j_security_check」アクションを「独自のカスタム認証サーブレット」に置き換えるのみです。

目次にもどる

(1-3) 構文

HttpServletRequestインターフェイスの認証用のメソッドを使ってログイン用サーブレットを実装していきます。具体的には以下のメソッドを使用します。

[HttpServletRequestのインスタンス].login(user, passwd);
 
引数である「user」、「passwd」にはそれぞれログイン画面からgetParameter等で取得したIDとパスワードの情報を与えます。
 
(補足)
[HttpServletRequestのインスタンス]と書いていますが、HttpServletRequestはJavaEEのインターフェイスでTomcatでは「org.apache.catalina.connector.Request」クラスにて実装されており、そのインスタンスを意味します。
 

(1-4) サンプルプログラム

▲1、▲2の部分はそれぞれご自身の「ログイン成功時に表示する画面」、「ログイン失敗時に表示する画面」にそれぞれ置き換えてください。

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/CustomAuthentication")
public class CustomAuthentication extends HttpServlet {
  private static final long serialVersionUID = 1L;

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    //# 遷移先画面のページ名を定義
    String forward_success = "/auth/AfterLogin.jsp(▲1)";
    String forward_error = "/LoginError2.jsp(▲2)";
    String user = request.getParameter("j_username");
    String passwd = request.getParameter("j_password");
    try {
      //# 認証の実施
      request.login(user, passwd);
      //# 画面遷移(ログイン成功)
      RequestDispatcher dispatch = request.getRequestDispatcher(forward_success);
      dispatch.forward(request, response);
    }catch(ServletException e) {
      e.printStackTrace();
      //# 画面遷移(ログイン失敗)
      RequestDispatcher dispatch = request.getRequestDispatcher(forward_error);
      dispatch.forward(request, response);
    }
  }
}

以下、実行結果のイメージです。

・ログイン
(図141)


・ログイン成功
(図142)

(操作動画)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JavaScriptのAddEventListenerの用途や使用例について

<目次> (1) JavaScriptのAddEventListenerの用途や使用例について  (1-1) 概要  (1-2) 構文  (1-3) サンプルプログラム (1) JavaScriptの …

Javaのabstractとは?抽象クラスの概要やサンプルPGをご紹介

<目次> (1) Javaのabstractとは?抽象クラスの概要やサンプルPGをご紹介  (1-1) 抽象クラス(abstract)とは  (1-2) 抽象クラスの目的や用途  (1-3) 抽象クラ …

JavaのJDBC接続でjava.sql.SQLRecoverableException: Closed Connectionが発生した時の解決メモ

(0)目次&概説 (1) エラー事象の概要  (1-1) エラーの発生状況  (1-2) エラーメッセージ全文 (2) エラーの原因 (3) エラーの対処方法  (3-1) エラーの修正内容  (3- …

JSPでcssが適用されない(Resouce interpreted as Stylesheet but transferred with MIME type)事象のトラブルシューティング記録

<目次> (1) JSPでcssが適用されない(Resouce interpreted as Stylesheet but transferred with MIME type)事象のトラブルシューテ …

Javaで複数の配列を結合する方法について

<目次> (1) Javaで複数の配列を結合する方法について  (1-1) 構文  (1-2) サンプルプログラム (1) Javaで複数の配列を結合する方法について Javaで複数の配列を結合する方 …

  • English (United States)
  • 日本語
Top