如何在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
答案 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 ...
}
对我来说就像一个魅力: - )