본문 바로가기

spring/로그인&회원가입

[spring/mybatis] 로그인/ 로그아웃 기능

mybatis 라이브러리를 사용해서 로그인 기능을 구현하였다.

- mybatis란? 데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다 편하게 사용하기 위해 xml로된 Mapper 설정 파일을 통해서 JDBC를 구현한 영속성 프레임워크

 

로그인 기능을 만들기 전에~ 

1. 회원정보 DB 테이블 생성

2. memberVo, memberController, memberDao 생성

3. memberVo 객체, 기본 생성자, 매개변수 생성자, getter&setter을 만들어준다.

  -> 라이브러리 Lombok을 이용하면 getter/setter 자동으로 추가해준다(@Data)

 

@Data
public class Member {
	private int memberNo;		// 회원번호
	private String memberId;	// 아이디
	private String memberPw;	// 비밀번호
	private String memberName;	// 회원이름
	private String phone;		// 전화번호 010-0000-0000
	private String email;		// 이메일
	private String enrollDate;	// 가입일 YYYY-MM-DD
	private String filepath;	// 파일경로
	private int memberLevel;	// 회원구분 
	private int gender;		// 성별구분 1.남 2.여
	private int age;		// 나이구분 1.20대 2.30대 3.40대이상
	private int profileStatus;	// 프로필등록여부 1.등록 2.미등록
}

 

 

<서버 실행했을 때, 자동으로 실행하게 연결해 놓는 작업>

4-1. servlet-context.xml에서 <context:component-scan base-package="kr.or.member"/> 추가(스캔범위설정)

 

4-2. 접속하도록 만들어놨으니까 자동생성하도록 (아래 참고)

Controller@controller / service @Service / Dao @Repository 입력

 

그리고, Controller service 의존성 주입

@Autowired

      private MemberService service;

 

service dao 의존성 주입

@Autowired
      private MemberDao dao;

 

dao SqlSessionTemplate (라이브러리 사용했으니 bean방식을 사용해서 servlet-context.xml에 입력)

@Autowired

      private SqlSessionTemplate sqlSession;

 


header.jsp

부트스트랩 모달창을 이용하여 로그인 창을 띄워주었다.

 

	<!-- 로그인 modal -->
	<div class="modal" id="modal1">
		<div class="modal-dialog" role="document" style="margin-top:100px;">
			<div class="modal-content">
				<div class="modal-header">
			        <div class="brand_logo">
			            <a href="/">Oh-Mate!</a>
			        </div>
					<h5 class="modal-title" style="padding-right:160px;">로그인</h5>
					<button type="button" class="btn-close" data-dismiss="modal" aria-label="Close">
						<span aria-hidden="true"></span>
					</button>
				</div>
				<form action="/login.do" method="post" class="loginForm">
					<div class="modal-body">
						<div class="form-group">
							<label for="memberId">아이디</label>
							<input type="text" name="memberId" id="memberId" 
							class="form-control" placeholder="아이디입력">
						</div><br>
						<div class="form-group">
							<label for="memberPw">비밀번호</label>
							<input type="password" name="memberPw" id="memberPw" 
							class="form-control" placeholder="비밀번호입력">
						</div>
					</div>
					<div class="modal-footer">
						<button type="submit" class="btn btn-primary" style="width:100%; line-height: normal;">로그인</button>
							<a href="/searchIdFrm.do" class="searchMember">아이디 찾기</a>|
							<a href="/searchPwFrm.do" class="searchMember">비밀번호 찾기</a>|
							<a href="/joinFrm.do" class="searchJoin">가입하기</a>
					</div>
				</form>		
			</div>
		</div>
	</div>

 

memberController

service에서 받아온 member를 m에 저장

만약 m이 null이 아니라면 sessionAttribute에 m을 저장하고, alert창으로 "로그인 성공~!"이라는 메세지를 띄워주었다.

 

@Controller
public class MemberController {
	@Autowired
	private MemberService service;
	
	//로그인
	@RequestMapping(value="/login.do")
	public String login(Member member, HttpSession session, Model model) {
		Member m = service.selectOneMember(member);
		if(m != null) {
			session.setAttribute("m", m);
			model.addAttribute("msg","로그인 성공~!");
		}else {
			model.addAttribute("msg","아이디 또는 비밀번호를 다시 확인해주세요.");
		}
		model.addAttribute("loc","/");
		return "common/msg";
	}

 

memberService

 

@Service
public class MemberService {
	@Autowired
	private MemberDao dao;

	//로그인
	public Member selectOneMember(Member member) {
		return dao.selectOneMember(member);
	}

 

memberDao

 

@Repository
public class MemberDao {
	@Autowired
	private SqlSessionTemplate sqlSession;

	//로그인
	public Member selectOneMember(Member member) {
		return sqlSession.selectOne("member.selectOneMember", member);
	}

 

memberSQL.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="member">
	<!-- 로그인  -->
	<select id="selectOneMember" parameterType="m" resultType="m">
		select 
			member_no as memberNo,
			member_id as memberId,
			member_pw as memberPw,
			member_name as memberName,
			phone,
			email,
			enroll_date as enrollDate,
			member_filepath as filepath,
			member_level as memberLevel,
			gender,
			age,
			profile_status as profileStatus	
 		from member where member_id=#{memberId} and member_pw=#{memberPw}
	</select>
</mapper>

 

1) namespace : 이름공간 또는 네임스페이스는 개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다.

-> namespace를 member로 정했기때문에 MemberDao에서 "member.selectOneMember" 으로 입력

(memberSQL.xml namespace:member / memberDao:member 일치해야함)

 

2) <typeAliases> : Mybatis에서 사용할 자료형의 별칭을 선언

parameterType="m" resultType="m"

mybatis-config.xml : kr.or.member.model.vo.Member 패키지 경로를 m이라는 별칭을 사용하였다.

 

 

* msg.jsp


 

#로그아웃

로그아웃은 정말 간단~~ MemberController에 작성만 해주면 끝!!

	//로그아웃
	@RequestMapping(value="/logout.do")
	public String logout(HttpSession session) {
		session.invalidate();
		return "redirect:/";
	}

 

 

 

 

반응형

'spring > 로그인&회원가입' 카테고리의 다른 글

[spring/mybatis] 회원가입  (0) 2022.01.17
[spring/mybatis] 아이디/비밀번호 찾기  (0) 2021.12.03