43일차 특이사항
1. 로그인 기능은 구현했는데 유효성 검사가 어렵네
- 아이디 체크, 비밀번호 체크를 따로 해줘야 한다.
- VO에 회원 정보를 모두 저장한다.
로그인 아이디 체크, 비밀번호 체크
1. 사용자가 입력한 아이디와 비밀번호를 컨트롤러에서 받는다.
- @requestparam?
2. 받은 아이디와 비밀번호를 DB와 비교한다.
3. 아이디가 일치하지 않는 경우 alert를 띄운다.
4. 비밀번호가 일치하지 않는 경우 alert를 띄운다.
5. 둘다 일치하면 회원 정보를 세션에 저장하고 로그인이 된다.
6. 만든 코드 : 로그인은 가능하지만 비번, 아이디 입력을 잘못하면 nullpointexception이 계속되고 있음. try catch문을 사용하면 오류창이 바로 안 뜨기는 한데 오류를 해결한 것이 아니라 찝찝함.
@RequestMapping(value = "/login/login", method = RequestMethod.POST)
public ModelAndView Login(MemberVO vo, Model model, HttpServletRequest request, HttpSession session, @RequestParam("memid") String memid, @RequestParam("mempw") String mempw, String memname) throws Exception {
ModelAndView mav = new ModelAndView();
try {
MemberVO member = service.signin(vo);
memname = member.getMemname();
model.addAttribute("member", member);
model.addAttribute("memname", memname);
boolean idchk = member.getMemid().equals(memid);
boolean pwdchk = member.getMempw().equals(mempw);
if (!idchk) {
// 아이디가 일치하지 않는 경우
System.out.println(" 아이디 존재 하지 않음");
mav.addObject("error", "아이디가 존재하지 않습니다.");
mav.setViewName("login");
} else if (!pwdchk) {
// 비밀번호가 일치하지 않는 경우
System.out.println(" 비번틀림");
mav.addObject("error", "비밀번호가 일치하지 않습니다.");
mav.setViewName("login");
} else {
// 아이디와 비밀번호가 일치하는 경우, 로그인 처리
session.setAttribute("loggedInMember", member);
mav.setViewName("main");
}
} catch (Exception e) {
mav.addObject("error", "로그인 중 오류가 발생했습니다. 다시 시도해주세요.");
mav.setViewName("login");
}
return mav;
}
7. 싹다 갈아 엎음. mapper에서 input에서 넘어온 memid값으로 데이터베이스를 가져온 후 비밀번호 체크는 컨트롤러에서 따로 해줬다.
- controller
@Controller
public class ApprovalController {
@Inject
MemberService service;
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String LoginForm(Model model) {
return "login";
}
@RequestMapping(value = "/login/login", method = RequestMethod.POST)
public ModelAndView Login(MemberVO vo, Model model, HttpServletRequest request, HttpSession session, @RequestParam("memid") String memid, @RequestParam("mempw") String mempw ) throws Exception {
ModelAndView mav = new ModelAndView();
MemberVO member = service.chkMemid(memid);
if (member == null) {
// 데이터베이스에서 회원을 찾지 못한 경우
mav.addObject("error", "등록되지 않은 사용자입니다.");
mav.setViewName("login");
} else {
model.addAttribute("member", member);
boolean pwdchk = member.getMempw().equals(mempw);
System.out.println("확인 : " + pwdchk);
if (!pwdchk) {
// 비번 일치하지 않는 경우
System.out.println("비번틀림");
mav.addObject("error", "비밀번호가 일치하지 않습니다.");
mav.setViewName("login");
} else {
// 아이디와 비밀번호가 일치하는 경우, 로그인 처리
session.setAttribute("loggedInMember", member);
mav.setViewName("main");
}
}
return mav;
}
@RequestMapping(value = "/login/logout", method = RequestMethod.GET)
public String logout(HttpSession session) {
//세션에서 로그인 정보 삭제
session.removeAttribute("loggedInMember");
return "login";
}
}
- mapper
<select id="chkid" resultType="com.approval.jsh.vo.MemberVO">
select
memname,
memno,
memid,
mempw,
memrank
from
sh_emp
where memid=#{memid}
</select>
로그인, 로그인 유효성 검사, 로그아웃
로그인, 로그인 유효성 검사, 로그아웃 기능까지 구현했다.
confirm 함수를 써서 로그아웃시 바로 로그아웃 되지 않도록 방지했다. 로그인이 되면 model에 저장된 사원의 이름, 계급이 나타나도록 구현했다.
emp1 : 사원이름
CLERK : 사원계급
해야할일
1. 게시판 리스트에 해당하는 DB 설계
느낀 점
mapper에서 아이디와 비밀번호 모두 동일한 데이타를 가져오는 쿼리문을 작성했었다. 그 결과 아이디가 없거나 비밀번호가 틀린 경우 member 객체가 null이 돼서 nullpointexception 오류가 발생했다. 이것 때문에 2~3시간을 사용했는데 다음부터는 null값이 발생하면 mapper를 확인해야겠다. DB에 없는 값을 가져오려고 하니 null이 발생하는 것이다. 오류가 발생하면 원인을 쉽게 찾지 못한다. 아직도 눈썰미가 없는 것이다. 문제해결을 더 하면 좋아지려나? 이해가 느리니 해결하는 속도가 느리다. 다음에는 더 나아지리라 다짐한다.
'일경험' 카테고리의 다른 글
결재시스템 테이블 JOIN, write.jsp 만들기 (0) | 2023.10.08 |
---|---|
[국민취업지원제도 일경험프로그램 44일차] 결재 시스템 프로젝트③ 특정 사용자에게만 버튼 보이기 (0) | 2023.10.06 |
[국민취업지원제도 일경험프로그램 42일차] 결재 시스템 프로젝트 (0) | 2023.10.04 |
[국민취업지원제도 일경험프로그램 41일차] SQLD 시험 결과 기다리는 중 (0) | 2023.09.27 |
[국민취업지원제도 일경험프로그램 40일차] 복습 (1) | 2023.09.26 |