Beanを使ったログイン処理 - JSP

Java Beanを使ってログイン処理をします。

コード (JSPファイル:login.jsp)

<%@page contentType="text/html"%>
<%@page 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>JSP Page</title>
  </head>
  <body>
    <h1>Login</h1>
    <FORM method="POST" action="Control">
      UserName : <INPUT type="text" name="username"><br><br>
      Password : <INPUT type="password" name="password"><br><br>
      <INPUT type="submit" value="SEND">
      <INPUT type="reset" value="RESET">  
    </FORM>  
  </body>
</html>

解説

HTMLフォーム画面を用意します。POSTメソッドを用いAction左記はControlサーブレットとします。

コード (JSPファイル:authok.jsp)

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="userbeanses" scope="session" class="webApplication26.UserBean" />
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
  </head>
  <body>
    <h1>Login</h1>
    <p><jsp:getProperty name="userbeanses" property="aName" /> さん、ようこそ</p>
  </body>
</html>

解説

UserBeanの利用を宣言します。
<jsp:useBean id="userbeanses" scope="session" class="webApplication26.UserBean" />

UserBeanのプロパティ(ログインユーザー名)を読み出し画面に表示します。
<jsp:getProperty name="userbeanses" property="aName" /> さん、ようこそ

コード (JSPファイル: autherror.jsp)

<%@page contentType="text/html"%>
<%@page 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>エラーです</title>
  </head>
  <body>
  <h1>エラーだよ</h1>
  </body>
</html>

コード (サーブレット: control.java)

package webApplication26;

import com.sun.security.auth.login.ConfigFile;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import webApplication26.*;

public class Control extends HttpServlet {
  /** Handles the HTTP <code>GET</code> method.
   * @param request servlet request
   * @param response servlet response
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
    RequestDispatcher rd = null;
    rd = getServletConfig().getServletContext().getRequestDispatcher("/login.jsp");
    rd.forward(request, response);
    //processRequest(request, response);
  }

  /** Handles the HTTP <code>POST</code> method.
   * @param request servlet request
   * @param response servlet response
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
    webApplication26.UserBean ub = null;
    ub = new webApplication26.UserBean();

    String formun = request.getParameter("username");
    String formps = request.getParameter("password");
    ub.setaName(formun);
    ub.setPassword(formps);

    webApplication26.UserAuthBean uab = null;
    uab = new webApplication26.UserAuthBean();

    HttpSession session = null;
    RequestDispatcher rd = null;
    if (uab.execute(ub) == true) {
      //認証に成功
      //セッションオブジェクトを作成
      if (checkSession(request) == true) {
        //セッションオブジェクトがある場合は獲得
        session = request.getSession(false);
      } else {
        //セッションオブジェクトがない場合は新規作成
        session = request.getSession(true);
      }
      //Beansをセッションオブジェクトに保存
      session.setAttribute("userbeanses", ub);
      rd = getServletConfig().getServletContext().getRequestDispatcher("/authok.jsp");
    } else {
      //認証に失敗
      rd = getServletConfig().getServletContext().getRequestDispatcher("/autherror.jsp");
    }
    rd.forward(request, response);
  }

  /** Returns a short description of the servlet. */
  public String getServletInfo() {
    return "Short description";
  }

  //セッションオブジェクトのチェックメソッド
  public boolean checkSession(HttpServletRequest req) {
    HttpSession session = req.getSession(false);
    if (session != null) {
      return true;
    } else {
      return false;
    }
  }
}

解説 doGet()メソッド

login.jspへリダイレクトします。

解説 doPost()メソッド

UserAuthBeanのインスタンスを作成し、POSTされたユーザー名とパスワードを用いて認証をします。認証ができた場合はセッションオブジェクトにユーザー情報を格納したUserBeanを保存します。その後、/authok.jspにリダイレクトします。
認証に失敗した場合は/autherror.jspにリダイレクトします。

コード (UserAuthBean.java)

package webApplication26;

public class UserAuthBean {
  /** Creates a new instance of UserAuthBean */
  public UserAuthBean() {
  }

  public boolean execute(UserBean ub) {
    if (ub.getaName().equals("taro") == true && ub.getPassword().equals("taro") == true) {
      return true;
    } else {
      return false;
    }
  }
}

解説

execute()メソッドにUserBeanのインスタンスを与えると認証をします。認証の結果を戻り値で返します。

コード (Bean: UserBean.java)

package webApplication26;
import java.io.*;

public class UserBean implements Serializable {
  private String name;
  private String password;
  private String address;

  /** Creates a new instance of UserBean */
  public UserBean() {
    name = "No Name";
    address = "No Address";
  }

  public String getaName() {
    return name;
  }

  public void setaName(String na) {
    name = na;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String ps) {
    password = ps;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String adr) {
    address = adr;
  }
}

解説

各プロパティ(Name, Password, Address)のゲッターとセッターメソッドを実装します。

コード (web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=
    "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>Control</servlet-name>
    <servlet-class>webApplication26.Control</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Control</servlet-name>
    <url-pattern>/Control</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

実行結果

login.aspx画面


ユーザー名とパスワードを入力し、[SEND]ボタンを押します。


認証が成功した場合は下図の画面が表示されます。


認証が失敗した場合は下図の画面が表示されます。



著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2024-01-06
作成日: 2011-02-14
iPentec all rights reserverd.