Rainbow Engine

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

Java JSP/Servlet

JSP/Servletでログイン・ログアウト機能を作成する方法

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

<目次>

(1) JSP/Servletでログイン・ログアウト機能を作成する方法
 (1-1) ログイン
  (1-1-1) 概要・構文
  (1-1-2) サンプルプログラム
 (1-2) ログアウト
  (1-2-1) 概要・構文
  (1-2-2) サンプルプログラム
 (1-3) 操作動画

(1) JSP/Servletでログイン・ログアウト機能を作成する方法

(1-1) ログイン

(1-1-1) 概要・構文

ログイン機能は、次の図のようにある「要求ページ」をリクエストすると、自動で「ログイン画面」に遷移し、IDとパスワードを入力して認証成功すると「要求ページ」にリダイレクトし、認証失敗すると「ログインエラー画面」に遷移するという仕組みです。

(図111)

 
詳しい仕組みについては下記の別記事にてご紹介していますので、そちらを参照頂けたらと思います。
 
 

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

フォーム認証のログインは内部的には、次のような画面や設定ファイルを準備しています。

・ログイン画面(XXXX1.jsp)
・ログインエラー画面(XXXX2.jsp)
・ユーザ情報(tomcat-users.xml)
・フォーム認証設定(web.xml)

サンプルプログラムについても下記の別記事にてご紹介していますので、そちらを参照頂けたらと思います。
 
 

目次にもどる

(1-2) ログアウト

(1-2-1) 概要・構文

ログアウト機能は、ログアウト処理を行うサーブレット(Servlet)を用意して行います。Webサイトの各ページにて、ログアウトするサーブレット(Servlet)を呼び出す「ボタン」や「リンク」等を設置し、それを押す事でサーブレットが呼び出され、ログアウト画面に遷移(forward)するイメージになります。

(図121)

ログアウトをするためには、HttpServletRequestインターフェイスのlogout()メソッドを使用します。
 
(構文:ログアウト処理)

「request」は「HttpServletRequest」のインスタンスを表します。

request.logout();
 
あとは、この各業務画面にて、このサーブレットを呼び出す「ボタン」なり「リンク」なりを必要に応じて設置します。
 
(構文:ログアウトボタン例)
<input type="button" value="ログアウト" onclick="location.href='[ログアウトサーブレットのURL]'">

 

目次にもどる

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

・①サーブレット(Servlet)

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("/LogoutServlet1")
public class LogoutServlet1 extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.logout();
        //# ログアウト画面への遷移
        RequestDispatcher dispatch = request.getRequestDispatcher("/Logout1.jsp");
        dispatch.forward(request, response);
    }

}
 
(図122)

・②ログアウトボタン設置画面
 
こちらはログアウトボタンを設置した適当な画面になります。
 
ポイントとなるのは「ログアウトサーブレット」を呼び出すボタンの部分で、このボタンを押す事で上記の①サーブレット(例:LogoutServlet1)が呼び出され、③ログアウト画面に遷移します。
 
(補足)
今回の例の「LogoutServlet1」は、このjspから見て1つ上の階層にあるため、相対パスで「../ LogoutServlet1」としています。
 
(サンプル)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Form認証(MemoryRealm) ログイン成功</title>
</head>
<body>
####################################<br />
ログインに成功しました(Login Success.)<br />
####################################<br />
</body>
<br /><br />
<input type="button" value="ログアウト" onclick="location.href='../LogoutServlet1'">
</html>
(図123)

・③ログアウト画面
 
ログアウト画面のサンプルです(ログアウトサーブレットの遷移先画面です)。よく一般のWebサイト等で見る「ログアウトしました」的な画面です。
 
(サンプル)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html class="font_1">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="./css/TwitterTool.css">
<title>Form認証(MemoryRealm) ログアウト</title>
</head>
<body>
ログアウトしました。
<br />
<br />
<%--
<%
response.sendRedirect(request.getContextPath()+"/form_auth/AfterLogin1.jsp");
%>
--%>
<a href="./form_auth/AfterLogin1.jsp">→ログインページへ戻る</a>
</body>
</html>
 
(図124)
 
・階層構造
 
プログラムの理解をしやすくするため、プロジェクトの階層構造もご紹介します。今回の例では「form_auth」ディレクトリに対して「フォーム認証」を適用しており、AfterLogin1.jspを要求するとログイン画面に遷移して認証が始まります。
 
(図125)

(表)

ページ 階層
要求ページ form_auth/AfterLogin1.jsp
ログイン画面 Login1.jsp
ログインエラー画面 LoginError.jsp
ログアウトサーブレット LogoutServlet1.java
ログアウト画面 Logout1.jsp

目次にもどる

(1-3) 操作動画

最後に、上記の画面を実際に操作した動画をご紹介します。

前半:ある画面を要求 ⇒ ログイン失敗 ⇒ ログインエラー画面表示
後半:ある画面を要求 ⇒ ログイン成功 ⇒ ある画面が表示 ⇒ ログアウト押下 ⇒ ログアウト画面表示

(動画)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet

執筆者:


comment

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

関連記事

「サーブレットコンテナ」や「サーブレットのライフサイクル」とは?(サンプルプログラム付)

※本記事は「サーブレットとは?その役割やHelloWorldサンプルコードのご紹介」の続編です。 (0)目次&概説 (2) サーブレットコンテナの基本  (2-1) サーブレットコンテナとは?  (2 …

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

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

JavaScriptの必須チェックのサンプルプログラム

  <目次> (1) JavaScriptの必須チェックのサンプルプログラム  (1-1) 構文  (1-2) サンプルプログラム (1) JavaScriptの必須チェックのサンプルプログ …

デッドロックとライブロックとは?両者の違いやサンプルプログラムをご紹介

  <目次> (1) デッドロックとライブロックとは?両者の違いやサンプルプログラムをご紹介  (1-1) デッドロック   (1-1-1) 概要   (1-1-2) サンプルプログラム   …

int型のオーバーフロー(桁あふれ)とは?実際の発生パターンと併せてご紹介

  <目次> (1) int型のオーバーフロー(桁あふれ)とは?実際の発生パターンと併せてご紹介  (1-1) int型のオーバーフローとは?  (1-2) int型のオーバーフローが発生す …

  • English (United States)
  • 日本語
Top