no message

This commit is contained in:
s-ohasi
2026-10-20 16:02:55 +09:00
parent 03c675dd33
commit 89a7d71259
4 changed files with 126 additions and 90 deletions

View File

@@ -1,7 +1,5 @@
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.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -14,15 +12,10 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import com.example.rhizome.app.domain.model.LoginInfo; import com.example.demo.form.LoginInfo;
import com.example.rhizome.app.domain.model.LoginUser; import com.example.demo.form.LoginInfo.LoginInfoForm;
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; import com.example.demo.form.LoginUserForm;
import com.example.rhizome.app.presentation.controller.pageproperty.SessionKeyword; import com.example.demo.form.MessageForm;
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 @Controller
public class LoginController { public class LoginController {
@@ -48,93 +41,96 @@ public class LoginController {
} }
/** /**
* 画面から渡ってきたパラメータのチェックを行う * 画面から渡ってきたパラメータのチェックを行う
* *
* @param loginInfoForm mailAddress, password を保持したインスタンス * @param loginInfoForm mailAddress, password を保持したインスタンス
* @param model ビューにデータを渡すためのコンテナ * @param model ビューにデータを渡すためのコンテナ
* @return 遷移先の画面 * @return 遷移先の画面
*/ */
@RequestMapping(value = DO_LOGIN, method = RequestMethod.POST) @RequestMapping(value = DO_LOGIN, method = RequestMethod.POST)
public String doLogin(LoginInfoForm loginInfoForm, Model model) { public String doLogin(LoginInfoForm loginInfoForm, Model model) {
// ログに出力する // ログに出力する
final String MAIL_ADDRESS_PASSWORD_ERROR = "メールアドレス、パスワードの入力内容に誤りがあります"; final String MAIL_ADDRESS_PASSWORD_ERROR = "メールアドレス、パスワードの入力内容に誤りがあります";
// 発生しうるErrorに対するメッセージ // 発生しうるErrorに対するメッセージ
final String LOGIN_ERROR = "IDまたはパスワードが間違っています"; final String LOGIN_ERROR = "IDまたはパスワードが間違っています";
try { try {
// mailAddress, password の入力に誤りがあるかチェック // mailAddress, password の入力に誤りがあるかチェック
if (!LoginUserForm.checkParameter(loginInfoForm)) { if (!LoginUserForm.checkParameter(loginInfoForm)) {
// mail,passwordが仕様を満たしていない場合 // mail,passwordが仕様を満たしていない場合
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(MAIL_ADDRESS_PASSWORD_ERROR)); model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR,
new MessageForm(MAIL_ADDRESS_PASSWORD_ERROR));
// エラーだった場合に login.html に処理を戻す。mailAddress, password を login.htmlに表示するために // エラーだった場合に login.html に処理を戻す。mailAddress, password を login.htmlに表示するために
// ここで addAttribute する // ここで addAttribute する
model.addAttribute(PageReturnAttributeKeyword.LOGIN_INFO_FORM, loginInfoForm); model.addAttribute(PageReturnAttributeKeyword.LOGIN_INFO_FORM, loginInfoForm);
// login.html に遷移する様に設定 // login.html に遷移する様に設定
return TransitionTargetPageNameKeyword.LOGIN_HTML; return TransitionTargetPageNameKeyword.LOGIN_HTML;
} }
// Login者情報インスタンスを作成 // Login者情報インスタンスを作成
LoginInfo loginInfo = createLoginInfo(httpSession, loginInfoForm); LoginInfo loginInfo = createLoginInfo(httpSession, loginInfoForm);
// login 可能かチェック // login 可能かチェック
if (!login.canLogin(loginInfo)) { if (!login.canLogin(loginInfo)) {
// ログイン不可の場合、エラーメッセージをセットして入力された値とともに login.html を再表示 // ログイン不可の場合、エラーメッセージをセットして入力された値とともに login.html を再表示
// 画面に表示するエラーメッセージをセット // 画面に表示するエラーメッセージをセット
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(LOGIN_ERROR)); model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(LOGIN_ERROR));
// 画面に表示する mailAddress, password をセット // 画面に表示する mailAddress, password をセット
model.addAttribute(PageReturnAttributeKeyword.LOGIN_INFO_FORM, loginInfoForm); model.addAttribute(PageReturnAttributeKeyword.LOGIN_INFO_FORM, loginInfoForm);
// login.html に遷移 // login.html に遷移
return TransitionTargetPageNameKeyword.LOGIN_HTML; return TransitionTargetPageNameKeyword.LOGIN_HTML;
} }
// ログイン(インスタンス作成) // ログイン(インスタンス作成)
LoginUser loginUser = login.doLogin(loginInfo); LoginUser loginUser = login.doLogin(loginInfo);
// ログイン者の情報をセッション情報に格納 // ログイン者の情報をセッション情報に格納
// セッションに loginUser 情報を保持し続ける = ログイン中として扱う // セッションに loginUser 情報を保持し続ける = ログイン中として扱う
httpSession.setAttribute(SessionKeyword.LOGIN_USER, LoginUserForm.convertFrom(loginUser)); httpSession.setAttribute(SessionKeyword.LOGIN_USER, LoginUserForm.convertFrom(loginUser));
// 管理者かチェック // 管理者かチェック
if (!loginUser.isAdminUser()) { if (!loginUser.isAdminUser()) {
// 管理者ではない場合直で自分の情報を更新するページに遷移する // 管理者ではない場合直で自分の情報を更新するページに遷移する
// 編集対象のログイン者の情報を画面に渡す値にセット // 編集対象のログイン者の情報を画面に渡す値にセット
model.addAttribute(PageReturnAttributeKeyword.UPDATE_PERSONAL_EMPLOYEE_USER_FORM, UpdatePersonalUserForm.convertFrom(loginUser)); model.addAttribute(PageReturnAttributeKeyword.UPDATE_PERSONAL_EMPLOYEE_USER_FORM,
// 個人の情報更新ページに遷移 UpdatePersonalUserForm.convertFrom(loginUser));
return TransitionTargetPageNameKeyword.UPDATE_PERSONAL_EMPLOYEE_INPUT_HTML; // 個人の情報更新ページに遷移
} return TransitionTargetPageNameKeyword.UPDATE_PERSONAL_EMPLOYEE_INPUT_HTML;
// メニュー画面に遷移 }
return TransitionTargetPageNameKeyword.MENU_HTML; // メニュー画面に遷移
return TransitionTargetPageNameKeyword.MENU_HTML;
} catch (Exception e) { } catch (Exception e) {
// ログイン情報の破棄 // ログイン情報の破棄
httpSession.invalidate(); httpSession.invalidate();
e.printStackTrace(); e.printStackTrace();
// エラーログ出力 // エラーログ出力
LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e); LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e);
// エラー画面に遷移 // エラー画面に遷移
return TransitionTargetPageNameKeyword.ERROR_HTML; 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()); * @param httpSession セッション情報
} * @param loginInfoForm mailAddress, password を保持したインスタンス
*/
private static LoginInfo createLoginInfo(HttpSession httpSession, LoginInfoForm loginInfoForm) {
// セッションからログイン者情報を取得
LoginUserForm loginUserForm = (LoginUserForm) httpSession.getAttribute(SessionKeyword.LOGIN_USER);
// セッションにない場合は画面からの input 値 を取得 // セッションにログイン者情報があるか
return new LoginInfo( if (loginUserForm != null) {
loginInfoForm.getMailAddress(), // セッションにログイン者情報がある場合
loginInfoForm.getPassword() return new LoginInfo(loginUserForm.getMailAddress(), loginUserForm.getPassword());
); }
}
// セッションにない場合は画面からの input 値 を取得
return new LoginInfo(
loginInfoForm.getMailAddress(),
loginInfoForm.getPassword());
}
} }

View File

@@ -0,0 +1,24 @@
package com.example.demo.form;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
public class LoginInfo {
//ログインをする人
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LoginInfoForm {
/**
* メールアドレス
*/
private String mailAddress;
/**
* パスワード
*/
private String password;
}
}

View File

@@ -1,5 +1,7 @@
package com.example.demo.form; package com.example.demo.form;
import com.example.demo.form.LoginInfo.LoginInfoForm;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@@ -0,0 +1,14 @@
package com.example.demo.form;
//画面にエラー表示する
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MessageForm {
private String message;
}