Spring

Spring 숙련 (5) (로그인 구현 JWT)

sehunbang 2024. 1. 25. 19:57

LoginRequestDTO 만들기

@Setter
@Getter
public class LoginRequestDto {
    private String username;
    private String password;
}

 

컨트롤러에 로그인 매핑 추가

// 유저 로그인
@PostMapping("/user/login")
public String login(LoginRequestDto requestDto, HttpServletResponse res){
    try {
        userService.login(requestDto,res);
    }catch (Exception e){
        return "redirect:/api/user/login-page?error";
    }
    return "redirect:/";
}

 

서비스에 

private final JwtUtil jwtUtil;

추가 +

public void login(LoginRequestDto requestDto, HttpServletResponse res) {
    String username = requestDto.getUsername();
    String password = requestDto.getPassword();

    // 사용자 확인
    User user = userRepository.findByUsername(username).orElseThrow(
            () -> new IllegalArgumentException("등록된 사용자가 없습니다.")
    );

    // 비밀번호 확인
    if (!passwordEncoder.matches(password, user.getPassword())) {
        throw new IllegalArgumentException("비밀번호가 일치하지 않습니다.");
    }

    // JWT 생성 및 쿠키에 저장 후 Response 객체에 추가
    String token = jwtUtil.createToken(user.getUsername(), user.getRole());
    jwtUtil.addJwtToCookie(token, res);
}