[JSP/Servlet 강좌, URL Rewrite, URL다시쓰기, Java Servlet]Session,
Cookie
사용자가 웹브라우저에 쿠키를 사용하지 못하게 했을때 쿠키를 이용한 세션트래킹은 불가능, 이때 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>");
}
};
[그림]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까지
평일주간(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까지
댓글 없음:
댓글 쓰기