관심쟁이 영호

[Spring Boot + JPA] 로그인 구현하기. 본문

Bank-End/Spring Boot

[Spring Boot + JPA] 로그인 구현하기.

관심쟁이 영호 2021. 8. 3. 15:39
반응형

이번 기록은 Spring Boot와 JPA를 이용하여 로그인을 구현해볼 것이다.

 

목차

  • 로그인 프론트 생성
  • 로그인 컨트롤러 매핑
  • 로그인 Service 구현
  • 기타

로그인 프론트 생성

 

가장 먼저 로그인을 받을 프론트를 생성하자!

프론트는 아주 간단하게 만들어 볼 것이다.

 

코드는 다음과 같다.

<!doctype html>
<html lang="ko">
<head>
    <meta charset="UTF-8">

    <title>로그인</title>
</head>
<body>
로그인입니다.

<form method="post" action="/login">
    ID :<input type="text" name="userId"><br>
    PASSWORD :<input type="text" name="password"><br>
    <button type="submit">제출</button>
</form>
</body>
</html>

 

화면은 다음과 같다.

 

코드 설명:

form 형태로 id와 password를 post 방식으로 요청한다.

 


로그인 컨트롤러 매핑

매핑은 Get, Post 이렇게 2가지 방식으로 진행할 것이다.

  • Get 매핑 : "login" 템플릿을 response 한다.
  • Post 매핑: 로그인 정보를 DB에서 조회하여 로직을 거친 다음, 성공 실패 여부를 정한다. 성공 시 HOME화면으로 이동하고 실패 시, login 템플릿을 다시 리턴한다.

로그인 컨트롤러를 살펴보자.

 

@Controller
@RequiredArgsConstructor
@Slf4j
public class LoginController {

    @Autowired
    private final LoginService loginService;

    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @PostMapping("/login")
    public String loginId(@ModelAttribute User user) {
        if(loginService.login(user)){
            return "redirect:/";
        }
        return "login";
    }

};

코드 설명:

 

Post 요청에 id와 password가 넘어올 것이다.

그럼 loginService 클래스의 login 메소드를 실행한다. 인자는 폼에서 넘어온 User이다.

 

loginService에서 DB에 저장된 데이터와 비교를 한다.

비교에서 성공하면 Home으로 간다.

실패하면 다시 login 화면이 나온다.

 


로그인 Service 구현

 

코드를 먼저 보자!

@Service
@RequiredArgsConstructor
@Slf4j
public class LoginService {
    @Autowired
    private final UserRepository userRepository;

    public boolean login(User user) {

        User findUser = userRepository.findByUserId(user.getUserId());

        if(findUser == null){
            return false;

        }

        if(!findUser.getPassword().equals(user.getPassword())){
            return false;
        }
        return true;

    }

};

코드 설명:

 

1) Repository에서 해당 id로 DB에 저장된 데이터를 가지고 온다.

2) 해당 데이터가 없으면(NULL) "false"를 리턴한다.

3) 해당 데이터와 사용자가 입력한 password가 같지 않다면, "false"를 리턴한다.

4) null이 아니거나 비밀번호가 일치하면 "true"를 리턴한다.

 


기타

 

1) 추후에 Spring Security를 사용하여 비밀번호를 암호화할 것이다. 그럼 Service 코드에 암호화, 복호화 코드가 추가될 것이다!

 

생각해놓자!

 

2) 로그인이 실패한다면 사용자의 화면에 "id 또는 password가 잘못되었습니다" 표시를 해줄 것이다. 그러기 위해서는 thymeleaf 기능이 필요하다!

 

추후에 알아보자!

300x250
Comments