Spring
Spring(로그인 - 1)
불도정
2023. 4. 25. 21:45
이번엔 로그인을 클릭하면 로그인 정보를 가져오고 그 정보를 session에 저장시켜 유지시키고,
Redirect가 되어도 속성들을 유지시켜줄수있는 객체를 사용하여 로그인을 유지시키는 코드들을 작성해 볼것이다.
또한 입력한 이메일과 패스워드가 일치하지 않을 시 메세지를 띄워주는 코드들도 작성해볼거다.
먼저 MemberController 클래스이다
package edu.kh.comm.member.controller;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import edu.kh.comm.member.model.service.MemberService;
import edu.kh.comm.member.model.vo.Member;
@Controller
@RequestMapping("/member")
@SessionAttributes({"loginMember", "message"}) // Model에 추가된 값의 key와 어노테이션에 작성된 값이 같으면
// 해당 값을 session scope로 이동시키는 역할
public class MemberController {
private Logger logger = LoggerFactory.getLogger(MemberController.class);
@Autowired
private MemberService service;
@PostMapping("/login")
public String login( @ModelAttribute Member inputMember,
Model model,
RedirectAttributes ra,) {
// RedirectAttributes -> 리다이렉트 후에도 속성들 유지시켜줌
logger.info("로그인 기능 수행됨");
logger.debug(inputMember.getMemberEmail());
logger.debug(inputMember.getMemberPw());
// 아이디, 비밀번호가 일치하는 회원 정보를 조회하는 service 호출 후
// 결과 반환 받기.
Member loginMember = service.login(inputMember);
/* Model : 데이터를 맵 형식(K:V) 형태로 담아 전달하는 용도의 객체
* -> request, session 을 대체하는 객체
*
* - 기본 scope : request
* - session scope로 변환하고 싶은 경우
* 클래스 레벨로 @SessionAttributes 를 작성하면 된다.
*/
if(loginMember != null) { // 로그인 성공시
model.addAttribute("loginMember", loginMember);
} else {
// model.addAttribute("message", "아이디 또는 비밀번호가 일치하지 않습니다.");
ra.addFlashAttribute("message", "아이디 또는 비밀번호가 일치하지 않습니다.");
}
return "redirect:/";
}
}
먼저 login메소드 안에 로그인 정보를 담을 inputMember, 데이터를 맵 형식으로 받을 Model, 리다이렉트 하고도 속성을
유지 시켜줄 수 있는 RedirectAttributes를 담아준다.
여기서 Model에 대해 좀더 알아보자
- Model : 데이터를 맵 형식(K:V) 형태로 담아 전달하는 용도의 객체
-> request, session 을 대체하는 객체
- 기본 scope : request
->session scope로 변환하고 싶은 경우 클래스 레벨로 @SessionAttributes 를 작성하면 된다.
다음은 DAO클래스이다
package edu.kh.comm1.member.model.dao;
import org.mybatis.spring.SqlSessionTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import edu.kh.comm1.member.model.vo.Member;
@Repository
public class MemberDAO {
@Autowired
private SqlSessionTemplate sqlSession;
private Logger logger = LoggerFactory.getLogger(MemberDAO.class);
public Member login(Member inputMember) {
// 1행 조회(파라미터VO, 반환되는 결과 VO)
Member loginMember = sqlSession.selectOne("memberMapper.login", inputMember);
return loginMember;
}
}
다음은 service이다
package edu.kh.comm1.member.model.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.kh.comm1.member.model.dao.MemberDAO;
import edu.kh.comm1.member.model.vo.Member;
@Service
public class MemberServiceImpl implements MemberService {
@Autowired
private MemberDAO dao;
@Override
public Member login(Member inputMember) {
Member loginMember = dao.login(inputMember);
return loginMember;
}
}
service클래스에서 달리진건 loginMember를 리턴해준다는거 정도...
<select id="login" parameterType="member" resultMap="member_rm">
SELECT MEMBER_NO,MEMBER_EMAIL,MEMBER_NICK ,MEMBER_TEL,
MEMBER_ADDR, PROFILE_IMG,
TO_CHAR( ENROLL_DT, 'YYYY-MM-DD HH24:MI:SS') AS ENROLL_DT
FROM MEMBER_S
WHERE MEMBER_EMAIL = #{memberEmail}
AND MEMBER_PW = #{memberPw}
AND SECESSION_FL = 'N'
</select>
member-mapper.xml에 <select>태그이다.
그리고 서버를 실행해보면

로그인이 잘 되었다!
다음편에 이어서 해보겠다.