From 7871635ffe8b94b99ccea81872a0ce97949aa59a Mon Sep 17 00:00:00 2001
From: s-ohasi <26-o-m-stella-tecnica@it-college.jp>
Date: Tue, 20 Oct 2026 09:53:00 +0900
Subject: [PATCH 1/2] no message
---
team1/pom.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/team1/pom.xml b/team1/pom.xml
index 1c44108..8a70571 100644
--- a/team1/pom.xml
+++ b/team1/pom.xml
@@ -74,6 +74,11 @@
spring-boot-starter-webmvc-test
test
+
+ com.example.rhizome
+ EM-Spring
+ 0.0.1-SNAPSHOT
+
From e9bc560cfa8d7b9298afe228391e8d28a8cb46d0 Mon Sep 17 00:00:00 2001
From: s-ohasi <26-o-m-stella-tecnica@it-college.jp>
Date: Tue, 20 Oct 2026 14:05:54 +0900
Subject: [PATCH 2/2] =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3?=
=?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=81=A7=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3?=
=?UTF-8?q?HTML=E3=80=81=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3=E3=82=B3?=
=?UTF-8?q?=E3=83=B3=E3=83=88=E3=83=AD=E3=83=BC=E3=83=A9=E3=83=BC=E3=82=AF?=
=?UTF-8?q?=E3=83=A9=E3=82=B9=E3=80=81=E3=83=AD=E3=82=B0=E3=82=A2=E3=82=A6?=
=?UTF-8?q?=E3=83=88=E3=82=B3=E3=83=B3=E3=83=88=E3=83=AD=E3=83=BC=E3=83=A9?=
=?UTF-8?q?=E3=83=BC=E3=82=AF=E3=83=A9=E3=82=B9=E3=80=81=E3=83=AD=E3=82=B0?=
=?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E3=83=95?=
=?UTF-8?q?=E3=82=A9=E3=83=BC=E3=83=A0=E3=82=AF=E3=83=A9=E3=82=B9=E3=80=81?=
=?UTF-8?q?=E3=82=A8=E3=83=B3=E3=83=97=E3=83=AD=E3=82=A4=E3=83=BC=E3=83=AC?=
=?UTF-8?q?=E3=83=9D=E3=82=B8=E3=83=88=E3=83=AA=E3=83=BC=E3=81=AE=E3=82=AF?=
=?UTF-8?q?=E3=83=A9=E3=82=B9=E3=82=92=E4=BD=9C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../demo/controller/LoginController.java | 140 ++++++++++++++++++
.../demo/controller/LogoutController.java | 8 +
.../com/example/demo/form/LoginUserForm.java | 106 +++++++++++++
.../demo/repository/EmployeeRepository.java | 3 +
team1/src/main/resources/templates/login.html | 65 ++++++++
5 files changed, 322 insertions(+)
create mode 100644 team1/src/main/java/com/example/demo/controller/LoginController.java
create mode 100644 team1/src/main/java/com/example/demo/controller/LogoutController.java
create mode 100644 team1/src/main/java/com/example/demo/form/LoginUserForm.java
create mode 100644 team1/src/main/resources/templates/login.html
diff --git a/team1/src/main/java/com/example/demo/controller/LoginController.java b/team1/src/main/java/com/example/demo/controller/LoginController.java
new file mode 100644
index 0000000..a541e29
--- /dev/null
+++ b/team1/src/main/java/com/example/demo/controller/LoginController.java
@@ -0,0 +1,140 @@
+package com.example.demo.controller;
+
+import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import jakarta.servlet.http.HttpSession;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.example.rhizome.app.domain.model.LoginInfo;
+import com.example.rhizome.app.domain.model.LoginUser;
+import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
+import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword;
+import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
+import com.example.rhizome.app.presentation.form.LoginInfoForm;
+import com.example.rhizome.app.presentation.form.LoginUserForm;
+import com.example.rhizome.app.presentation.form.MessageForm;
+import com.example.rhizome.app.presentation.form.UpdatePersonalUserForm;
+
+@Controller
+public class LoginController {
+
+ //
+ private final static Logger LOGGER = Logger.getLogger(LoginController.class.getName());
+
+ //
+ private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!";
+
+ HttpSession httpSession;
+ Login login;
+
+ @Autowired
+ public LoginController(HttpSession httpSession, Login login) {
+ this.httpSession = httpSession;
+ this.login = login;
+ }
+
+ @ModelAttribute
+ public LoginUserForm loginUserForm() {
+ return new LoginUserForm();
+ }
+
+ /**
+ * 画面から渡ってきたパラメータのチェックを行う
+ *
+ * @param loginInfoForm mailAddress, password を保持したインスタンス
+ * @param model ビューにデータを渡すためのコンテナ
+ * @return 遷移先の画面
+ */
+ @RequestMapping(value = DO_LOGIN, method = RequestMethod.POST)
+ public String doLogin(LoginInfoForm loginInfoForm, Model model) {
+
+ // ログに出力する
+ final String MAIL_ADDRESS_PASSWORD_ERROR = "メールアドレス、パスワードの入力内容に誤りがあります";
+ // 発生しうるErrorに対するメッセージ
+ final String LOGIN_ERROR = "IDまたはパスワードが間違っています";
+
+ try {
+ // mailAddress, password の入力に誤りがあるかチェック
+ if (!LoginUserForm.checkParameter(loginInfoForm)) {
+
+ // mail,passwordが仕様を満たしていない場合
+ model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(MAIL_ADDRESS_PASSWORD_ERROR));
+
+ // エラーだった場合に login.html に処理を戻す。mailAddress, password を login.htmlに表示するために
+ // ここで addAttribute する
+ model.addAttribute(PageReturnAttributeKeyword.LOGIN_INFO_FORM, loginInfoForm);
+ // login.html に遷移する様に設定
+ return TransitionTargetPageNameKeyword.LOGIN_HTML;
+ }
+ // Login者情報インスタンスを作成
+ LoginInfo loginInfo = createLoginInfo(httpSession, loginInfoForm);
+
+ // login 可能かチェック
+ if (!login.canLogin(loginInfo)) {
+ // ログイン不可の場合、エラーメッセージをセットして入力された値とともに login.html を再表示
+ // 画面に表示するエラーメッセージをセット
+ model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(LOGIN_ERROR));
+ // 画面に表示する mailAddress, password をセット
+ model.addAttribute(PageReturnAttributeKeyword.LOGIN_INFO_FORM, loginInfoForm);
+ // login.html に遷移
+ return TransitionTargetPageNameKeyword.LOGIN_HTML;
+ }
+ // ログイン(インスタンス作成)
+ LoginUser loginUser = login.doLogin(loginInfo);
+
+ // ログイン者の情報をセッション情報に格納
+ // セッションに loginUser 情報を保持し続ける = ログイン中として扱う
+ httpSession.setAttribute(SessionKeyword.LOGIN_USER, LoginUserForm.convertFrom(loginUser));
+
+ // 管理者かチェック
+ if (!loginUser.isAdminUser()) {
+ // 管理者ではない場合直で自分の情報を更新するページに遷移する
+ // 編集対象のログイン者の情報を画面に渡す値にセット
+ model.addAttribute(PageReturnAttributeKeyword.UPDATE_PERSONAL_EMPLOYEE_USER_FORM, UpdatePersonalUserForm.convertFrom(loginUser));
+ // 個人の情報更新ページに遷移
+ return TransitionTargetPageNameKeyword.UPDATE_PERSONAL_EMPLOYEE_INPUT_HTML;
+ }
+ // メニュー画面に遷移
+ return TransitionTargetPageNameKeyword.MENU_HTML;
+
+ } catch (Exception e) {
+ // ログイン情報の破棄
+ httpSession.invalidate();
+ e.printStackTrace();
+ // エラーログ出力
+ LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e);
+ // エラー画面に遷移
+ return TransitionTargetPageNameKeyword.ERROR_HTML;
+ }
+ /**
+ * ログイン者情報のインスタンスを作成
+ *
+ * @param httpSession セッション情報
+ * @param loginInfoForm mailAddress, password を保持したインスタンス
+ */
+ private static LoginInfo createLoginInfo(HttpSession httpSession, LoginInfoForm loginInfoForm) {
+ // セッションからログイン者情報を取得
+ LoginUserForm loginUserForm = (LoginUserForm) httpSession.getAttribute(SessionKeyword.LOGIN_USER);
+
+ // セッションにログイン者情報があるか
+ if (loginUserForm != null) {
+ // セッションにログイン者情報がある場合
+ return new LoginInfo(loginUserForm.getMailAddress(), loginUserForm.getPassword());
+ }
+
+ // セッションにない場合は画面からの input 値 を取得
+ return new LoginInfo(
+ loginInfoForm.getMailAddress(),
+ loginInfoForm.getPassword()
+ );
+}
+}
diff --git a/team1/src/main/java/com/example/demo/controller/LogoutController.java b/team1/src/main/java/com/example/demo/controller/LogoutController.java
new file mode 100644
index 0000000..b216a06
--- /dev/null
+++ b/team1/src/main/java/com/example/demo/controller/LogoutController.java
@@ -0,0 +1,8 @@
+package com.example.demo.controller;
+
+import org.springframework.stereotype.Controller;
+
+@Controller
+public class LogoutController {
+
+}
diff --git a/team1/src/main/java/com/example/demo/form/LoginUserForm.java b/team1/src/main/java/com/example/demo/form/LoginUserForm.java
new file mode 100644
index 0000000..22b59d1
--- /dev/null
+++ b/team1/src/main/java/com/example/demo/form/LoginUserForm.java
@@ -0,0 +1,106 @@
+package com.example.demo.form;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+//ログインをする人
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LoginUserForm {
+ /**
+ * 社員ID
+ */
+ private Integer idEmployee;
+ /**
+ * 社員名
+ */
+ private String nmEmployee;
+ /**
+ * 社員名よみ
+ */
+ private String knEmployee;
+ /**
+ * メールアドレス
+ */
+ private String mailAddress;
+ /**
+ * パスワード
+ */
+ private String password;
+
+ /**
+ * 管理者フラグ
+ */
+ private Integer flgadmin;
+
+ /**
+ * business 層の LoginUser クラスから画面用(presentation 層)の LoginUserForm に
+ * 変換します。
+ *
+ * @param loginUser business 層の LoginUser インスタンス
+ * @return クラスから画面用(presentation 層)の LoginUserForm
+ */
+ public static LoginUserForm convertFrom(LoginUser loginUser) {
+ return new LoginUserForm(
+ loginUser.getIdEmployee(),
+ loginUser.getNmEmployee(),
+ loginUser.getKnEmployee(),
+ loginUser.getMailAddress(),
+ loginUser.getPassword(),
+ loginUser.getFlgAdmin()
+ );
+ }
+
+ /**
+ * 画面用(presentation 層)の LoginUserForm クラスから business 層の LoginUser クラスに
+ * 変換します。
+ *
+ * @param loginUserForm 画面用(presentation 層)の LoginUserForm インスタンス
+ * @return business 層の LoginUser インスタンス
+ */
+ public static LoginUser convertTo(LoginUserForm loginUserForm) {
+ return new LoginUser(
+ loginUserForm.getIdEmployee(),
+ loginUserForm.getNmEmployee(),
+ loginUserForm.getKnEmployee(),
+ loginUserForm.getMailAddress(),
+ loginUserForm.getPassword(),
+ loginUserForm.getAdminAuth(),
+ loginUserForm.getIdDepartment()
+ );
+ }
+
+ /**
+ * 画面から渡ってきた必須の値が仕様を満たしているか確認
+ *
+ * @param loginInfoForm 画面から渡ってきた mailAddress, password を格納しているインスタンス
+ * @return true:仕様を満たしている , false:仕様を満たしていない
+ */
+ public static boolean checkParameter(LoginInfoForm loginInfoForm) {
+ if (null == loginInfoForm.getMailAddress()) {
+ return false;
+ }
+
+ if (loginInfoForm.getMailAddress().isBlank()) {
+ return false;
+ }
+
+ if (null == loginInfoForm.getPassword()) {
+ return false;
+ }
+
+ return !loginInfoForm.getPassword().isBlank();
+
+ }
+
+ /**
+ * 管理者権限を持っているか確認
+ *
+ * @return true:管理者権限を持っている , false:管理者権限を持っていない
+ */
+ public boolean isAdminUser() {
+ return getAdminAuth() == 1;
+ }
+}
diff --git a/team1/src/main/java/com/example/demo/repository/EmployeeRepository.java b/team1/src/main/java/com/example/demo/repository/EmployeeRepository.java
index 09f5cf4..b273e3b 100644
--- a/team1/src/main/java/com/example/demo/repository/EmployeeRepository.java
+++ b/team1/src/main/java/com/example/demo/repository/EmployeeRepository.java
@@ -1,5 +1,7 @@
package com.example.demo.repository;
+import java.util.Optional;
+
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@@ -7,5 +9,6 @@ import com.example.demo.entity.EmployeeEntity;
@Repository
public interface EmployeeRepository extends JpaRepository {
+ Optional findByMailAddressAndPassword(String mailAddress, String password);
}
\ No newline at end of file
diff --git a/team1/src/main/resources/templates/login.html b/team1/src/main/resources/templates/login.html
new file mode 100644
index 0000000..ee543e6
--- /dev/null
+++ b/team1/src/main/resources/templates/login.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+ ログイン画面
+
+
+
+ログイン
+
+
+
+
+