Servletでログイン機能を作成

  • 2019年5月25日
  • 2020年6月16日
  • Java
ServletとJSPを使ったログイン機能のサンプルです。

コンサル業界の転職ならアクシスコンサルティング

今回紹介するプログラムは以下の仕様を満たします。

URLへのjsp直打ちによるアクセスを防ぐためWEB-INF配下にjspを配置しフォワードさせています。

作成したファイルは以下。

・LoginServlet
・HomeServlet
・LogoutServlet
・login.jsp
・home.jsp

IT分野の転職のご相談なら・・・IT専門転職エージェント@PRO人

login.jsp

未経験でもWEB業界に挑戦したい!【.pro】

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css">
<title>Sample</title>
</head>
<body>
  <div class="main-content">
    <div class="content">
    <div>ログインサンプル</div>
      <form action="LoginServlet" method="post">
        <div>ログインID:<input type="text" name="login-id" /></div>
        <div>パスワード:<input type="password" name="password" /></div>
      <div><input type="submit" value="ログイン"></div>
      <div class="error-msg"><c:if test="${errorFlg}"><%=request.getAttribute("loginErrorMsg") %></c:if></div>
      </form>
    </div>
  </div>
</body>
</html>
home.jsp

在宅でプログラミングを学ぶなら「tech boostオンライン」

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css">
<title>Insert title here</title>
</head>
<body>
  <div class="main-content">
    <div class="content">
    <div>ログインサンプル</div>
      <form action="LogoutServlet" method="post">
        <div>ログインに成功しました。</div>
      <div><input type="submit" value="ログアウト"></div>
      </form>
    </div>
  </div>
</body>
</html>

LoginServlet

20代のフリーター向けの就職支援サービス

package controller;

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;
import javax.servlet.http.HttpSession;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

    private final String loginId = "id123";
    private final String password = "password123";

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String sentId = request.getParameter("login-id");
        String sentPw = request.getParameter("password");

        if (sentId.equals(loginId) && sentPw.equals(password)) {
            HttpSession session = request.getSession();
            session.setAttribute("loginUser", true);
            RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/home.jsp");
            rd.forward(request, response);
        } else {
            request.setAttribute("loginErrorMsg", "ログイン情報が不正です。");
            request.setAttribute("errorFlg", true);
            RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/login.jsp");
            rd.forward(request, response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/login.jsp");
        rd.forward(request, response);
    }

}
HomeServlet

受講者満足度90%以上のプログラミングスクール【DMM WEBCAMP】

package controller;

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;
import javax.servlet.http.HttpSession;

@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession(false);
        if (session != null
                && session.getAttribute("loginUser") != null
                && (Boolean)session.getAttribute("loginUser")) {
            RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/home.jsp");
            rd.forward(request, response);
        } else {
            request.setAttribute("loginErrorMsg", "ログインが必要です。");
            request.setAttribute("errorFlg", true);
            RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/login.jsp");
            rd.forward(request, response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

}
LogoutServlet

プログラミングのオンラインスクールCodeCamp

package controller;

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;
import javax.servlet.http.HttpSession;

@WebServlet("/LogoutServlet")
public class LogoutServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        if (session.getAttribute("loginUser") != null) {
            session.removeAttribute("loginUser");
        }
        RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/login.jsp");
        rd.forward(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

}

ログイン失敗

 

ログイン成功

ログインせずにホーム画面にアクセス

 

ログアウト後


CSS

html {
  height: 100%;
}

body {
  margin: 0;
  background: #d1d1d1;
  height: 100%;
}

.main-content {
  width: 1100px;
  height: 100%;
  margin: 0 auto;
  background: #ffffff;
  text-align: center;
}

form {
  margin-top: 15px;
}

input[type=submit] {
  margin-top: 15px;
  margin-bottom: 15px;
}

.error-msg {
  color: red;
}

全画面はこんな感じです。