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

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

関連記事

Javaのthisとは?コンストラクタで引数を与えている場合・メソッド引数に使われる場合もご紹介

<目次> (1) Javaのthisとは?コンストラクタに出現する場合やメソッド引数に使われる場合もご紹介  (1-1) thisとは?  (1-2) 用途1:自分自身を指定【重要】  (1-3) 用 …

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

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

JDKのインストール手順+どれを選択すれば良いか?&確認の方法は?をご紹介

  <目次> (1) JDKのインストール手順+どれを選択すれば良いか?&確認の方法は?をご紹介  (1-0) STEP0:JDKのインストールでどれを選択すれば良いか?  (1-1) ST …

Javaで正規表現を使ってURLを文字列から検出する方法

<目次> (1) Javaで正規表現を使ってURLを文字列から検出する方法  (1-1) 構文  (1-2) 構文の説明  (1-3) サンプルプログラム  (1-4) ツールのご紹介 (1) Jav …

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

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

  • English (United States)
  • 日本語
Top