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

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

関連記事

Tomcatの起動時のエラー「アドレスは既に使用中です」や「必要な幾つかのポートがすでに使用中です」の対処方法

<目次> (1) Tomcatの起動時のエラー「アドレスは既に使用中です」や「必要な幾つかのポートがすでに使用中です」の対処方法  (1-1) 発生状況  (1-2) 原因  (1-3) 対処方法 ( …

TwitterのAPIライブラリでリツイートした人の一覧を取得する方法

<目次> (1) TwitterのAPIライブラリでリツイートした人の一覧を取得する方法  (1-1) 構文  (1-2) サンプルプログラム (1) TwitterのAPIライブラリでリツイートした …

Andoroid StudioをLinuxにインストールする手順

  <目次> (1) Andoroid StudioをLinuxにインストールする手順  (1-1) Andoroid Studioとは?  (1-2) STEP0:前提条件(JDKのインス …

Javaで実装したLinkedListのサンプルプログラムをご紹介

<目次> (1) Javaで実装したLinkedListのサンプルプログラムをご紹介  (1-1) LinkedListの概要  (1-2) LinkedListの特徴  (1-3) LinkedLi …

Javaのenumとは?使い方や意味を様々な利用シーンでご紹介(if、for、switch他)

<目次> (1) Javaのenumとは?意味や用途を様々な利用シーンでご紹介   (1-1) enumとは?  (1-2) 構文(enumの定義)  (1-3) 様々なenumの使用例 (1) Ja …

  • English (United States)
  • 日本語
Top