회원가입 부터 구현
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 |
---|