New World
[해외공구관리사이트] 회원 - 로그인 & 로그아웃 본문
728x90
반응형
로그인 페이지의 기능
1. 아이디가 등록되어있는 아이디인지 확인
2. 비밀번호가 맞는지 확인
로그인을 위한 form을 만들어 request 로 서버로 넘겨준다.
@Getter
@Setter
public class MemberFormLogin {
@NotEmpty(message = "회원 아이디는 필수입니다.")
private String id;
@NotEmpty(message = "패스워드는 필수입니다.")
private String pwd;
}
controller
ㄴ MemberController
@RequestMapping("/login")
public String login() {
return "sample/member/login";
}
API
ㄴ MemberApiController
세션이 없는 경우, 세션을 등록해준다. 해당 로그인에 사용한 입력값이 없는 경우 null 로 로그인을 할 수 없도록 해주며 입력값이 있는 경우 30분(1800 초) 동안 저장해준다.
@PostMapping("/api/member/login")
public void login(@RequestBody @Valid MemberFormLogin request, HttpServletResponse response,
@SessionAttribute(name = "mSession", required = false) Long nowLoginMemberNo, HttpServletRequest req,
RedirectAttributes rttr) {
HttpSession session = req.getSession();
if (session.getAttribute("mSession") == null) {
Long mSession = memberService.login(request, response);
if (mSession == null) {
session.setAttribute("mSession", null);
rttr.addFlashAttribute("msg", false);
} else {
session.setAttribute("mSession", mSession);
session.setMaxInactiveInterval(1800);
}
}
}
Service
ㄴ MemberService
ㄴ MemberServiceImpl
findById 메소드를 통해 id가 DB에 저장되어있는 것인지 확인해주고, findByMember을 통해 id와 pwd가 같은 것이 있는지 확인해준다. 없으면 에러 메세지를 노출시켜주며 있다면 해당 id에 따른 멤버 값을 통해 로그인을 시켜줍니다.
@Override
@Transactional
public Long login(MemberFormLogin request, HttpServletResponse response) {
String id = request.getId();
String pwd = request.getPwd();
List<Member> findId = memberRepository.findById(id);
if (findId.isEmpty()) {
throw new IllegalStateException("등록되어있지 않는 아이디입니다.");
} else {
List<Member> findMember = memberRepository.findByMember(id, pwd);
if (findMember.isEmpty()) {
throw new IllegalStateException("비밀번호가 틀렸습니다.");
} else if (findId.size() > 1) {
throw new IllegalStateException("동일한 회원이 여럿 있습니다.");
} else {
return findMember.get(0).getNo();
}
}
}
repository
ㄴ MemberRepository
findById는 DB의 member 테이블에 입력값인 id와 동일한 값이 있는지 확인해주는 메소드의 역할을 해준다.
public List<Member> findById(String id) {
return em.createQuery("select m from Member m where m.id =: id", Member.class)
.setParameter("id", id)
.getResultList();
}
public List<Member> findByMember(String id, String pwd) {
return em.createQuery("select m from Member m where m.id =: id and m.pwd =: pwd", Member.class)
.setParameter("id", id)
.setParameter("pwd", pwd)
.getResultList();
}
로그아웃
1. 저장되어있던 로그인 정보 세션 값을 초기화 시켜준다.
controller
ㄴ MemberController
세션 값을 초기화 시켜주며 메인 페이지로 돌아가준다.
@GetMapping("/logout")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession();
session.invalidate();
return "redirect:/";
}
반응형
'Project > old' 카테고리의 다른 글
[해외공구관리사이트] 회원 - 수정 & 탈퇴 (0) | 2022.09.06 |
---|---|
[해외공구관리사이트] 회원 - 내 정보 (0) | 2022.09.06 |
[해외공구관리사이트] 회원 - 가입 (0) | 2022.09.05 |
[해외공구관리사이트] 메뉴 상세도 (0) | 2022.09.04 |
[해외공구관리사이트] 자기 점검 (전체적인 흐름 확인도) (0) | 2022.06.06 |
Comments