2011-08-13 3 views
1

서블릿에 세션 데이터에 변수를 저장하려고합니다. 서블릿은 사용자를 타사 사이트로 리디렉션하고 타사 사이트 사용자는 동일한 웹 응용 프로그램의 JSP 페이지로 전송합니다. JSP에서 타사 사이트로 리디렉션하기 전에 서블릿에 저장된 세션 변수에 액세스하려고합니다. 그런 객체를 서블릿에 어떻게 저장합니까? 그리고 JSP 파일에서 해당 오브젝트에 어떻게 액세스합니까?타사 사이트의 콜백 요청시 나중에 액세스해야하는 값을 세션에 저장하려면 어떻게해야합니까?

답변

0

콜백 요청이 서버에 어떤 식 으로든 세션을 초기 요청으로 사용하도록 지시해야합니다. 일반적으로이 작업은 요청 헤더에 세션 쿠키를 설정하여 수행됩니다. 그러나 제 3 자 사이트는 그렇게하지 않을 것입니다. 그러나 Servlet API는 URL에 JSESSIONID 조각으로 세션을 식별 할 수있는 가능성을 제공합니다.

그래서 다음과 같이 당신이 당신의 콜백 URL을 생성하는 경우,

HttpSession session = request.getSession(); 
session.setAttribute("someName", someObject); 

String callbackURL = "http://yourhost.com/callback.jsp;JSESSIONID=" + session.getId(); 
String redirectURL = "http://otherhost.com/process?callbackURL=" + URLEncoder.encode(callbackURL, "UTF-8"); 

response.sendRedirect(redirectURL); 

callback.jsp 따라서 모든 저장된 속성을 동일한 세션에 액세스 할 것이다 이런 식으로. 그런데 doGet()이있는 서블릿을 사용해야하며 사전 처리 Java 코드는 JSP에 속하지 않습니다. 외에도 구체적인 질문에서


이 달성하는 또 다른 방법이있다 : 긴, 자동 생성 및 고유 키에 의해 응용 프로그램 범위에 대한 관심의 정보를 저장 (예 : java.util.UUID)과에 요청 매개 변수로 추가 콜백 URL 콜백을 처리하려면 세션 범위 대신 응용 프로그램 범위에서 가져옵니다. 이것은 일반적으로 부모 창을 새로 고치고 자바 스크립트로 콜백을 성공적으로 처리 한 후에 닫히는 팝업 창 내부에서 수행됩니다. 이렇게하면 세션에 대해 걱정할 필요가 없습니다.

+0

타사 URL은 기본적으로 핫메일이나 야후 또는 Gmail을 통해 사용자를 인증하는 것입니다 ... 사이트 (예 : 핫메일)에서 인증이 성공하면 사용자는 동일한 웹 앱 내의 다른 URL로 반환됩니다. 세션 ID를 매개 변수로 다시 전화 URL에 API를 생성하기 때문에 (핫메일 인증을 사용하여) 거기에 하나의 고정 된 URL을 입력하는 조항이 있기 때문에 ... 내가 이런 시나리오에서해야 할 조언을하시기 바랍니다 ... 흐름은 웹 응용 프로그램 서블릿 -> hotmail 인증 -> 웹 응용 프로그램 jsp (또는 최대 서블릿입니다) – Arvind

관련 문제