학원/JSP

11/22 48-3 [JSP] ResponseForRedirect(리다이렉트로 로그인처리)

도원결의 2022. 11. 22. 20:22

리다이렉트방식으로 로그인 하는 법을 배움

  *** 페이지이동 방식은 총 2가지가 있음 **
 forward방식 vs redirect 방식 우선 걍 있다는것만..
 (forward - 처음 서블릿햇을 때 사용해봄)
 (redurect - 지금 이걸 해보는 거! )

 

 

총 3개의 페이지가 필요

1.로그인페이지(로그인하면 이동하는 페이지 경로를 적어줘야겠지)

2.로그인하는 로직을 짜는 페이지 (여긴 로그인처리만 하고 바로 다른 페이지로 이동시킬거임 이렇게 오늘 하루종일 페이지 이동을 한거!!!!)

3. 로그인 성공 후 마이페이지 (여기선 내가 입력한 아이디랑 비밀번호를 뿌려줄거!)

 

1. 로그인 페이지(여긴 거의 틀을 가져올 거고 중요하게 볼 것은 바로 이동 경로!! form 태그의 action을 눈여겨 보자 )

  <div class="container">
        <div class="jumbotron bg-info">
           <h1>sendRedirect()메소드</h1>
        </div>
		<fieldset class=" form-group border p-3">
			<legend class="w-auto px-3">리다이렉트로 이동 </legend>
			<form class="form-inline" action="ResponseForRedirectProcess.jsp" method="POST">
    			<label>아이디</label>
    			<input type="text" name="id" class="form-control mx-2"/>
    			<label>비밀번호</label>
    			<input type="password" name="pwd" class="form-control mx-2"/>
    			<input type="submit" class="btn btn-danger mx-2" value="로그인"/>
    		</form>
		</fieldset>
	 </div>

 

action 속성을 보면 ResponseForRedirectProcess.jsp 이동한다네! 오  그리고 post 방식으로 전달 할거래  그럼 파일을 동일하게 만들고 get방식으로 들어오는 놈들을 막아야 겠지 ? 이렇게 크게 그림을 먼저 그리고 접근해보자

2.로그인 로직 코딩

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!--파일명:ResponseForRedirectProcess.jsp
     여기선 로그인 처리하고 바로 다른페이지로 이동시킬거라 로직만 작성한다-->

<!-- get방식으로 들어오는 놈들을 막자--->
<%
	if(!"POST".equals(request.getMethod())){
%>
	<script>
    	alert('잘못된 접근입니다.');
        history.back();
    </script>
<%
  		return;
  }
    /*
		사용자가 입력한 아이디와 비번을 받아서 회원인지 판단한 후
		회원인 경우 마이페이지로 이동,
		회원이 아닌 경우 다시 로그인 페이지로 이동
        아이디가 KIM이고 비번이 1234가 회원이라고 가정
     */
  
    //1.사용자 입력 받기
    String id = request.getParameter("id");
	String pwd = request.getParameter("pwd");
    //2.회원 여부판단(데이터 베이스의 테이블에서 조회)
    //3.회원인경우 로그인처리(session 객체로) 후 마이페이지로 이동 아니면 로그인페이지
    
    if("KIM".equals(id) && "1234".equals(pwd)){  // 회원인 경우
       //방법1. 자동으로 이동할 주소 (이건 보안에 취약함)
       response.sendRedirect(request.getContextPath()+"/builtInObject03/ResponseForMyPage.jsp?username="+id+"&password="+pwd);
   	   
       //방법2. 자스로 메시지(선택사항) 띄운 후 이동 (이거도 보안에 취약)
       out.println("<script>");
       out.println("alert('"+id+"님 반갑습니다.');");
       out.println("location.replace('ResponseForMyPage.jsp?username="+id+"&password="+pwd"');");
       out.println("</script>");
       response.sendRedirect(request.getContextPath()+"/builtInObject03/ResponseForMyPage.jsp");
       
       //방법3. 자바스크립트 이용 POST방식으로 이동 즉 비번 URL에 노출막자
   }  
%>    
	    <form method="post" action="ResponseForMyPage.jsp">
		 	<input type="hiden" name="username" value="<%=id %>">
		 	<input type="hiden" name="password" value="<%=pwd %>">		 
		</form>
         <script>
		  	alert('<%=id%>님 반갑습니다.');
		  	document.forms[0].submit();
		 </script>  
<% 
  }
  else{ // 비회원
       //방법1.일때
       response.sendRedirect("ResponseForRedirectIndex.jsp");
       
       //방법2,3 공통
      out.println("<script>");
	  out.println("alert('아이디와 비번이 다릅니다.');");
      
         //여기서 기존값그대로 유지하려면
      out.println("history.back();");
        	//기존의 입력하거나 선택한 내용이 다 사라지는건
	  out.println("location.href='ResponseForRedirectIndex.jsp';");
       
      out.println("</script>");        
   }
%>

방법 1.2 에서 

url 경로에 ?username="+id+"&password="+pwd  추가한건 마이페이지에서 

사용자가 입력한 것을 뿌려주기위한 거임

근데이러면 너무 보안에 취약해짐 !!

방법3은 사용자가 입력한것도 뿌려줄 수 있고 hidden으로 숨기기 때문에 보안에도 취약하지 않음 !! 

 

3. 마지막 마이페이지도 간단간단.

사용자에게 받은 값을 request.getParameter() 로 받아서 뿌려주면 ok

    <div class="container">
        <div class="jumbotron bg-info">
           <h1>마이페이지</h1>
        </div>
		<fieldset class=" form-group border p-3">
			<legend class="w-auto px-3">나의정보</legend>
			<ul class="list-unstyled">
				<li>아이디 : <%= request.getParameter("username") %> </li>
				<li>비밀번호 : <%= request.getParameter("password") %> </li>			
			</ul>
		</fieldset>
	 </div>