🦮 스스로를 위한 프로젝트 일지 가이드
1️⃣ 프로젝트를 진행하며 '왜' 그렇게 했는가
2️⃣ 어떤 문제가 생겼고, 어떻게 해결하였는가
3️⃣ 프로젝트를 되짚어보며 개선할 점이 있는가
✅ 로그인 유효성 체크
로그인 실패 시 사용자에게 그걸 안내할 방법이 필요했고, 서버(컨트롤러)에서 유효성 체크 후 view에서 실패 안내 문구를 띄우기로 했다.
1️⃣ 프로젝트를 진행하며 '왜' 그렇게 했는가
시큐리티에서 로그인 성공/실패를 판별한다 👉 로그인 실패 시 시큐리티 설정에 따라 해당 value를 가진 컨트롤러로 넘어간다
그러면 유효성을 체크하는 가장 쉬운 방법은 컨트롤러가 가진 결과(실패)를 그대로 view단에 넘기는 것이다.
그래서 flag를 만들어 view 단으로 넘긴 후 flag 결과에 따라 alert로 실패 메시지를 띄우기로 했다.
2️⃣ 어떤 문제가 생겼고, 어떻게 해결하였는가
문제는 로그인 실패 시 value가 연결된 컨트롤러는 MemberController고, 거기에 redirect하는 홈페이지 value는 HomeController로 연결되어 있어 flag를 HomeController에 넘겨줘야 했다.
그래서 생각한 방법은 flag를 MemberController에서 model로 넘겨준 뒤 HomeController에서 @RequestParam으로 받고, 그렇게 받은 flag를 jsp 파일에 넘기는 방법이었다.
그런데 문제는 로그인 버튼을 클릭하지 않고 홈 화면을 접속할 때(처음 프로젝트 시작할 때나 홈 버튼을 누를때)는 flag가 null이 되어 오류가 뜬다는 거였다.
그래서 찾아본 결과 방법이 하나 있었다!
@RequestParam(value="flag", required=false)
위와 같이 설정하면 된다. required=false 하면 value가 null이어도 괜찮다고 설정하는 것이고, 저 설정을 추가하지 않으면 value 값이 반드시 필요하게 되어 null이 들어갈 경우 오류가 난다.
그렇게 해서 HomeController에 넘겨받은 flag를 다시 model로 view에 넘겨주었고, view에서 jsp 문법으로 model을 받은 후 안내 메시지를 띄우는데... 여기서 또 사소한 오류가 있었다.
처음에 컨트롤러에서 flag 자료형을 int로 설정하고 js에서 if문을 flag==1로 하면 조건문이 작동하지 않는다.
찾아본 결과 HTML은 모든 데이터를 문자로 처리하기 때문에, jstl로 넘긴 데이터는 자동으로 문자열로 변환된다고 한다.
따라서 위와 같이 String 자료형으로 고쳐준 결과,
유효성 체크 문구 띄우기에 성공했다!