修正しました。

This commit is contained in:
s-ohasi
2026-10-22 16:03:35 +09:00
parent 5a5bfd9112
commit df34f8dcc4
5 changed files with 47 additions and 118 deletions

View File

@@ -7,13 +7,13 @@ import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import com.example.demo.form.LoginInfoForm; import com.example.demo.form.LoginInfoForm;
import com.example.demo.form.LoginUserForm; import com.example.demo.form.LoginUserForm;
import com.example.demo.form.MessageForm; import com.example.demo.form.MessageForm;
import com.example.demo.service.impl.Login; import com.example.demo.service.ReturnService;
@Controller @Controller
public class LoginController { public class LoginController {
@@ -21,57 +21,42 @@ public class LoginController {
// // ログ出力用インスタンス // // ログ出力用インスタンス
private static final Logger LOGGER = Logger.getLogger(LoginController.class.getName()); private static final Logger LOGGER = Logger.getLogger(LoginController.class.getName());
// ログイン処理を行う
private final Login login;
// コンストラクタで部品を注入する(Autowired)
@Autowired @Autowired
public LoginController(Login login) { ReturnService service;
this.login = login;
}
// 画面で使うフォームの初期化 @GetMapping("/login")
@ModelAttribute public String view() {
public LoginUserForm loginUserForm() { return "login";
return new LoginUserForm();
} }
// ログインボタンが押されたときの処理 // ログインボタンが押されたときの処理
@PostMapping("/doLogin") @PostMapping("/doLogin")
public String doLogin(LoginInfoForm loginInfoForm, HttpSession session, Model model) { public String doLogin(LoginInfoForm form, HttpSession session, Model model) {
try { // 入力チェック(メールアドレスやパスワードの形が正しいか)
// 入力チェック(メールアドレスやパスワードの形が正しいか) if (!LoginUserForm.checkParameter(form)) {
if (!LoginUserForm.checkParameter(loginInfoForm)) { // エラーメッセージと、入力されたデータを画面に返す
// エラーメッセージと、入力されたデータを画面に返す model.addAttribute("messageError", new MessageForm("メールアドレス、パスワードの入力内容に誤りがあります"));
model.addAttribute("messageError", new MessageForm("メールアドレス、パスワードの入力内容に誤りがあります")); model.addAttribute("loginInfoForm", form);
model.addAttribute("loginInfoForm", loginInfoForm); return "login"; // login.html を表示
return "login"; // login.html を表示
}
// 認証チェック(IDとパスワードが一致するか)
if (!login.canLogin(loginInfoForm)) {
// 間違っている場合のメッセージを画面に返す
model.addAttribute("messageError", new MessageForm("IDまたはパスワードが間違っています"));
model.addAttribute("loginInfoForm", loginInfoForm);
return "login"; // login.html を表示
}
// ログイン処理の実行
LoginUser loginUser = login.doLogin(loginInfoForm);
// セッション(サーバーの秘密のメモ帳)にユーザー情報を保存
//「ログイン中」の状態
session.setAttribute("loginUser", LoginUserForm.convertFrom(loginUser));
// 成功したらメニュー画面へ進む
return "menu"; // menu.html を表示
} catch (Exception e) {
// 予期せぬエラーが起きたら、セッションを消してエラー画面へ
session.invalidate();
LOGGER.error("エラーが発生しました!", e);
return "error"; // error.html を表示
} }
// 認証チェック(IDとパスワードが一致するか)
if (service.canLogin(form) == false) {
// 間違っている場合のメッセージを画面に返す
model.addAttribute("messageError", new MessageForm("IDまたはパスワードが間違っています"));
model.addAttribute("loginInfoForm", form);
return "login"; // login.html を表示
}
// ログイン処理の実行
Integer userId = service.getUserId(form);
// セッションにユーザー情報を保存
//「ログイン中」の状態
session.setAttribute("loginUser", userId);
// 成功したらメニュー画面へ進む
return "menu"; // menu.html を表示
} }
} }

View File

@@ -1,64 +1,20 @@
package com.example.demo.controller; 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 jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PostMapping;
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.aop.aspect.PermissionCheck;
import com.example.rhizome.aop.aspect.SessionCheck;
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
import com.example.rhizome.app.presentation.form.LoginUserForm;
@Controller @Controller
public class LogoutController { public class LogoutController {
// ログ出力用インスタンス
private final static Logger LOGGER = Logger.getLogger(LogoutController.class.getName());
// エラーメッセージ用の定数フィールド
private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!";
HttpSession httpSession;
@Autowired @Autowired
public LogoutController(HttpSession httpSession) { HttpSession session;
this.httpSession = httpSession;
}
@ModelAttribute
public LoginUserForm loginUserForm() {
return new LoginUserForm();
}
@PermissionCheck
@SessionCheck
@RequestMapping(value = LOGOUT, method = RequestMethod.POST)
public String doLogout(Model model) {
try {
// セッション情報の破棄
httpSession.invalidate();
// ログイン画面に遷移するための情報を設定
model.addAttribute(PageReturnAttributeKeyword.LOGIN_INFO_FORM, loginUserForm());
// login.html に遷移
return TransitionTargetPageNameKeyword.LOGIN_HTML;
} catch (Exception e) {
// エラーログ出力
LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e);
// エラーページに遷移
return TransitionTargetPageNameKeyword.ERROR_HTML;
}
@PostMapping("/doLogout")
public String doLogout() {
//セッションをすべて破棄
session.invalidate();
return "login";
} }
} }

View File

@@ -1,7 +1,5 @@
package com.example.demo.form; package com.example.demo.form;
import com.example.rhizome.app.domain.model.LoginUser;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -44,26 +42,26 @@ public class LoginUserForm {
* @param loginUser business 層の LoginUser インスタンス * @param loginUser business 層の LoginUser インスタンス
* @return クラスから画面用(presentation 層)の LoginUserForm * @return クラスから画面用(presentation 層)の LoginUserForm
*/ */
public static LoginUserForm convertFrom(LoginUser loginUser) { public static LoginUserForm convertFrom(LoginUserForm loginUser) {
return new LoginUserForm( return new LoginUserForm(
loginUser.getIdEmployee(), loginUser.getIdEmployee(),
loginUser.getNmEmployee(), loginUser.getNmEmployee(),
loginUser.getKnEmployee(), loginUser.getKnEmployee(),
loginUser.getMailAddress(), loginUser.getMailAddress(),
loginUser.getPassword(), loginUser.getPassword(),
loginUser.getGetFlgadmin() loginUser.getFlgadmin()
); );
} }
public static LoginUserForm convertTo(LoginUser loginUserForm) { public static LoginUserForm convertTo(LoginUserForm loginUserForm) {
return new LoginUserForm( return new LoginUserForm(
loginUserForm.getIdEmployee(), loginUserForm.getIdEmployee(),
loginUserForm.getNmEmployee(), loginUserForm.getNmEmployee(),
loginUserForm.getKnEmployee(), loginUserForm.getKnEmployee(),
loginUserForm.getMailAddress(), loginUserForm.getMailAddress(),
loginUserForm.getPassword(), loginUserForm.getPassword(),
loginUserForm.getGetFlgadmin() loginUserForm.getFlgadmin()
); );
} }

View File

@@ -1,14 +1,15 @@
package com.example.demo.form; package com.example.demo.form;
//画面にエラー表示する
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
/**
* 画面に表示するエラーメッセージを管理するクラスです。
*/
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class MessageForm { public class MessageForm {
private String message; private String message;
} }

View File

@@ -1,11 +0,0 @@
package com.example.demo.service.impl;
import com.example.demo.form.LoginInfoForm;
import com.example.rhizome.app.domain.model.LoginUser;
public interface Login {
LoginUser doLogin(LoginInfoForm loginInfo);
boolean canLogin(LoginInfoForm loginInfo);
}