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

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

関連記事

InputStreamやInputStreamReaderやBufferedReaderの機能や役割の違い+速度測定で比較をした結果共有

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) InputStreamやBufferedReaderとは?  (2-1) 概要  (2-2) InputStr …

エラー「Project ‘XXXX’ is missing required library: ‘XXXX.jar’」の原因と対処法

<目次> (1) エラー「Project ‘XXXX’ is missing required library: ‘XXXX.jar’」の原因と対処法 …

Javaの選択ソートとは?アルゴリズムの流れ+サンプルプログラムをご紹介

<目次> (1) バイナリ―サーチとは?Javaのサンプルプログラムを用いて解説  (1-1) バイナリ―サーチのアルゴリズム  (1-2) バイナリ―サーチの性能(処理回数)  (1-3) バイナリ …

Javaのアノテーションとは?種類や使い方についてご紹介

<目次> (1) Javaのアノテーションとは?自作の手順やフィールド値の取得方法もご紹介  (1-1) アノテーションとは?  (1-2) アノテーションの種類  (1-3) 自作アノテーションの作 …

TomcatにWARファイルをデプロイする方法

  <目次> (1) TomcatにWARファイルをデプロイする方法  (1-1) STEP1:WARファイルの準備  (1-2) STEP2:WARファイルをサーバ上に配備  (1-3) …

  • English (United States)
  • 日本語
Top