diff --git a/src/main/java/com/example/demo/controller/BookUpdateConfirmController.java b/src/main/java/com/example/demo/controller/BookUpdateConfirmController.java new file mode 100644 index 0000000..19c39fb --- /dev/null +++ b/src/main/java/com/example/demo/controller/BookUpdateConfirmController.java @@ -0,0 +1,13 @@ +package com.example.demo.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; + +@Controller +public class BookUpdateConfirmController { + + @PostMapping("/updateconfirm") + public String updateConfirm() { + return "updateconfirm"; + } +} diff --git a/src/main/java/com/example/demo/controller/BookUpdateController.java b/src/main/java/com/example/demo/controller/BookUpdateController.java new file mode 100644 index 0000000..bb6aad5 --- /dev/null +++ b/src/main/java/com/example/demo/controller/BookUpdateController.java @@ -0,0 +1,19 @@ +package com.example.demo.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; + +@Controller +public class BookUpdateController { + + @PostMapping("/update") + public String update() { + return "update"; + } + + @PostMapping("/bookUpdate") + public String bookUpdate() { + return "book"; + } + +} 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/AccountEntity.java b/src/main/java/com/example/demo/entity/AccountEntity.java new file mode 100644 index 0000000..fc90022 --- /dev/null +++ b/src/main/java/com/example/demo/entity/AccountEntity.java @@ -0,0 +1,40 @@ +package com.example.demo.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/* + * accountテーブル用のEntityクラス + * ログイン時やセッションでの管理者判別に使う + */ + +@Entity +@Table(name = "account") +@Getter +@Setter +@NoArgsConstructor +public class AccountEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="login_info_id") + private Integer loginInfoId; + + @Column(name="employee_id") + private Integer employeeId; + + @Column(name="password_hash") + private String passwordHash; + + @Column(name="admin_flag") + private int adminFlag; + +} 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/update.html b/src/main/resources/templates/update.html index 1883fdf..eed51f5 100644 --- a/src/main/resources/templates/update.html +++ b/src/main/resources/templates/update.html @@ -5,6 +5,13 @@ 図書情報更新入力 - + 更新入力画面 + +
+ +
\ No newline at end of file diff --git a/src/main/resources/templates/updateConfirm.html b/src/main/resources/templates/updateConfirm.html new file mode 100644 index 0000000..87eadc6 --- /dev/null +++ b/src/main/resources/templates/updateConfirm.html @@ -0,0 +1,24 @@ + + + + +更新内容確認 + + +更新内容確認画面 + +
+ +
+ +
+ +
+ + \ No newline at end of file