Skip to content

주요 기능 소개(Login)

채현우 edited this page Jun 1, 2022 · 5 revisions

📌 Login

✔️ 로그인

  • 로그인 시 Ajax를 사용하여 비동기 방식으로 DB에 저장된 ID와 PW를 가져와
    사용자가 입력한 값과 비교해서 값이 일치할 때 로그인 허용
  • 아이디 저장 체크 박스를 체크하고 로그인 시 30분 동안 저장하는 Cookie 생성
  • 로그인 성공 시 Session 생성 및 메인 페이지로 이동

💻 code

MemberController.java
//로그인 - 회원 가입 컨트롤러
@RestController("memberController")
@RequestMapping("/movie")
public class MemberController {
		
	
	//얘를 호출하면 MemberServiceImpl이 딸려 들어옴
	@Resource
	private MemberService memberService;
	
	//로그인 화면
	//@RequestMapping(value = "/moviestar/login", method = RequestMethod.GET)
	@GetMapping("/login")
	public ModelAndView login() throws Exception {
			
		ModelAndView mav = new ModelAndView();
			
		//mav.setViewName("memberLogin");
		mav.setViewName("member/login");
		
		return mav;
	}

	//로그인 처리
	@RequestMapping(value = "/login_ok", method = RequestMethod.POST)
	public ModelAndView login_ok(HttpSession session, boolean rememberId, HttpServletResponse response,
			HttpServletRequest request) throws Exception {
		
		ModelAndView mav = new ModelAndView();
		
		String id = request.getParameter("id");
		
		MemberDTO dto = memberService.getReadData(id); //하나의 User 정보 가져오기
		
		
		session.setAttribute("customInfo", dto);
        
		//쿠키 시간
		if(rememberId) {
			//1. 쿠키 생성
			Cookie cookie = new Cookie("id", id);
			cookie.setMaxAge(60*60); // 쿠키 시간을 1시간으로 설정
			// 2. 응답에 저장
			response.addCookie(cookie);
		}else {
			//쿠키 삭제
			Cookie cookie = new Cookie("id", null);
			cookie.setMaxAge(0); //쿠키 삭제
			response.addCookie(cookie);
		}		
		mav.setViewName("redirect:/main");
		
		return mav;
	}

	//로그인 할 때 DB판별 Ajax
        @RequestMapping(value = "/loginAjax",method = {RequestMethod.GET,RequestMethod.POST})
        @ResponseBody
        public Map<Object, Object> loginAjax(@RequestBody MemberDTO dto) throws Exception {
		
	      int count=0;
	      Map<Object, Object> map = new HashMap<Object, Object>();
		
	      count = memberService.memberlogin(dto);
		
	      map.put("cnt", count);
		
	      return map;
	}
}
MemberServiceImpl.java
//MemberService 인터페이스를 구현한 Class
@Service("memberService") //객체 생성
public class MemberServiceImpl implements MemberService {
	
	@Autowired ////memberMapper에 있는 sql문을 MemberServiceImpl로 읽어와서 의존성 주입하여 객체 생성한 것.
	private MemberMapper memberMapper; //의존성 주입
	
	//경로 : MemberController -> MemberService(I) -> MemberServiceImpl(C) ->
	//		 MemberMapper(I) -> MemberMapper.xml
		
	//로그인 할 때 Ajax를 사용해서 사용자가 입력한 값과 DB에 저장된 값 비교
	@Override
	public int memberlogin(MemberDTO dto) throws Exception {
		int count = memberMapper.memberlogin(dto);
		
		return count;
	}

	//하나의 User 정보 가져오기(로그인 시 Session)
	@Override
	public MemberDTO getReadData(String id) throws Exception {
		
		MemberDTO dto = memberMapper.getReadData(id);
		
		return dto;
	}
}
memberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.finalProject.mapper.MemberMapper">

<!-- 로그인(loginChk)- ID, PW 검증 -->
<select id="memberlogin" parameterType="com.finalProject.dto.MemberDTO" resultType="Integer">
	select count(*) from moviemember
	where id=#{id} and pwd = #{pwd}
</select>
</mapper>

📷 View

Image

Login 화면


✔️ ID 찾기

  • 회원 가입할 때 작성한 이름과 이메일을 DB에서 가져와서 사용자가 입력한 값과 비교를 해서 값이 일치할 때 사용자의 ID를 보여준다.

💻 code

MemberController.java
//로그인 - 회원 가입 컨트롤러
@RestController("memberController")
@RequestMapping("/movie")
public class MemberController {
		
	//얘를 호출하면 MemberServiceImpl이 딸려 들어옴
	@Resource
	private MemberService memberService;

	// ID 찾기 화면
	@RequestMapping(value = "/searchId", method = {RequestMethod.POST, RequestMethod.GET})
	public ModelAndView searchId(HttpServletRequest request, HttpServletResponse response) {
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("member/searchId");
		
		return mav;
	}
	
	// ID찾기 화면 처리
	@RequestMapping(value = "/searchId_ok", method = {RequestMethod.POST, RequestMethod.GET})
	public ModelAndView searchId_ok(MemberDTO dto, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		ModelAndView mav = new ModelAndView();
		dto.getEmail1();
		String id = memberService.findId(dto);
		request.setAttribute("id", id);
		
		mav.setViewName("member/searchId_com");
		
		return mav;
	}
	
	//Id 찾기 DB판별 Ajax
	@RequestMapping(value = "/idAjax",method = {RequestMethod.GET,RequestMethod.POST})
        @ResponseBody
        public Map<Object, Object> idAjax(@RequestBody MemberDTO dto ) throws Exception {
        
            String id="";
            Map<Object, Object> map = new HashMap<Object, Object>();
 
            id = memberService.findId(dto);
        
            map.put("cnt", id);
 
            return map;
        }
}
MemberServiceImpl.java
//MemberService 인터페이스를 구현한 Class
@Service("memberService") //객체 생성
public class MemberServiceImpl implements MemberService {
	
	@Autowired ////memberMapper에 있는 sql문을 MemberServiceImpl로 읽어와서 의존성 주입하여 객체 생성한 것.
	private MemberMapper memberMapper; //의존성 주입
		
	// ID 찾기
	@Override
	public String findId(MemberDTO dto) throws Exception {
		
		String id = memberMapper.findId(dto);
		
		return id;
	}
}
memberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.finalProject.mapper.MemberMapper">

<!-- ID 찾기 -->
<select id="findId" parameterType="com.finalProject.dto.MemberDTO" resultType="String">
     select id from moviemember
     where name = #{name} and email1=#{email1}
</select>
</mapper>

📷 View

Image

ID 찾기 화면 ID 찾기 결과


✔️ PW 찾기

  • 회원 가입할 때 작성한 이름과 이메일을 DB에서 가져와서 사용자가 입력한 값과 비교를 해서 값이 일치할 때 사용자의 ID를 보여준다.

💻 code

MemberController.java
//로그인 - 회원 가입 컨트롤러
@RestController("memberController")
@RequestMapping("/movie")
public class MemberController {
		
	//얘를 호출하면 MemberServiceImpl이 딸려 들어옴
	@Resource
	private MemberService memberService;

	// PW 찾기 화면
	@RequestMapping(value = "/searchPw", method = {RequestMethod.POST, RequestMethod.GET})
	public ModelAndView searchPw(HttpServletRequest request, HttpServletResponse response) {
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("member/searchPw");
		
		return mav;
	}
	
	// PW 찾기 화면 처리
	@RequestMapping(value = "/searchPw_ok", method = {RequestMethod.POST, RequestMethod.GET})
	public ModelAndView searchPw_ok(MemberDTO dto, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		ModelAndView mav = new ModelAndView();
		//dto.getEmail1();
		//String id = memberService.findId(dto);
		//request.setAttribute("id", id);
		
		dto.getName();
		String pw = memberService.findPw(dto);
		request.setAttribute("pw", pw);
		
		
		mav.setViewName("member/searchPw_com");
		
		return mav;
	}	
	
	// PW 찾기 DB 판별 Ajax
	@RequestMapping(value = "/pwAjax",method = {RequestMethod.GET,RequestMethod.POST})
        @ResponseBody
        public Map<Object, Object> pwAjax(@RequestBody MemberDTO dto ) throws Exception {
        
		String pw="";
		Map<Object, Object> map = new HashMap<Object, Object>();
		pw = memberService.findPw(dto);
		map.put("cnt", pw);
 
        return map;
    }		

}
MemberServiceImpl.java
//MemberService 인터페이스를 구현한 Class
@Service("memberService") //객체 생성
public class MemberServiceImpl implements MemberService {
	
	@Autowired ////memberMapper에 있는 sql문을 MemberServiceImpl로 읽어와서 의존성 주입하여 객체 생성한 것.
	private MemberMapper memberMapper; //의존성 주입
		
	// PW 찾기
	@Override
	public String findPw(MemberDTO dto) throws Exception {
		
		String pw = memberMapper.findPw(dto);
		
		return pw;
	}
}
memberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.finalProject.mapper.MemberMapper">

<!-- PW 찾기 -->
<select id="findPw" parameterType="com.finalProject.dto.MemberDTO" resultType="String">
     select pwd from moviemember
     where id = #{id} and name=#{name}
</select>
</mapper>

📷 View

Image

PW 찾기 화면 PW 찾기 결과