如何在PlayFramework中配置多个过滤器?
PlayFramework 配置多个过滤器的两种方法
当然可以配置多个过滤器,下面给你两种常用的实现方式:
方式一:直接在配置文件中指定多个过滤器
你可以把 play.http.filters 改成列表形式,把多个过滤器的全类名依次写进去,执行顺序就是列表里的顺序(请求进来按正序执行,响应返回按逆序执行):
play.http.filters = [ "filters.FirstFilter", "filters.SecondFilter" ]
方式二:自定义 HttpFilters 类组合多个过滤器
如果需要更灵活的逻辑(比如动态控制过滤器是否生效),可以修改你现有的 filters.HttpFilters 类,注入多个过滤器并在 filters() 方法中返回它们的数组:
package filters; import play.mvc.EssentialFilter; import play.http.HttpFilters; import javax.inject.Inject; public class HttpFilters implements HttpFilters { private final FirstFilter firstFilter; private final SecondFilter secondFilter; @Inject public HttpFilters(FirstFilter firstFilter, SecondFilter secondFilter) { this.firstFilter = firstFilter; this.secondFilter = secondFilter; } @Override public EssentialFilter[] filters() { // 这里的顺序就是过滤器执行的顺序 return new EssentialFilter[] { firstFilter, secondFilter }; } }
配置文件保持原来的设置即可:
play.http.filters = "filters.HttpFilters"
注意事项
- 所有过滤器都必须是
EssentialFilter接口的实现类 - 过滤器的顺序很重要:请求到达时会按列表/数组的正序执行,响应返回时会按逆序执行
内容的提问来源于stack exchange,提问作者Alter
相关产品推荐
相关产品推荐

