如何在playframework中应用全局过滤器

Lio*_*ion 10 filter playframework

使用@before时,它仅用于一个类.如何在playframework中应用全局过滤器?因此,一个过滤器用于所有控制器类.

Cod*_*nci 6

一个简单的解决方案是为所有控制器扩展一个基本控制器,并在基本控制器中使用@Before.

另一种选择(更好的解决方案,因为它更灵活)是使用@With注释.播放文档中的示例是

例:

public class Secure extends Controller {

    @Before
    static void checkAuthenticated() {
        if(!session.containsKey("user")) {
            unAuthorized();
        }
    }
}    
Run Code Online (Sandbox Code Playgroud)

在另一个控制器上:

@With(Secure.class)
public class Admin extends Application {

    ...

}
Run Code Online (Sandbox Code Playgroud)

这意味着Admin控制器将处理Secure控制器中包含的所有拦截器(@ Before,@ After,@Finally).

  • 不幸的是,这仍然需要您向所有控制器添加`@ With`注释.特别是在Secure插件的情况下,最好能够默认使所有控制器安全,然后将那些应该公开访问的控制器列入白名单.虽然我还没想出怎么做. (2认同)