2014-03-25 2 views
3

일부 내용을 확인하는 ContainerRequestFilter을 구현하려고합니다. 궁극적으로는 SSL 클라이언트 인증서에서 공통 이름을 추출하지만, 아직 거기에 없습니다. 이 필터는 Grizzly HTTP Server (Grizzly 2.3.8, 서블릿 컨테이너 없음)에서 실행되며 JAX-RS 리소스 (Jersey 2.6) 앞에 위치합니다.Grizzly/Jersey : ContainerRequestFilter에 삽입 된 요청이 null입니다.

org.glassfish.grizzly.http.server.Request을 필터에 삽입하려고하면 null입니다.

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

저지의 버그라고 생각합니다. 방금 ​​문제 제기 https://java.net/jira/browse/JERSEY-2462

+0

감사합니다. 티켓에서 관련된 (그러나 고정 된) 문제 인 https://java.net/jira/browse/JERSEY-1960을 참조하고 있습니다. 내 코드를 서블릿 컨테이너로 전환하면 작동하는지 확인할 수 있습니다. 나는 그 수정을 기다렸다가 그때 다시 바꿀 것이다. – Hank