[JAVA,JSP,URL Rewrite, URL다시쓰기, Java Servlet, JSP강좌]
사용자가 웹브라우저에 쿠키를 사용하지 못하게 했을때 쿠키를 이용한 세션트래킹은 불가능, 이때 URL Rewriting을
이용한다.
Explorer : 도구/인터넷옵셥 메뉴에서 개인정보 부분...."쿠키사용하지않음"으로 설정
Netscape : Edit/Preference메뉴에서 Acvanced에서 Cookie부분을 Disable cookies로 setting
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>
<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등이 붙어서 넘어가제 되어있다.
//웹브라우저에 쿠키를 받게 Setting되어 있다면 Cookie를 통해서 Session ID등이
//전송되나 쿠키를 안받게 Setting되어 있다면 URL뒤에 sesison ID등이 붙어서 넘어가제 되어있다.
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
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 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);
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();
}
};
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.*;
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>");
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>");
}
};
//세션이 성립되어 있지 않은 경우
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>");
}
};
[개강임박강좌, 오프라인교육장에 오시면 보다 자세히 배울 수 있습니다.]
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[11/13]SQL초보에서실전전문가까지
[11/13]안드로이드개발자과정
[11/18]Spring3.X, MyBatis, Hibernate실무과정
[11/18]iPhone 하이브리드 앱 개발 실무과정
[평일야간]
[11/08]C#,ASP.NET마스터
[11/08]Spring3.X, MyBatis, Hibernate실무과정
[11/12]iPhone 하이브리드 앱 개발 실무과정
[11/14]JAVA&WEB프레임워크실무과정
[주말]
[11/09]C#,ASP.NET마스터
[11/09]JAVA&WEB프레임워크실무과정
[11/09]Spring3.X, MyBatis, Hibernate실무과정
[11/09]웹퍼블리싱 마스터
[11/16]PL/SQL,오라클힌트,SQL튜닝,사례연구
[11/16]ASP.NET4.0 MVC 프로그래밍
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[11/13]SQL초보에서실전전문가까지
[11/13]안드로이드개발자과정
[11/18]Spring3.X, MyBatis, Hibernate실무과정
[11/18]iPhone 하이브리드 앱 개발 실무과정
[평일야간]
[11/08]C#,ASP.NET마스터
[11/08]Spring3.X, MyBatis, Hibernate실무과정
[11/12]iPhone 하이브리드 앱 개발 실무과정
[11/14]JAVA&WEB프레임워크실무과정
[주말]
[11/09]C#,ASP.NET마스터
[11/09]JAVA&WEB프레임워크실무과정
[11/09]Spring3.X, MyBatis, Hibernate실무과정
[11/09]웹퍼블리싱 마스터
[11/16]PL/SQL,오라클힌트,SQL튜닝,사례연구
[11/16]ASP.NET4.0 MVC 프로그래밍
댓글 없음:
댓글 쓰기