簡體   English   中英

Jersey 2.3設置ContainerRequestFilter的優先級

[英]Jersey 2.3 Setting Priority for ContainerRequestFilter

public class MyApplication extends ResourceConfig {

    public MyApplication() {
       /* // Register resources and providers using package-scanning.
        packages("com.keylesson.service");

        // Register my custom provider - not needed if it's in my.package.
        register(TestFilter.class);
        register(TestFilter2.class);*/
    }
}

取消注釋后的上面的代碼能夠執行兩個過濾器類,但順序是TestFilter2,然后是TestFilter。 這個Resourceconfig方法我不太喜歡,我想為Jersey2.3使用舊式web.xml。 過濾器的球衣1.x init-params在jersey2.3中不起作用。 任何人都可以幫助我使用jersey2.3的示例web.xml來保證過濾器的執行嗎? 還有序列testfilter然后testfilter2?

您可以為過濾器配置優先級。 幾個選項

選項1:

使用@Priority作為過濾器類,傳入一個值(例如@Priority(1) )。 數字越小,優先級越高(不需要web.xml或Application子類中的任何特殊內容)

@Priority(6000)
public class MyFilter1 ... {}

@Priority(6001)
public class MyFilter2 ... {}

優先事項

選項2:

編程配置成通過注射,能夠應用Configurable 就像是

@ApplicationPath("/")
public class MyApplication extends Application {
    public MyApplication(@Context Configurable configurable) {
        configurable.register(MyFilter1.class, 1000);
        configurable.register(MyFilter2.class, 1001);
    }
}

或者使用ResourceConfig簡單地調用register而不注入Configurable 請參閱API以了解重載register

public ResourceConfig register(Object component, int bindingPriority)

例如

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        ...
        register(TestFilter.class, 6000);
        register(TestFilter2.class, 6001);*/
    }
}

注意:

僅僅是一個FYI,有來自Priorites類的內置常量。

public final class Priorities {
    private Priorities() { }

    public static final int AUTHENTICATION = 1000;
    public static final int AUTHORIZATION = 2000;
    public static final int HEADER_DECORATOR = 3000;
    public static final int ENTITY_CODER = 4000;
    public static final int USER = 5000;
}

這些由框架的一些內置組件使用,因此您可能需要在為您的優先級賦予數字時考慮這些。 你可以使用這些

@Priority(Priorities.USER)
// or @Priority(Priorities.USER + 1)
public class MyFilter ... {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM