为Play编写自定义过滤器! 2.2用Java [英] Writing custom filters for Play! 2.2 in Java
问题描述
我有一个简单的场景:自动为每个HTTP响应添加一个响应头;我希望用Java做到这一点。
I have a simple scenario: automatically add a response header to every HTTP response; and I want to do this in Java.
查看 src / play-filters-helpers / src / main / java / play / filters / *
,有操作的示例,可以作为注释应用。我想避免将 @AddMyHeader
添加到每个处理程序。
Looking at src/play-filters-helpers/src/main/java/play/filters/*
, there are examples of Actions which can be applied as annotations. I'd like to avoid adding @AddMyHeader
to every handler.
查看 Scala过滤器在 src / play-filters-helpers / src / main / scala / play / filters / *
和 GzipFilter
具体来说,我看到了一个明确的机制,但我对Scala不太熟悉,无法推断Java。
Looking at the Scala Filters in src/play-filters-helpers/src/main/scala/play/filters/*
and GzipFilter
specifically, I see a clear mechanism, but I'm not familiar enough with Scala to extrapolate to Java.
所以:我从哪里开始?
推荐答案
不幸的是没有好处从Java创建和使用过滤器的方法。但是你可以使用Scala轻松地完成你需要的工作。
Unfortunately there isn't a good way to create and use Filters from Java yet. But you can do what you need pretty easily with Scala.
创建一个新文件 app / filters / AddResponseHeader.scala
包含:
package filters
import play.api.mvc._
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
object AddResponseHeader extends Filter {
def apply(f: (RequestHeader) => Future[SimpleResult])(rh: RequestHeader): Future[SimpleResult] = {
val result = f(rh)
result.map(_.withHeaders("FOO" -> "bar"))
}
}
并创建一个新文件 app / Global.scala
包含:
And create a new file app/Global.scala
containing:
import filters.AddResponseHeader
import play.api.mvc.WithFilters
object Global extends WithFilters(AddResponseHeader)
这应该适用于每个回复的新回复标题。
That should apply a new response header to every response.
更新:有一种方法可以在 Global.java
文件中使用它:
UPDATE: There is a way to use this in a Global.java
file:
@Override
public <T extends EssentialFilter> Class<T>[] filters() {
return new Class[] {AddResponseHeader.class};
}
还可以更改对象AddResponseHeader
以上类AddResponseHeader
。
这篇关于为Play编写自定义过滤器! 2.2用Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!