encodeURL()

코코·2020년 8월 8일
0

Servlet/JSP

목록 보기
11/20

쿠키를 사용하지 않겠다고 설정한 브라우저에서는 쿠키는 물론 세션도 사용할 수 없다.
이런 경우, encodeURL()로 직접 서버에서 브라우저로 응답을 보낸 후, URL Rewriting을 이용해 JSESSIONID를 서버로 전송하여 세션 기능을 사용할 수 있다.

package pro09.sec04;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/st5")
public class SessionTest5 extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		doHandle(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		doHandle(request, response);
	}

	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = response.getWriter();
		HttpSession session = request.getSession();
		String id = request.getParameter("id");
		String pw = request.getParameter("password");
		
		if(session.isNew()) { //새로 생성된 세션이면 true 아니면 false
			if(id != null) {
				//HttpSession객체에 id 바인딩
				session.setAttribute("id", id);
				//응답 시, 미리 JSESSIONID를 저장한다.
				String url = response.encodeURL("st5");
				//주어진 url로 이동할 때, jsessionid가 get방식으로 함께 날아간다.
				out.println("<a href='"+url +"'>로그인 상태 확인</a>");
			} else {
				out.print("<a href='/login.html'>다시 로그인 하세요</a>");
				session.invalidate(); //세션 삭제
			}
		} else {
			id = (String) session.getAttribute("id");
			if(id != null && id.length() != 0 ) {
				out.print("<h1>안녕하세요 "+id+"님!</h1>");
			} else {
				out.print("<a href='/login.html'>뭔가 잘못 됐겠죠.</a>");
			}
		}
	}
}

0개의 댓글