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

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

関連記事

JFreeChartで描画したグラフをJSP/Servlet画面に表示する方法

(0)目次&概説 (1) 記事の目的  (1-1) 目的 (2) 表示方法の概要  (2-1) 表示の仕組み  (2-2) 実装の手順 (3) サンプルプログラム  (3-1) JSPのサンプルプログ …

TwitterのAPIライブラリ(Twitter4j)でフォローを行う方法

<目次> (1) TwitterのAPIライブラリ(Twitter4j)でフォローを行う方法  (1-1) 構文  (1-2) サンプルプログラム (1) TwitterのAPIライブラリ(Twitt …

Javaでハッシュ値を計算する方法について

<目次> (1) Javaでハッシュ値を計算する方法について  (1-1) ハッシュを使った探索の概要  (1-2) ハッシュからアドレスを計算する方法  (1-3) サンプルプログラム (1) Ja …

Twitter APIライブラリ(Twitter4j)を用いてDMを送信する方法

<目次> (1) Twitter APIライブラリ(Twitter4j)を用いてDMを送信する方法  (1-1) 構文  (1-2) 開発者用アカウントの設定変更  (1-3) 認証トークンの再生成 …

EclipseでJavaプロジェクトを別サーバにエクスポートする方法

(0)目次&概説 (1) プロジェクトのエクスポートの手順  (1-1) プロジェクトのエクスポート@転送元サーバ  (1-2) インポート先サーバへ転送  (1-3) プロジェクトのインポート@転送 …

  • English (United States)
  • 日本語
Top