• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

강사님 질문입니다!!!

21.11.28 14:33 작성 조회수 278

1

현재 loginService에서 DB에 있는 값 체크할 때

 

if(member.getPassword().equals(password)) {

return member;

} else {

return null;

}

이런식으로 비밀번호만 체크하잖아요?

근데 아이디가 틀릴 수도 있으니 아이디도 체크해줄려고

if(member.getLoginId().equals(loginId)) 

이런식으로 조건을 더 추가를 해주면 

비밀번호만 체크하고 아이디가 다를땐

500에러를 내거든요?

java.util.NoSuchElementException: No value present

이런 에러인데요,.,.

아이디랑 비밀번호가 모두 일치해야 성공로직을 돌고

아이디가 없으면 아이디가 없다고

비밀번호가 다르면 비밀번호가 다르다고

이렇게 구성하려면 어떻게 해야할까요?

답변 3

·

답변을 작성해보세요.

2

Jong Hee Park님 스스로 잘 해결하셨습니다.

optional에 대한 부분은 다음을 참고하시면 도움이 되실거에요.

https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/

감사합니다.

답변 감사합니다 강사님

1

*LoginController

@PostMapping("/login")

public String login(@Valid @ModelAttribute("loginForm") LoginForm form, BindingResult bindingResult, HttpServletResponse response) {

if(bindingResult.hasErrors()) {

return "login/loginForm";

}

Optional<Member> member = mm.findByLoginId(form.getLoginId());

if(!member.isPresent()) {

bindingResult.reject("loginFail", "존재하지 않는 아이디 입니다.");

return "login/loginForm";

}

Member loginMember = loginService.login(form.getLoginId(), form.getPassword());

if(loginMember == null) {

bindingResult.reject("loginFail", "비밀번호가 맞지 않습니다.");

return "login/loginForm";

}

// 1. 로그인 성공 처리(쿠키 생성) : 쿠키 생성시 시간 정보를 설정하지 않으면 세션 쿠키로서 브라우저 종료시 모두 없어진다.

Cookie cookie = new Cookie("memberId", String.valueOf(loginMember.getId()));

response.addCookie(cookie);

return "redirect:/";

}

 

*LoginService

public Member login(String loginId, String password) {

// 2-1. 첫번째 방법

Optional<Member> findMember = mm.findByLoginId(loginId);

Member member = new Member();

if(findMember.isPresent()) {

member = findMember.get();  // 2-4. 주의 : Optional에서 값이 null인 객체에 get()을 호출하면 에러가 발생한다.

} else {

return null;

}

if(member.getPassword().equals(password)) {

return member;

} else {

return null;

}

/* 2-2. 두번째 방법(java8)

Optional<Member> byLoginId = mm.findByLoginId(loginId);

return byLoginId.filter(m -> m.getPassword().equals(password))

.orElse(null);

*/

/* 2-3. 세번째 방법(java8) - 간소화

 

return mm.findByLoginId(loginId).filter(m -> m.getPassword().equals(password)).orElse(null);

*/

}

이렇게 해결했습니다. 아이디가 DB에 없는 경우는 아이디가 없다고 뜨고 비밀번호가 틀린경우는 비밀번호가 틀리다고 하게끔 처리해줬는데요

이렇게 하는 방법도 맞는건가요? 의문이....

1

Optional<Member> findMember = mm.findByLoginId(loginId);

Member member = new Member();

if(findMember.isPresent()) {

member = findMember.get();

} else {

return null;

}

if(member.getPassword().equals(password)) {

return member;

} else {

return null;

}

-> 이런식으로 해결하긴 했는데 이게 맞는 방법인가요?