59. spring으로 로그인 하기

hanahana·2022년 9월 6일
0

Spring 학원수강

목록 보기
6/45
post-thumbnail

로그인 폼 만들기

<div class="login-area">
			<form action="/member/login.kh" method="post">
				<table align='right'>
					<tr>
						<td>아이디 :</td>
						<td><input type="text" name="memberId"></td>
						<td rowspan="2"><input type="submit" value="로그인"></td>
					</tr>
					<tr>
						<td>비밀번호 :</td>
						<td><input type="password" name="memberPw"></td>
						<td></td>
					</tr>
					<tr>
						<td colspan="3"><a href="#">회원가입</a></td>

					</tr>
				</table>

			</form>
		</div>

폼에서 입력받은 값 컨트롤러에서 처리하기

@RequestMapping(value = "/member/login.kh", method=RequestMethod.POST)
	public String memberLogin(
			@ModelAttribute Member member,
//			@RequestParam("memberId") String memberId,
//			@RequestParam("memberPw") String memberPw
			HttpServletRequest request, //세션값 주기위해 서블렛 선언하기
			Model model //request를 대체함
			) {
		//Member member = new Member(memberId, memberPw);
/////////////위에 @ModelAttibute를 선언하면 이쪽에 Member변수 안의 값을 넣어주지 않아도
////////////해당 코드에 의해 값이 자동 셋팅된다.
///////////1에 설명
	
//2	
		try {
//3
		Member loginUser = mService.loginMember(member);
		
		if(loginUser != null) {
			HttpSession session = request.getSession(); //세션저장하기
			session.setAttribute("loginUser", loginUser); //세션을 loginUser로 전송하기

			return "redirect:/home.kh";
			}else {
			model.addAttribute("msg","회원정보 없음");
			return"common/errorPage";
		}
		}catch(Exception e) {
			
			model.addAttribute("msg",e.getMessage());//requestSetAttribute와 같음

		return"common/errorPage";
		}
		
	}
  1. @ModelAttribute Member member
    1. 해당 코드는 Member class를 인스탠스화 하여 member안에 값을 셋팅해주는 코드이다
    2. 이 코드에서 가장중요한것은 폼에서 입력받은 name값과 vo클래스의 변수명이 같아야 한다는 것이다.
  2. tryCatch를 사용하여 회원값이 있을때는 home으로 없을때는 에러메세지 회원없음으로 오류가 났을때는 오류창을 출력하는 에러페이지로 연결한다.
  3. Member loginUser = mService.loginMember(member);
    1. 폼에서 입력받은 값으로 찾은 member변수를 해당 클래스 메소드에서 처리하여 전송받는다.

서비스에서 처리하기

  • MEMBEE.VO에 관해서는 지난 포스트에 작성했으니 생략한다.
@Service
public class MemberServicImpl implements MemberService{

@Autowired
	private SqlSessionTemplate session;
	@Autowired
	private MemberStore mStore;

@Override
	public Member loginMember(Member member) {
		Member mOne = mStore.selectLoginMember(session, member);
		return mOne;
	}
  • 세션과 전송할 store를 반드시 선언해야 한다.
  • @Autowired : 나중에 물어보자!
  • @Service 를 선언해주어 Spring이 상속받은 impl클래스로 이동한것이다.

Store

@Repository
public class MemberStoreLogic implements MemberStore {

	@Override
	public Member selectLoginMember(SqlSession session, Member member) {
		Member mOne= session.selectOne("MemberMapper.selectLoginOne",member);
		return mOne;
	}
  • @Repository 반드시 선언해줘야 store를 인식한다.

Mapper

<mapper namespace="MemberMapper">

<resultMap type="com.kh.junspring.member.domain.Member" id="memberResultMap">
<id property="memberId" column="MEMBER_ID"/>
<result property="memberPw" column="MEMBER_PWD"/>
<result property="memberName" column="MEMBER_NAME"/>
<result property="memberEmail" column="MEMBER_EMAIL"/>
<result property="memberPhone" column="MEMBER_PHONE"/>
<result property="memberAddress" column="MEMBER_ADDR"/>
<result property="endrollDate" column="ENROLL_DATE"/>
<result property="updateDate" column="UPDATE_DATE"/>
<result property="status" column="M_STATUS"/>
</resultMap>
<select id="selectLoginOne" resultMap="memberResultMap">

select member_id, member_name from member_tbl where member_id = #{memberId} and member_pwd= #{memberPw}

</select>
  • 위 store에서 namespae.id로 쿼리문을 실행시켰다는걸 확인할수있다.
  • #{memberId}는 controller에서 받아온 폼에 입력된 member의 변수명이다.
  • resultmap을 통해 column의 값을 변수에 저장할수있으며 이 저장된 값은
    • resultMap type="com.kh.junspring.member.domain.Member"
    • 이렇게 연결된 주소의 인스탠스로 만들어진다.
  • select태그 안에 resultMap에 id를 맞추면 select태그와 연결된다.
profile
hello world

0개의 댓글