11/22 48-3 [JSP] ResponseForRedirect(리다이렉트로 로그인처리)
리다이렉트방식으로 로그인 하는 법을 배움
*** 페이지이동 방식은 총 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>