2010-12-29 2 views
0

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

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

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") 

    } 
} 

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

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

Любые идеи? Спасибо,

Геро

+0

уже решил ее взять другой подход, в котором я не делаю необходимо установить cookie в фильтр. У вас была проблема, хотя прочитать файл cookie в фильтре с помощью метода S.cookieValue. Поэтому вместо этого я использовал request.asInstanceOf [HttpServletRequest] .getCookies, а затем выбрал правильный файл cookie. Это сработало ... может быть, может быть улучшено. – Gero

+0

Я думаю, что ваш разговор с Дэвидом Поллаком дает интересную информацию: http://groups.google.com/group/liftweb/browse_thread/thread/bce3211dc6a39349/af463c988448e592?show_docid=af463c988448e592&pli=1 – thoredge

ответ

1

Я отправил same question to the Lift discussion list и Дэвид Поллак указал мне в правильном направлении.

То, что я на самом деле хотел достичь, заключалось в том, чтобы иметь возможность использовать значение 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 ... 
} 

работает как шарм для меня :-)

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

  • Нет связанных вопросов^_^