스프링 MVC - 로그인 구현
DTO와 Entity는 회원가입 시 사용한 것들 그대로 사용한다.
HTTP세션을 이용하여 로그인을 진행한다.
Repository
1 2 3 4 5 6 | @Repository public interface MemberRepository extends JpaRepository<Member, Long> { public Member findByStudentId(String studentId); } | cs |
- 로그인 시 학번(studentId)를 로그인 아이디로 사용한다.
Service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class MemberService { private final MemberRepository memberRepository; public MemberDto login(MemberDto memberDto) throws Exception { Member findMember = memberRepository.findByStudentId(memberDto.getStudentId()); memberDto.passwordEncoding(encrypt(memberDto.getPassword())); if (findMember != null) { MemberDto findMemberDto = new MemberDto(findMember); if (memberDto.getPassword().equals(findMemberDto.getPassword())) { return findMemberDto; } } return null; } } | cs |
- 로그인 시 입력된 MemberDto를 받아서 회원이 존재하면 입력받은 비밀번호를 암호화 하여 DB의 해당 회원의 비밀번호를 비교하고 로그인한다.
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | @Controller @RequiredArgsConstructor public class MemberSignController { private final MemberService memberService; @GetMapping("/login") public String login(Model model) { MemberDto memberDto = new MemberDto(); model.addAttribute("memberDto", memberDto); return "/member/login"; } @PostMapping("/login") public String login(@ModelAttribute MemberDto memberDto, HttpServletRequest request, Model model) throws Exception { HttpSession session = request.getSession(); MemberDto findMemberDto = memberService.login(memberDto); if (findMemberDto != null) { session.setAttribute("member", findMemberDto); } else { model.addAttribute("message", "ID나 비밀번호가 다릅니다."); return "/member/login"; } return "redirect:/"; } @GetMapping("/logout") public String logout(HttpServletRequest request) { request.getSession().invalidate(); request.getSession(true); return "redirect:/"; } } | cs |
- 로그인이 가능한 회원이면 http session에 회원을 등록해놓는다.
- 로그아웃시 세션에서 객체를 제거한다.
- invalidate와 removeAttribute의 차이
- invalidate() 메소드는 세션의 모든 속성 값을 제거하기 떄문에 removeAttribute()메소드를 사용할 때 처럼 각 속성 값들을 하나씩 제거할 필요가 없다.
invalidate() 메소드는 모든 속성을 제거하기 때문에 세션 유지 시간이 지났을 때 세션이 초기화되는 것과 같은 효과를 가져온다.
초기화가 되지않는다면 서버입장에서는 세션정보를 계속 가지고있게되어 부담이 되고 또한 보안상의 문제가 있다.
따라서 일반적으로 삭제보다는 초기화를 많이 사용한다. 주로 로그아웃기능시 사용한다.
- invalidate() 메소드는 세션의 모든 속성 값을 제거하기 떄문에 removeAttribute()메소드를 사용할 때 처럼 각 속성 값들을 하나씩 제거할 필요가 없다.
- invalidate와 removeAttribute의 차이
'Spring > Spring MVC' 카테고리의 다른 글
[Spring Framework] 스프링MVC - 회원가입 구현 (0) | 2021.04.23 |
---|
댓글