为Play编写自定义过滤器! 2.2用Java [英] Writing custom filters for Play! 2.2 in Java

查看:92
本文介绍了为Play编写自定义过滤器! 2.2用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆