Установка cookie в LiftFilter - PullRequest
       19

Установка cookie в LiftFilter

0 голосов
/ 29 декабря 2010

Как мне установить cookie в методе LiftFilter.doFilter?

Я попытался установить cookie следующим образом (удалил некоторый код):

class AuthenticationFilter extends LiftFilter {

  override def  doFilter(request: ServletRequest, response: ServletResponse , chain: FilterChain) {

      val cookie = new HTTPCookie("SomeCookie", Full("" + System.nanoTime), Empty,
        Full("/authentication"), Full(60 * 60 * 24 * 14), Empty, Empty)
      cookie.setPath("/somePath")
      S.addCookie(cookie)

      val httpResp = response.asInstanceOf[HttpServletResponse]
      httpResp.sendRedirect("/some/page.html")

  }
}

Однако, когда я проверяю cookie браузера, не устанавливается cookie (кроме JSESSIONID), и я знаю, что метод doFilter выполняется из-за регистрации сообщений и того факта, что браузер перенаправлен в /some/page.html. .

Я использую Scala 2.8, Lift 2.1-SNAPSHOT, и приложение работает под управлением GAE (1.3.6, до сих пор тестировалось только на dev_appserver).

Есть идеи? Спасибо,

Геро

1 Ответ

1 голос
/ 30 декабря 2010

Я отправил тот же вопрос в список обсуждений Lift , и Дэвид Поллак указал мне правильное направление.

Что я на самом деле хотел достичь, так это иметь возможность использовать значение cookie (если оно есть) для получения некоторой информации о пользователе.Нет необходимости устанавливать cookie для этого в фильтре, но использование самого LiftFilter было уместным, как указал Дэвид.Вы не должны создавать подкласс LiftFilter, но вместо этого сделайте следующее в вашем Boot.scala:

LiftRules.statelessDispatchTable.prepend {
  case req if !checkReqForCookies(req) => () =>
    Full(RedirectResponse(whereTo, cookie1, cookie2))
}

def checkReqForCookies(in: Req): Boolean {
   ... do your checks ...
}

Работает для меня как обаяние:

...