Writing custom filters for Play! 2.2 in Java

后端 未结 3 823
别那么骄傲
别那么骄傲 2020-12-09 05:06

I have a simple scenario: automatically add a response header to every HTTP response; and I want to do this in Java.

Looking at src/play-filters-helpers/src/ma

3条回答
  •  南方客
    南方客 (楼主)
    2020-12-09 05:40

    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.

    Create a new file app/filters/AddResponseHeader.scala containing:

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

    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.

    UPDATE: There is a way to use this in a Global.java file:

    @Override
    public  Class[] filters() {
        return new Class[] {AddResponseHeader.class};
    }
    

    And also change the object AddResponseHeader above to class AddResponseHeader.

提交回复
热议问题