2014년 4월 29일 화요일

[JSP/Servlet 강좌, URL Rewrite, URL다시쓰기, Java Servlet]Session, Cookie

[JSP/Servlet 강좌, URL Rewrite, URL다시쓰기, Java Servlet]Session, Cookie
 

사용자가 웹브라우저에 쿠키를 사용하지 못하게 했을때 쿠키를 이용한 세션트래킹은 불가능, 이때 URL Rewriting을 이용한다.
 
Explorer : 도구/인터넷옵셥 메뉴에서 개인정보 부분...."쿠키사용하지않음"으로 설정
Netscape : Edit/Preference메뉴에서 Acvanced에서 Cookie부분을 Disable cookies로 setting
 
<Form> Tag을 기술하는 부분에 인코딩된 SessionID를 포함하는 Action URL을 설정해야 한다. 이때 HttpServletResponse의 encodeURL함수를 사용한다.

Session ID의 노출이라는 보안상의 위험이 있다.

- public class HttpServletResponse.encodeUrl(String Url)
 
    지정된 URL이 세션ID를 포함하도록 암호화한후 새로운 URL을 Return,암호화가 필요없거나 지원안한다면 URL은 변경되지 않는다. 서블릿에서 만들어 지는 모든 URL은 이 메소드를 통해 수행되어야 한다.

    예)res.encodeUrl(req.getRequestURI())
 
- public class HttpServletResponse.encodeRedirectUrl(String Url)
 
    지정된 URL이 세션ID를 포함하도록 암호화한후 새로운 URL을 Return,암호화가 필요없거나 지원안한다면 URL은 변경되지 않는다.HttpServletResponse의 sendRedirect() 메소드로 Return되는 모든 URL은 이 메소드로 수행되어야 한다.

   res.sendRedirect(res.encodeRedirectUrl (“/servlet/URLRedirect”))
 

[URLRewriting.html]
 
<html>
<body>
<font size=+1 color=blue><b>Login to the Personal Information Server</b></font>
<hr>
<form method=post action=http://localhost/servlet/URLRewriting>
<table border=0>
<tr><td>Your ID   </td><td><input type=text name=USER></td></tr>
<tr><td>Password  </td><td><input type=password name=PASSWORD></td></tr>
<tr><td colospan=2><input type=submit value=Login></td></tr>
</table>
</form>
</body>
</html>

[URLRewriting.java]
 
//Other Page를 누를때 URL이 어떻게 넘어 가는지 Test하는 예제
//웹브라우저에 쿠키를 받게 Setting되어 있다면 Cookie를 통해서 Session ID등이
//전송되나 쿠키를 안받게 Setting되어 있다면 URL뒤에 sesison ID등이 붙어서 넘어가제 되어있다.
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class URLRewriting extends HttpServlet {

 public void doGet(HttpServletRequest req, HttpServletResponse res)
  throws ServletException,IOException {
  doPost(req,res);
 }
 public void doPost(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException { 
  res.setContentType("text/html; charset=euc-kr");
  PrintWriter out = res.getWriter(); 
  //세션을 생성, 없으면 새로만듬
  HttpSession sess = req.getSession();
  String user=req.getParameter("USER");
  String pWord=req.getParameter("PASSWORD");
 
  //세션에 데이터 Put
  sess.putValue(user,pWord);
  out.println("<body><head><title>URLRewriting Servlet</title></head><body>");
  out.println("<font size=+1 color=blue><b>URLRewriting Servlet</b></font>");
  out.println("<hr>");
                 out.println("Session ID : " + sess.getId()+"<br>");
  out.println("Creation Time : "+ new Date(sess.getCreationTime())+"<br>");
  out.println("Last Accessed Time : "+new Date(sess.getLastAccessedTime())+"<br>");  out.println("isRequestedSessionIdFromUrl : "+req.isRequestedSessionIdFromUrl()+"<br>”);  out.println("isRequestedSessionIdFromCookie : "+req.isRequestedSessionIdFromCookie()+"<br>");
  out.println("<hr><p>");
  out.println("<b>Login Information</b><br>");
  out.println("Your id : "+ user+"<br>");
  out.println("Your password : "+pWord+"<br>"); 
  out.println("<p><br>"); 
        //일반적인 URL 링크
  out.println("1. <a href=http://localhost/servlet/OtherPage>OtherPage(일반적인  URL링크)></a><br>");
                 //encodeURL() URL에 SesisonID를 덧붙여전송
  //(쿠키를 안받게 브라우저를 Setting시 URL뒤에 session id를 붙여넘김)
  out.println("2. <a href="+res.encodeURL("OtherPage")+">OtherPage(encodeUrl)</a><br>");
  //encodeRedirectURL() 괄호안에 sendRedirect(Url)이나 절대URL경로를 기술
  //(쿠키를 안받게 브라우저를 Setting시 URL뒤에 session id를 붙여넘김)
  out.println("3. <a href="+res.encodeRedirectUrl("http://localhost/servlet/OtherPage")+">Other Page(encodedRdirectUrl)</a><br>");
  //session.getId() method로 URL뒤에 임의로 Session ID를 붙임
  out.println("4. <a href=http://localhost/servlet/OtherPage;$sessionid$"+sess.getId()+">Other Page(일반적인 URL링크+session ID)</a><br>");
  out.println("</body></html>");
  out.close();
 }
};
 
[OtherPage.java]
 
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class OtherPage extends HttpServlet {

 public void doGet(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException {
  res.setContentType("text/html; charset=euc-kr");
  PrintWriter out = res.getWriter();
 
  //세션생성 있으면 그세션을 넘기고, 없으면 Null을 넘김
  HttpSession sess = req.getSession(false);
                  out.println("<html><head><title>OtherPage Servlet</title></head><body>");
  out.println("<font size=+1 color=blue><b>OtherPage Servlet</b></font><hr>");
                 if(sess==null) {
                   //세션이 성립되어 있지 않은 경우
   out.println("<font size=-1 color=blue>먼저 LogIn을 하세요(세션이 성립되어 있지 않습니다.)</font><br>");
  } else {
   out.println("Session ID : "+sess.getId()+"<br>");
   String key[]=sess.getValueNames();  
   out.println(key[0]+"!!! Welcome to my site.");
   out.println("<br>session # : "+key.length+"<br>");
  }  out.println("isRequestedSessionIdFromUrl : "+req.isRequestedSessionIdFromUrl()+"<br>");       out.println("isRequestedSessionIdFromCookie : "+req.isRequestedSessionIdFromCookie()+"<br>");
 }
};
 
 




[그림]URL Rewrite, URL다시쓰기 결과  


오라클자바커뮤니티에서 운영, 개발자 전문교육, 개인80%환급 오엔제이프로그래밍실무교육센터(www.onjprogramming.co.kr)

평일주간(9:30~18:20) 개강
(5/12)C#4.0,ADO.NET,Network 프로그래밍
(5/12)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(5/12)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(5/12)안드로이드개발자과정
(5/19)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(5/21)[교육전취업확정]Spring,MyBatis,XPlatform실무프로젝트과정
(5/26)[기업100%환급]SQL기초에서 Schema Object까지

평일야간(19:00~21:50) 개강
(5/07)Spring3.X, MyBatis, Hibernate실무과정
(5/09)웹퍼블리싱 마스터
(5/09)JAVA&WEB프레임워크실무과정
(5/09)SQL초보에서실전전문가까지
(5/16)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(5/16)C#,ASP.NET마스터
(5/19)안드로이드개발자과정
(5/20)개발자를위한PLSQL,SQL튜닝,힌트

주말(10:00~17:50) 개강
(5/03)안드로이드개발자과정
(5/03)C#,ASP.NET마스터
(5/03)JAVA&WEB프레임워크실무과정
(5/10)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(5/10)닷넷실무자를위한WPF개발자과정
(5/10)SQL초보에서실전전문가까지
(5/10)Spring3.X, MyBatis, Hibernate실무과정
(5/11)웹퍼블리싱 마스터
(5/17)개발자를위한PLSQL,SQL튜닝,힌트

주말저녁(18:30~22:20) 개강
(5/17)자바&웹,jQUERY,스프링프레임워크
(5/17)SQL기초에서 Schema Object까지

댓글 없음:

댓글 쓰기