2014-12-01 3 views
2

Я разрабатываю веб-приложение с двумя главными делениями, одно из которых - это калибровочная сторона приложения и сторона Restlet приложения, которые довольно развязаны. Хотя код находится в том же проекте, я хочу отделить его, поэтому часть Wicket вызывает службы REST, открытые бэкэндом Restlet.Доступ к сеансу пользователя из бэкэнд

Теперь проблема заключается в сеансе, в части Restlet есть компонент Shiro, который выполняет аутентификацию et. и др. при обращении к /login и правильному имени пользователя & предоставляется пара паролей.

Вопрос в том, что такое подход, который часть приложения Wicket будет знать о пользователе сеанса, который в настоящее время входит в систему в части Restlet с Shiro?

+1

Являетесь ли вы частью реселлера и калитки на одном и том же веб-сервере? Вы можете получить доступ к компонентам Servlet, вызвав: '((HttpServletRequest) RequestCycle.get(). GetRequest(). GetContainerRequest()). GetSession()' – Bravehorsie

+0

Да его на том же сервере. Тот же проект на самом деле, однако часть сервера Restest REST является зависимостью JAR (шаблон развязки, который я пытаюсь сделать) – xybrek

ответ

1

Если Restlet серверной части акции же веб-сессия при условии, контейнер с калиткой приложением, вы можете получить доступ к нему в калиткой с:

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

, который дает вам javax.servlet.http.HttpSession при условии by Servlet api. Ваша сессия Wicket, которая продолжается org.apache.wicket.protocol.http.WebSession хранится в этом сеансе под калитки: wicket.yourapp: ключ сеанса вместе с другими данными, установленными вами, или библиотеками, которые вы используете за пределами Wicket.

Я не знаю Restlet и как вы распространяете сеанс там, но я предполагаю, что вы будете нуждаться в зависимости от сервлета в вашей части Restlet/Shiro, которая хранит данные в сеансе.

Edit: Проверка Shiros интерфейс Session 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 Session, если добавить Shiro зависимости к калитке части ,

1

Вы создаете новый HttpServletRequest для своего внешнего сервера, поэтому он создаст сеанс между вашим интерфейсом и внутренним контентом и не будет использовать текущий сеанс между браузером пользователей и интерфейсом.

Только этот способ будет работать, если вы попытаетесь выполнить захват сеанса в своем приложении, чтобы получить сеанс пользователя в обоих компонентах.

Смежные вопросы