New World

[해외공구관리사이트] 회원 - 로그인 & 로그아웃 본문

Project/old

[해외공구관리사이트] 회원 - 로그인 & 로그아웃

hyeovi 2022. 9. 5. 20:06
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:/";
    }
반응형
Comments