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 @@ + + + + + + + + + + + + ログイン画面 + + + +

ログイン

+
+ +
? + ? +
+ + + + + + + + + > + + + + + + +
メールアドレス + +
パスワード + +
+ + +
+
+ + + +