inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Spring MVC Phần 2 - Kỹ thuật vận dụng phát triển Web Backend

Tính năng đăng nhập

강사님 질문입니다!!!

501

Jong Hee Park

18 câu hỏi đã được viết

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

이런 에러인데요,.,.

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

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

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

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

spring MVC

Câu trả lời 3

2

yh

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/

감사합니다.

0

Jong Hee Park

답변 감사합니다 강사님

1

Jong Hee Park

*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

Jong Hee Park

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;

}

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

 

이미지 업로드와 db 트랜잭션 묶는법

0

42

1

Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4

0

52

2

MessageSourceTest 코드

0

47

1

인터셉터 에러 설정

0

48

1

resolveArgument()메서드 질문

0

56

1

43강 검증1 에서 실패 로직 관련 질문있습니다.

0

54

2

타임리프 3.X 버전 rendering, serializer 에러 해결 방법

2

133

3

스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ

0

90

3

pdf 오타 문의

0

57

1

ItemUpdateForm 검증 관련 질문입니다.

0

48

1

22page 링크 주소 변경

0

59

2

특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문

0

53

1

섹션3번 수업에 대한 질문입니다.

0

80

2

@Autowired 보다 더 좋은 방법이 어떤 걸까요?

0

85

2

타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.

0

65

1

자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다

0

142

3

스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문

0

63

1

톰캣 에러 페이지가 안보입니다.

0

102

2

apiEceptionController에서 센드 에러 호출하면 안되는지?

0

81

1

세션 타임아웃시 쿠키 삭제 방법이 없나요?

0

118

2

ApiExceptionController 질문드립니다.

0

64

1

셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?

0

66

1

MemberRepository 필드의 fianl 선언 유무

0

85

2

혹시 index.html 에서는 fragment 사용이 안되는건가요

0

58

1