2013-10-22 37 views
2

是否可以在全局類的Play框架的doFilter方法中添加一個cookie?在Play Framework 2.x過濾器中添加一個cookie?

我已經試過:

override def doFilter(action: EssentialAction): EssentialAction = EssentialAction { request => 
    if (request.queryString.contains("q")) { 
    action.apply(request).map(_.withCookies(
     Cookie("q", request.queryString.get("q").get(0), 3600) 
    )) 
    } 
} 

但該cookie不會發送到瀏覽器。

回答

1

我使用Playframework 2.2,並使用了類似的事情:

import play.api.mvc._ 
import play.api._ 
import scala.concurrent.Future 
import scala.concurrent.ExecutionContext.Implicits.global 

object ResponseFilter extends Filter { 
    def apply(next: (RequestHeader) => Future[SimpleResult])(rh: RequestHeader) = { 
    next(rh).map(_.withHeaders("Access-Control-Allow-Origin" -> "*").as("application/json; charset=utf-8")) 
    } 
} 

而且我Global對象是這樣的:

import play.api._ 
import play.api.mvc._ 
import service.ResponseFilter 

object Global extends WithFilters(ResponseFilter) with GlobalSettings 

這工作對我很好。所以我想你可以用_.withCookies(...)部分代替_.withHeaders(...)部分,那也適合你。

請注意,在早期版本的playframework中,情況有所不同

相關問題