본문 바로가기
Spring/Spring MVC

[Spring Framework] 스프링 MVC - 로그인

by dvid 2021. 5. 25.

스프링 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() 메소드는 모든 속성을 제거하기 때문에 세션 유지 시간이 지났을 때 세션이 초기화되는 것과 같은 효과를 가져온다.
        초기화가 되지않는다면 서버입장에서는 세션정보를 계속 가지고있게되어 부담이 되고 또한 보안상의 문제가 있다.
        따라서 일반적으로 삭제보다는 초기화를 많이 사용한다. 주로 로그아웃기능시 사용한다.

'Spring > Spring MVC' 카테고리의 다른 글

[Spring Framework] 스프링MVC - 회원가입 구현  (0) 2021.04.23

댓글