在LuftFilter中设置cookie

时间:2010-12-29 08:11:59

标签: google-app-engine scala lift

如何在LiftFilter.doFilter方法中设置cookie?

我尝试按如下方式设置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,提升2.1-SNAPSHOT并且运行的应用程序是GAE(1.3.6,目前仅在dev_appserver上测试过)。

有什么想法吗?谢谢,

Gero

1 个答案:

答案 0 :(得分:1)

我发布了same question to the Lift discussion list,David Pollak指出了我正确的方向。

我真正想要实现的是能够使用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 ...
}

对我来说就像一个魅力: - )