21.11.28 14:33 작성
·
375
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
2021. 11. 29. 22:57
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;
}
-> 이런식으로 해결하긴 했는데 이게 맞는 방법인가요?
2021. 11. 30. 14:48
답변 감사합니다 강사님