From 004ea0d5b9b85cbd56c314b62f3d44c5f92a7026 Mon Sep 17 00:00:00 2001 From: h-seya <2026_04_00278@it-college.co.jp> Date: Thu, 24 Sep 2026 16:04:12 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]:=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=83=BB=E3=83=AD=E3=82=B0=E3=82=A2=E3=82=A6=E3=83=88=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/controller/LoginController.java | 79 +++++++++++++++--- .../{Account.java => AccountEntity.java} | 6 +- .../java/com/example/demo/form/LoginForm.java | 17 ++++ .../demo/repository/AccountRepository.java | 11 +++ .../example/demo/service/LoginService.java | 31 +++++++ src/main/resources/templates/login.html | 42 +++++----- src/main/resources/templates/topmenu.html | 81 ++++++++++++------- 7 files changed, 206 insertions(+), 61 deletions(-) rename src/main/java/com/example/demo/entity/{Account.java => AccountEntity.java} (89%) create mode 100644 src/main/java/com/example/demo/form/LoginForm.java create mode 100644 src/main/java/com/example/demo/repository/AccountRepository.java create mode 100644 src/main/java/com/example/demo/service/LoginService.java diff --git a/src/main/java/com/example/demo/controller/LoginController.java b/src/main/java/com/example/demo/controller/LoginController.java index 7961482..4e469fc 100644 --- a/src/main/java/com/example/demo/controller/LoginController.java +++ b/src/main/java/com/example/demo/controller/LoginController.java @@ -1,24 +1,79 @@ package com.example.demo.controller; +import jakarta.servlet.http.HttpSession; +import jakarta.validation.Valid; + import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; +import com.example.demo.entity.AccountEntity; +import com.example.demo.form.LoginForm; +import com.example.demo.service.LoginService; + +import lombok.RequiredArgsConstructor; + @Controller +@RequiredArgsConstructor public class LoginController { - @GetMapping("/login") - public String showLogin() { - return "login"; - } + private final LoginService loginService; - @PostMapping("/doLogin") - public String doLogin() { - return "redirect:/topmenu"; - } + // Boot起動直後にログイン画面に移動する用のメソッド + @GetMapping("/") + public String index(HttpSession session) { + if (session.getAttribute("loginEmployee") != null) { + return "redirect:/topmenu"; + } + return "redirect:/login"; + } - @GetMapping("/topmenu") - public String showTopMenu() { - return "topmenu"; - } + @GetMapping("/login") + public String loginForm(Model model, HttpSession session) { + if (session.getAttribute("loginEmployee") != null) { + return "redirect:/topmenu"; + } + + model.addAttribute("loginForm", new LoginForm()); + return "login"; + } + + // 実際のログイン処理 + @PostMapping("/login") + public String doLogin( + @Valid @ModelAttribute LoginForm loginForm, + BindingResult bindingResult, + Model model, + HttpSession session) { + + if (bindingResult.hasErrors()) { + return "login"; + } + + AccountEntity accountEntity = loginService.login(loginForm); + if (accountEntity == null) { + model.addAttribute("loginError", + "ログインIDまたはパスワードが正しくありません"); + return "login"; + } + + session.setAttribute("loginEmployee", accountEntity); + return "redirect:/topmenu"; + } + + // ログアウト処理 + @GetMapping("/logout") + public String logout(HttpSession session) { + session.invalidate(); + return "redirect:/login"; + } + + // 各画面からトップメニューへの遷移用 + @GetMapping("/topmenu") + public String showTopMenu() { + return "topmenu"; + } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/entity/Account.java b/src/main/java/com/example/demo/entity/AccountEntity.java similarity index 89% rename from src/main/java/com/example/demo/entity/Account.java rename to src/main/java/com/example/demo/entity/AccountEntity.java index 6379036..fc90022 100644 --- a/src/main/java/com/example/demo/entity/Account.java +++ b/src/main/java/com/example/demo/entity/AccountEntity.java @@ -21,15 +21,15 @@ import lombok.Setter; @Getter @Setter @NoArgsConstructor -public class Account { +public class AccountEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="login_info_id") - private int loginInfoId; + private Integer loginInfoId; @Column(name="employee_id") - private int employeeId; + private Integer employeeId; @Column(name="password_hash") private String passwordHash; diff --git a/src/main/java/com/example/demo/form/LoginForm.java b/src/main/java/com/example/demo/form/LoginForm.java new file mode 100644 index 0000000..2a5a7ab --- /dev/null +++ b/src/main/java/com/example/demo/form/LoginForm.java @@ -0,0 +1,17 @@ +package com.example.demo.form; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +import lombok.Data; + +@Data +public class LoginForm { + + @NotNull(message = "社員IDを入力してください") + private Integer employeeId; + + @NotBlank(message = "パスワードを入力してください") + private String passwordHash; + +} diff --git a/src/main/java/com/example/demo/repository/AccountRepository.java b/src/main/java/com/example/demo/repository/AccountRepository.java new file mode 100644 index 0000000..db7d155 --- /dev/null +++ b/src/main/java/com/example/demo/repository/AccountRepository.java @@ -0,0 +1,11 @@ +package com.example.demo.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.example.demo.entity.AccountEntity; + +public interface AccountRepository extends JpaRepository{ + + AccountEntity findByEmployeeId (Integer employeeId); + +} diff --git a/src/main/java/com/example/demo/service/LoginService.java b/src/main/java/com/example/demo/service/LoginService.java new file mode 100644 index 0000000..c87eead --- /dev/null +++ b/src/main/java/com/example/demo/service/LoginService.java @@ -0,0 +1,31 @@ +package com.example.demo.service; + +import org.springframework.stereotype.Service; + +import com.example.demo.entity.AccountEntity; +import com.example.demo.form.LoginForm; +import com.example.demo.repository.AccountRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class LoginService { + + private final AccountRepository accountRepository; + + public AccountEntity login(LoginForm form) { + AccountEntity accountEntity = + accountRepository.findByEmployeeId(form.getEmployeeId()); + + if(accountEntity == null) { + return null; + } + + if(!accountEntity.getPasswordHash().equals(form.getPasswordHash())) + return null; + + return accountEntity; + } + +} diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 06b4373..70f5aac 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -1,29 +1,35 @@ - + + - -ログイン + + ログイン + - +

ログイン

-
-
- -
+

+

- - - - -
- - -
+ +
+ + +

+
+ +
+ + +

+
+ + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/topmenu.html b/src/main/resources/templates/topmenu.html index 83c566d..2fff6ee 100644 --- a/src/main/resources/templates/topmenu.html +++ b/src/main/resources/templates/topmenu.html @@ -1,31 +1,55 @@ + - -トップメニュー + + トップメニュー + + +
+ +
+ ShareBooks +
+ +
+ + + テストユーザー(一般) + + + + ログアウト + + +
+ + +
+

メインメニュー

- - + + -
- リンク名 - -
-
+

+ 登録されている図書の
一覧を表示します。 +

+ + +
- +

寄贈申請

@@ -34,11 +58,11 @@ 寄贈申請フォームの
入力を行います。

- +
- + - +

新規図書登録

@@ -49,19 +73,19 @@

- - + + - +

貸出中図書一覧

貸出中図書の
一覧を表示します。 -

+

- +
- +

寄贈申請受信BOX

@@ -70,16 +94,17 @@ 寄贈申請の
受信一覧を確認します。

- +
- - + +

パスワード変更

- +

初期パスワードを
変更します。

+ \ No newline at end of file