2014-03-25 68 views
3

我試圖執行ContainerRequestFilter來檢查一些內容。最終,它將從SSL客戶端證書中提取通用名稱,但我還沒有。過濾器運行在Grizzly HTTP Server(Grizzly 2.3.8,沒有servlet容器)上,並位於JAX-RS資源(Jersey 2.6)的前面。Grizzly/Jersey:向ContainerRequestFilter注入的請求爲空

當我試圖將org.glassfish.grizzly.http.server.Request注入過濾器時,它爲空。

import org.glassfish.grizzly.http.server.Request; 

@Provider 
@Priority(Priorities.AUTHENTICATION) // somewhat early 
@SkpSecureClient // name the filter with my own annotation 
public class SecureClientFilter implements ContainerRequestFilter { 

    private final Logger log = LoggerFactory.getLogger(this.getClass()); 

    @Context 
    Request request; 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 

    if (request == null) { 
     log.debug("Unable to inject 'request'"); 
     // I always end up here 
    } else if (request.isSecure()) { 
     log.warn("Request is not secure!"); 
     // do something, e.g. abort request 
    } else { 
     log.debug("Request is secure!"); 
    } 
    } 
} 

將請求注入JAX-RS資源,注入成功,我可以使用它。

我在做什麼錯?

回答

1

我認爲這是澤西島的一個bug。 剛剛提交了問題 https://java.net/jira/browse/JERSEY-2462

+0

謝謝。在票證中,您指的是相關(但是是固定的)問題https://java.net/jira/browse/JERSEY-1960。我可以確認將我的代碼切換到一個servlet容器的工作。我會等待修復,然後切換回來。 – Hank