개발/spring boot

로그인 crud 구현하기

Eprld 2024. 10. 28. 16:37

회원가입 부터 구현

 

MemberDTO 

 

@Data : 클래스의 getter, setter 매서드를 자동으로 생성해준다

@Builder : 빌더 패턴을 적용하여 객체를 생성할 수 있도록 해준다.

@AllArgsConstructor : 클래스의 모든 필드를 초기화하는 생성자를 자동으로 만들어 준다

@NoArgsConstructor : 매개변수가 없는 기본 생성자를 만들어준다.

@Data

@Builder

@AllArgsConstructor

@NoArgsConstructor

public class MemberDto {

 

private Long id;

private String username;

private String password;

}

 

Member 

 

public class Member {

 

@Id

@GeneratedValue

@Column(name = "mem_id")

private Long id;

private String username;

private String password;

}

 

 

Repository(DB와 같이 외부통신과 연결하는 역할을 한다)

repository는 interface로 만든다

public interface MemberRepository extends JpaRepository<Member, Long>{

 

 

}

 

Service(서비스의 비즈니스로직을 담당한다)

public interface MemberService {

 

Member saveEntity(Member member);

 

Member saveDto(MemberDto memberdto);

}

 

ServiceImpl

public class MemberServiceImple implements MemberService{

 

@Autowired

private MemberRepository memberRepository;

 

@Override

public Member saveEntity(Member member) {

// TODO Auto-generated method stub

return memberRepository.save(member);

}

 

@Override

public Member saveDto(MemberDto memberdto) {

Member member = Member.builder()

.username(memberdto.getUsername())

.password(memberdto.getPassword())

.build();

return saveEntity(member);

}

 

 

 

LoginDTO

public class LoginDTO {

 

private String username;

private String password;

 

}

 

Repository 

Member Entity에서 username을 찾는다   

public Member findByUsername(String username);

 

public boolean Login(LoginDTO loginDTO);

 

ServiceImpl

회원가입한 아이디, 비밀번호가 로그인할 때 정보와 같은지 확인

@Override

public Member findByUsername(String username) {

return memberRepository.findByUsername(username);

}

public boolean Login(LoginDTO loginDTO) {

String username = loginDTO.getUsername();

String password = loginDTO.getPassword();

Member byUsername = memberRepository.findByUsername(username);

if(byUsername.getUsername().equals(password)) {

return true;

}

return false;

}

 

Controller

 

-로그인 페이지 요청 처리 

@GetMapping(

-"/login")

public String getLogin(HttpServletRequest request, Model model) {

 

//현재 페이지를 가져와서 세셩에 저장

String referer = request.getHeader("Referer");

request.getSession().setAttribute("prevPage", referer);

log.info("url={}", referer);

model.addAttribute("login", new LoginDTO());

return "member/login";

}

 

-로그인 처리  

@PostMapping("/login")

public String postLogin(@ModelAttribute("login") LoginDTO loginDTO, HttpServletRequest httpServletRequest, HttpSession httpSession, Model model) {

boolean login = memberService.Login(loginDTO);

 

if(login) {

String username = loginDTO.getUsername();

Member member = memberService.findByUsername(username);

httpSession.setAttribute("loginMember", member);

 

//저장한 이전페이지 주소를 가져온다

String prevPage = (String) httpServletRequest.getSession().getAttribute("prevPage");

//세션에 페이지 주소 삭제

httpServletRequest.getSession().removeAttribute("prevPage");

 

return "redirect : " + (prevPage != null ? prevPage : "/");

 

}

model.addAttribute("error", "비밀번호 또는 아이디가 올바르지 않습니다");

return "member/login";

}

 

 

-로그아웃 처리

@PostMapping("/login")

public String logout(HttpSession session) {

session.removeAttribute("loginMember");

return "redirect:/";

}

 

-홈 페이지 리다이렉트

@GetMapping("/")

public String home(Model model, HttpSession session) {

Member loginMember = (Member) session.getAttribute("loginMember");

model.addAttribute("loginMember", loginMember);

return "home";

 

}

  

'개발 > spring boot' 카테고리의 다른 글

crud 게시판 만들기  (0) 2024.10.19