spring mvc homepage 스프링 홈페이지 만들기 6

이번에는 로그인을 해볼예정이에요. id와 패스워드가 필요할텐데요. 전 아까 sunplan 이라고 id를 만들었어요. 패스워드는 쉽게 121212로 하였네요. 이걸 가지고 로그인 하는걸 만들어 볼께요. 

TOP.JSP파일을 수정할꺼에요. 

 <!-- Right navbar links -->
      <ul class="order-1 order-md-3 navbar-nav navbar-no-expand ml-auto">
      <c:if test="${not empty login}">			
      	<li class="nav-item">
      		<button type="button" class="btn btn-outline-primary nav-link"  onclick="goLogout()">${login.uname}님</button>&nbsp;
      	</li>
	  </c:if>
	  <c:if test="${empty login}">
	  	<li class="nav-item">
      		<input type="text" class="form-control" placeholder="아이디" id="uid">&nbsp;
      	</li>
      	<li class="nav-item">
      		<input type="password" class="form-control" placeholder="패스워드" id="upassword">&nbsp;
      	</li>
      	<li class="nav-item">
          <button type="button" class="btn btn-outline-primary" onclick="goLogin()">로그인</button>&nbsp;
        </li>	  
      	<li class="nav-item">
          <a class="nav-link" href="/user/register">가입하기</a>
        </li>
      </c:if>
        <!-- Messages Dropdown Menu -->
        <li class="nav-item dropdown">
        </li>
        <!-- Notifications Dropdown Menu -->
        <li class="nav-item dropdown">
        </li>
        <li class="nav-item">
          <a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#" role="button"><i
              class="fas fa-th-large"></i></a>
        </li>
      </ul>
    </div>
  </nav>
  <!-- /.navbar -->


  
<script>
function goLogout()
{	
	var url;
	url = '/user/logout';	
	var data = JSON.stringify({
	});
	getPostData(url,data,callback_common,false);
}
function goLogin()
{	
	var url;
	url = '/user/login';
	
	
	var data = JSON.stringify({
		uid : $("#uid").val()
		 , upw : $("#upassword").val()
	});
	getPostData(url,data,callback_common,false);
}
var callback_common = function (result)
{
	if(result['result']=='LOGIN_SUCCESS')
	{
		showmessage("알림","로그인 되었습니다..",5000,'');
		self.location = "${pageContext.request.contextPath}/";
	}
	if(result['result']=='LOGOUT_SUCCESS')
	{
		showmessage("알림","로그아웃 되었습니다..",5000,'');
		self.location = "${pageContext.request.contextPath}/";
	}
	else if(result['result']=='ID_NOT_FIND')
	{	
		showmessage("알림","아디를 확인해주세요.",5000,'');
		$("#uid").val("");
		$("#uid").focus();
	}
	else if(result['result']=='PASSWORD_FAIL')
	{	
		showmessage("알림","아디를 확인해주세요.",5000,'');
		$("#uid").val("");
		$("#uid").focus();
	}
	else
	{
		showmessage("알림",result['message'],20000,'');
		ms_alert("알림","내용이 등록/수정을 실패하였습니다");
	}
}
</script>

 <!-- Right navbar links --> 아래쪽에 로그인이 가능한 폼을 추가했어요. 

login 값의 유무에 따라 로그인 로그아웃 기능을 넣었어요. 

top.jsp
0.01MB

컨트롤러는 이렇게 추가했어요. 

	@ResponseBody
	public CommonData logout(HttpServletRequest request, HttpServletResponse response, @RequestBody CommonData dto, Model model) throws Exception{
		Map<String, String> paramMap = new HashMap<>();
		CommonData result = new CommonData();
		HttpSession session = request.getSession();
		Util_Message smsp = Util_Message.getInstance();
	   Object obj = session.getAttribute("login");
	   if (obj != null) {
		Member vo = (Member) obj;
		String ip = request.getRemoteAddr();
		dto.put("u_idx", vo.getIdx());
		dto.put("uip", ip);
		dto.put("ustate", "logout");
		service.insert(dto, "User_Mapper.user_login_history");
		System.out.println("logout.................................2");
		session.removeAttribute("login");
		session.invalidate();

		System.out.println("logout.................................3");
		Cookie loginCookie = WebUtils.getCookie(request, "loginCookie");

		if (loginCookie != null) {
			loginCookie.setPath("/"); loginCookie.setMaxAge(0);
			response.addCookie(loginCookie); 
			}
			
		}
	   result.put("result", "LOGOUT_SUCCESS");
	    return result;
	}
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	@ResponseBody
	public CommonData post_login(HttpServletRequest request, HttpServletResponse response, @RequestBody CommonData dto, Model model) throws Exception{
		Map<String, String> paramMap = new HashMap<>();
		CommonData result = new CommonData();
		HttpSession session = request.getSession();
		Util_Message smsp = Util_Message.getInstance();
	    if (session.getAttribute("login") != null) {
	      smsp.print_String("clear login data before");
	      session.removeAttribute("login"); //로그인 정보 삭제
	    }	    
	    smsp.print_CommonData(dto); //넘어온데이터 출력.
	    
	    String useCookie=dto.get("useCookie");
	    
		int cnt = service.listSearchCount(dto, "User_Mapper.user_id_check");
		if (cnt == 0)
		{
			result.put("result", "ID_NOT_FIND");
			result.put("message", "ID가 없습니다.");
			return result;
		}
		Member vo = service.select_member(dto, "User_Mapper.tb_member_select_one");
		if(vo==null)
		{
			result.put("result", "PASSWORD_FAIL");
			result.put("message", "패스워드를 확인해주세요.");
			return result;
		}
		String ip = request.getRemoteAddr();
		dto.put("u_idx", vo.getIdx());
		dto.put("uip", ip);
		dto.put("ustate", "login");
		service.insert(dto, "User_Mapper.user_login_history");
		smsp.print_String_no_line("로그인정보가 있습니다.");
		String CPath = "/";
		//SecurityMember s_mem = new SecurityMember(vo);
		model.addAttribute("userVO", vo);
		session.setAttribute("login", vo);
		if(useCookie!=null)
		{	
			if(useCookie.equals("true"))
			{
				smsp.print_String_no_line("쿠키정보를 추가합니다.");
				//쿠키...
			    //로그인 유지기간 섹션값저장
				int limit_time = 60*60*24*365;//1년일
				Date sessionLimit = new Date(System.currentTimeMillis()+(1000*limit_time));
				dto.put("sessionId",session.getId());
				dto.put("sessionLimit",sessionLimit);
				service.update(dto, "User_Mapper.keepLogin");
				Cookie loginCookie = new Cookie("loginCookie", session.getId());
				loginCookie.setPath("/");
				loginCookie.setMaxAge(limit_time);
				smsp.print_String("CPath : " + CPath);
				CPath = "/";			
				response.addCookie(loginCookie);
			}
		}
		result.put("result", "LOGIN_SUCCESS");
		return result;
	}

로그인 로그아웃 부분을 추가했어요. 

User_Controller.java
0.01MB

mapper파일도 수정을 해줘요. 

 <select id="tb_member_select_one" resultType="com.eunhocompany.domain.Member"> 
        SELECT tm1.idx
		     , tm1.uid
		     , tm1.uname
		     , tm1.uchart
		     , tm1.uemail
		     , tm1.umobile
		     , tm1.menu_lv
		     , tm1.join_pass
		     , tm1.mt_use
		FROM tb_member tm1
         where tm1.mt_use = 'Y'
           and tm1.uid = #{uid}
           and tm1.upw = #{upw}
         order by menu_lv desc
		 limit 1
    </select>
    
     <insert id="user_login_history">		
		insert into tb_login_history(
					u_idx
				  , uip
				  , ustate
				  , mt_input_wdate
				  )
		   values(  #{u_idx}
				  , #{uip}
				  , #{ustate}
				  , now()
		          )
	</insert>

 

User_Mapper.xml
0.00MB

로그인 로그아웃 을 해볼께요. 

로그인 로그아웃

로그인 로그아웃을 확인해봤어요. 

히스토리도 잘 남는지 볼께요. 

로그인 기록

다음은 게시판을 만들어볼께요. 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,