새소식

반응형
250x250
📁 프로젝트 일지/👩‍🏫 공공 교육 서비스

5.기능 구현(2) - 로그인(유효성 체크)

  • -
728x90
반응형

🦮 스스로를 위한 프로젝트 일지 가이드

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 자료형으로 고쳐준 결과,

 

 

유효성 체크 문구 띄우기에 성공했다!

 

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.