2014-12-01 2 views
2

두 개의 주요 부서로 구성된 웹 응용 프로그램을 개발 중입니다. 하나는 응용 프로그램의 Wicket 측면이고 다른 하나는 상당히 분리 된 응용 프로그램의 Restlet 측면입니다. 코드가 같은 프로젝트에 있지만, 나는 그것을 분리하려고하므로 Wicket 파트는 Restlet 백엔드에 의해 노출 된 REST 서비스를 호출한다.백엔드에서 사용자 세션에 액세스

이제는 문제가 세션에서 발생합니다. Restlet 부분에는 인증을 수행하는 Shiro 구성 요소가 있습니다. al. /login에 액세스 할 때 올바른 사용자 이름 & 암호 쌍이 제공됩니다.

질문은, 응용 프로그램의 개찰 부분이 현재 Shiro의 Restlet 부분에 로그인 한 세션 사용자에 대해 알 수있는 접근 방식은 무엇입니까?

+1

같은 웹 서버에 재치면과 개찰구가 있습니까? '((HttpServletRequest) RequestCycle.get(). getRequest(). getContainerRequest()). getSession()' – Bravehorsie

+0

예를 들어 같은 서버에서 Servlet 컴포넌트에 접근 할 수 있습니다. 동일한 프로젝트 실제로, 그러나 Restlet REST 서버 부분은 JAR 종속성 (내가하려고하는 디커플링 패턴)입니다. – xybrek

답변

1

당신의 개찰구의 응용 프로그램과 함께 컨테이너가 제공 한으로 Restlet 서버 부분을 공유 같은 웹 세션, 당신은 개찰에 액세스 할 수있는 경우 : 당신에게 제공 javax.servlet.http.HttpSession을 제공

((HttpServletRequest) RequestCycle.get().getRequest().getContainerRequest()).getSession() 

서블릿 API에 의해. org.apache.wicket.protocol.http.WebSession을 확장하는 귀하의 Wicket 세션은이 세션의 wicket : wicket.yourapp : session 키와 함께 귀하가 설정 한 다른 데이터 또는 Wicket 외부에서 사용하는 라이브러리와 함께 저장됩니다.

Restlet과 거기에서 세션을 전파하는 방법은 잘 모르겠지만 세션에 데이터를 저장하는 Restlet/Shiro 부분의 서블릿에 의존 할 필요가 있다고 가정합니다.

편집 : 확인 Shiros 세션 인터페이스의 javadoc : //A Session is intended to be managed by the business tier and accessible via other tiers without being tied to any given client technology. This is a great benefit to Java systems, since until now, the only viable session mechanisms were the javax.servlet.http.HttpSession or Stateful Session EJB's, which many times unnecessarily coupled applications to web or ejb technologies

이 작동하지 않습니다 위의 제안을 고려

, 그러나 당신이 할 수 있어야 소리 당신이 당신의 개찰구 부분에 시로 종속성을 추가하면 쉽게 Shiros 세션 개체에 액세스하는 .

1

Restlet 백엔드에 대한 새로운 HttpServletRequest를 작성하여 프런트 엔드와 백엔드간에 세션을 만들고 사용자 브라우저와 프런트 엔드간에 현재 세션을 사용하지 않도록합니다.

응용 프로그램에서 세션 하이재킹을 수행하여 두 구성 요소 모두에서 사용자 세션을 가져올 수있는 경우에만 작동합니다.

관련 문제