뛰슈 - LoginService

2023. 8. 14. 14:26·LikeLion🦁
728x90

LoginService 구현하기

로그인을 위한 메서드 구현을 했다.

Entity에 접근을 직접하는 것을 막기 위해서 DTO를 사용하고, 검증을 위한 annotation을 추가한다.

@Data
public class LoginDto {

    @NotEmpty
    @Size(max = 50)
    @Pattern(regexp = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}$", message = "이메일 형식에 맞지 않습니다.")
    String memberId;

    @NotEmpty
    @Size(min = 5, message = "비밀번호는 최소 5자 이상이어야 합니다.")
    String password;

}

DTO를 JSON으로 받아온 데이터에서 파싱하여 비밀번호의 일치여부를 판별하여 Member를 전달하도록 구현했다.

@Slf4j
@Service
public class LoginService {

    private final MemberJpaRepository memberJpaRepository;
    @Autowired
    public LoginService(MemberJpaRepository memberJpaRepository) {
        this.memberJpaRepository = memberJpaRepository;
    }

    public Optional<Member> login(@Validated @RequestBody LoginDto loginDto){
        return memberJpaRepository.findMemberByMemberId(loginDto.getMemberId())
                .filter(m -> m.getPassword().equals(loginDto.getPassword()));
    }
}

 

Service에서 받아온 Member를 가져와서 회원의 유무를 판별한다. 아직 session과 쿠키 부분은 구현이 완성되지 않았다.

@Slf4j
@RestController
public class LoginController {

    private final LoginService loginService;
    @Autowired
    public LoginController(LoginService loginService) {
        this.loginService = loginService;
    }

    @PostMapping("/login")
    public SignUpResult login(@Validated @RequestBody LoginDto loginDto, BindingResult bindingResult, HttpServletRequest request){
        if(bindingResult.hasErrors()){
            log.info(bindingResult.toString());
            return new SignUpResult("emptyBox");
        }

        Optional<Member> member = loginService.login(loginDto);
        log.info("login {}",member);
        if(member.isEmpty()){
            return new SignUpResult("loginFail");
        }
        HttpSession session = request.getSession();
        session.setAttribute(SessionConst.LOGIN_MEMBER,member);

        return new SignUpResult("true");
    }

    @PostMapping("/logout")
    public SignUpResult logout(HttpServletRequest request){
        HttpSession session = request.getSession();
        if(session!=null){
            session.invalidate();
        }
        return new SignUpResult("logout");
    }

}

일단은 login과 logout Controller를 구현했다.

728x90

'LikeLion🦁' 카테고리의 다른 글

뛰슈 - guest 모임 참여  (0) 2023.08.22
뛰슈 - Board관리  (1) 2023.08.17
뛰슈 - Memeber정의  (1) 2023.08.10
떠나요~ 대천으로🏖️  (3) 2023.08.01
뛰슈 - 기능명세서 작성하기  (1) 2023.07.28
'LikeLion🦁' 카테고리의 다른 글
  • 뛰슈 - guest 모임 참여
  • 뛰슈 - Board관리
  • 뛰슈 - Memeber정의
  • 떠나요~ 대천으로🏖️
Bello's
Bello's
개발하는 벨로
  • Bello's
    벨로의 개발일지
    Bello's
  • 전체
    오늘
    어제
    • 분류 전체보기 (200)
      • 노예 일지 (7)
        • 스타트업 노예일지 (3)
      • CS 이론 (81)
        • 학과 수업 (4)
        • 알고리즘 (64)
        • 시스템 프로그래밍 (3)
        • 데이터 통신 (1)
        • 운영체제 (2)
        • 데이터베이스 (1)
      • project (3)
      • 나는 감자다. (4)
      • Spring (27)
      • 모각코 (45)
        • 절개와지조(모각코) (7)
        • 어쩌다보니 박준태가 조장이조 (11)
        • 어쩌다보니 박준태가 또 조장이조 (12)
      • LikeLion🦁 (20)
      • 캘리포니아 감자 (4)
      • OpenSource Contribute (1)
      • 우아한테크벨로 (8)
        • 프리코스 회고록 (6)
        • Level 1 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    나는 감자
    우테코
    오블완
    8기
    그래프 순회
    회고록
    어렵다
    백준
    JPA
    감자
    뛰슈
    절개와지조
    타임리프
    자바
    누적합
    BFS
    모각코
    프리코스
    Spring
    DFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Bello's
뛰슈 - LoginService
상단으로

티스토리툴바