본문 바로가기

일경험

[국민취업지원제도 일경험프로그램 43일차] 결재 시스템 프로젝트②

반응형

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 함수로그인 화면으로

confirm 함수를 써서 로그아웃시 바로 로그아웃 되지 않도록 방지했다. 로그인이 되면 model에 저장된 사원의 이름, 계급이 나타나도록 구현했다. 

 

emp1 : 사원이름 

CLERK : 사원계급 

 

내일은 더 잘해보자

해야할일

1. 게시판 리스트에 해당하는 DB 설계

 

느낀 점

mapper에서 아이디와 비밀번호 모두 동일한 데이타를 가져오는 쿼리문을 작성했었다. 그 결과 아이디가 없거나 비밀번호가 틀린 경우 member 객체가 null이 돼서 nullpointexception 오류가 발생했다. 이것 때문에 2~3시간을 사용했는데 다음부터는 null값이 발생하면 mapper를 확인해야겠다. DB에 없는 값을 가져오려고 하니 null이 발생하는 것이다. 오류가 발생하면 원인을 쉽게 찾지 못한다. 아직도 눈썰미가 없는 것이다. 문제해결을 더 하면 좋아지려나? 이해가 느리니 해결하는 속도가 느리다. 다음에는 더 나아지리라 다짐한다. 

 

 

 

반응형