http 400,403 에러를 발생시키게 하는 소스

안녕하세요

이번 시간에는 <form> 태그 안에 있는 아이디, 비밀번호 값을

서버에 전송을 하면 서버가 특정한 아이디가 오면 response 하는 소스 코드를

올려봅니다.

때에 따라 유용한 소스가 될 수 있으니 한번 봐주세요~!

자 그럼 렛츠고!!



==========================================================


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
    <style>
    <!--
    div{
    margin:10px;
    }
    -->
    </style>

    <h1>response에 대해 알아보자.</h1>
    <h2>테스트 방법 : 아이디 입력 박스에 killer, forward, redirect 값을 입력하여 테스트 해보세요.</h2>
    <form action="ex11Response.jsp" method="POST">
    <div>
    <label for="uid">아 이 디</label>
    <input type="text" name="userId" id="uid">
    </div>
<div>
<label for="upwd">비밀번호</label>
<input type="password" name="pwd" id="upwd">
</div>
<div>
<button>로그인</button>


</div>
   
    </form>


==========================================================

위 소스는 그냥 단순한 폼 소스입니다.

저기서 중요한건 <form action="ex11Response.jsp" method="POST"> 으로

로그인 버튼을 누르면 데이터가 ex11Response.jsp로 POST 방식으로 넘겨줍니다.

진짜 중요한건 데이터를 처리하는 서버 소스입니다.



==========================================================

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
    <%
    //1. 아이디, 비번값 받아 출력하기 (서블릿,jsp에 쓰는 것은 name, id는 자바스크립트)
    String userId=request.getParameter("userId");
    String pwd=request.getParameter("pwd");
    out.println(userId+"/"+pwd);
   
    //2. 아이디, 비번이 null이면 ex11Form.jsp 페이지로 redirect 시키기
    //폼을 통해서 바로 들어가는 경우..
   
    if(userId==null||pwd==null){
    //페이지 이동 - ex11Form.jsp에 대한 요청을 새롭게 보낸다
    //페이지가 이동된 이후에도 로직을 수행하므로 return문을 기술하자
    response.sendRedirect("ex11Form.jsp");
    return;
    }
    System.out.println("여기도 들어오나요???");
   
    //3. 빈 문자열 체크
    if(userId.trim().isEmpty() || "".equals(pwd.trim())){
    //잘못된 요청이라는 에러 응답 처리 -- 400 Error
    response.sendError(HttpServletResponse.SC_BAD_REQUEST);
    return;
    }
   
    //4. 아이디가 killer라면 들어오면 안됨
    if(userId.equalsIgnoreCase("killer")){
    //접근 금지 에러 - 403 Error
    response.sendError(HttpServletResponse.SC_FORBIDDEN);
    return;
    }
   
    //5. 아이디가 redirect
    if(userId.trim().equals("redirect")){
    //request에 저장 => setAttribute(key,val)
    request.setAttribute("msg", userId+"님 환영합니다.");
    response.sendRedirect("Welcome.jsp");
    return;
    }
   
    //6. 아이디가 forward 일 경우
    if(userId.trim().equals("forward")){
    request.setAttribute("msg", userId+"님 환영합니다.");
    %>
    <jsp:forward page="Welcome.jsp"/>
   
    <%
    return;
    }
   
    %>

    <h1 style="color:blue"><%=userId%>님 환영합니다</h1>
   
    <h1>페이지 이동 방식</h1>
    <h2>1) redirect 이동 방식</h2>
    <ol>
    <li>새롭게 요청(request)을 보내 페이지를 보여준다.</li>
    <li>새로운 요청을 보내기 때문에 url이 새로운 url로 바뀐다.</li>
    <li>이동시킨 페이지와 이동된 페이지를 서로 다른 request에 지정한 값을 기억하지 못한다.</li>
    </ol>
    <h2>2) forward 이동 방식</h2>
    <ol>
    <li>서버 내부에서 페이지 이동이 일어난다</li>
    <li>서버 내부에서 이동하므로 요청 url은 이전 url을 유지한다.</li>
    <li>이동시킨 페이지와 이동된 페이지가 같은 request를 공유한다.</li>
    </ol>
   


==========================================================

자 그럼 위의 소스를 실행하면 어떤 결과가 나올까요?

잘 봐주세요~!!



일단 아이디, 패스워드에 빈 공백이 있는 문자열을 넣고 전송하면

HTTP 400 에러가 발생합니다.





이번에는 아이디를 killer로 주고 데이터를 전송하면 Http 403 에러가 발생합니다.



이번에는 아이디를 redirect 로 하면 'Welcome.jsp' 라는 곳으로 url이 바뀝니다

하지만 아이디를 forward로 하면..




ex11Response.jsp 로 그대로 됩니다.


댓글 없음:

댓글 쓰기