2016-07-31 5 views
2

Im работы на: Best practice for REST token-based authentication with JAX-RS and JerseyJAX RS, мой фильтр не работает

Но мой фильтр не сработал, мой вызов перейти непосредственно к конечной точке ...

Мой безопасный интерфейс:

@Qualifier 
    @Retention(RUNTIME) 
    @Target({METHOD, FIELD, PARAMETER, TYPE}) 
    public @interface Secure { 
    } 

Мой фильтр:

@Secure 
    @Provider 
    @Priority(Priorities.AUTHENTICATION) 
    public class AuthenticationFilter implements ContainerRequestFilter { 

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

    // Get the HTTP Authorization header from the request 
    String authorizationHeader = 
     requestContext.getHeaderString(HttpHeaders.AUTHORIZATION); 

    // Check if the HTTP Authorization header is present and formatted correctly 
    if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) { 
     throw new NotAuthorizedException("Authorization header must be provided"); 
    } 

    // Extract the token from the HTTP Authorization header 
    String token = authorizationHeader.substring("Bearer".length()).trim(); 

    try { 

     Token tk = new Token(); 
     tk.validarToken(token); 

    } catch (Exception e) { 
     requestContext.abortWith(
      Response.status(Response.Status.UNAUTHORIZED).build()); 
    } 
} 

Моя конечная точка:

 package api; 

     import filters.Secure; 
     import javax.ws.rs.Consumes; 
     import javax.ws.rs.GET; 
     import javax.ws.rs.Path; 
     import javax.ws.rs.Produces; 
     import javax.ws.rs.core.Response; 

     @Path("service") 
     public class Service { 

     @GET 
     @Secure 
     @Path("/sapo") 
     @Produces("application/json") 
     @Consumes("application/json") 
     public Response mySecuredMethod() {  
     return Response.ok("sapo").build(); 
     } 
     } 

И мой web.xml (Его ок ??):

   <servlet> 
       <servlet-name>jersey-serlvet</servlet-name> 
       <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
       <init-param> 
       <param-name>jersey.config.server.provider.packages</param-name> 
       <param-value>api</param-value> 
       </init-param> 
      <init-param> 
      <param-name>import javax.ws.rs.container.ContainerRequestFilter</param-name> 
      <param-value>filters.AuthenticationFilter;api.Service</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
     </servlet> 
     <servlet-mapping> 
     <servlet-name>jersey-serlvet</servlet-name> 
     <url-pattern>/api/*</url-pattern>   
     </servlet-mapping> 

Я прочитал много вопросов, связанных в стеке, но не может найти ошибку.

У кого-нибудь есть идея?

Заранее спасибо.

ответ

-1

Заменить @Qualifier с @NameBinding

+0

это не дает ответа на этот вопрос. Когда у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (http://meta.stackexchange.com/questions/214173/why-do-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/13836730) – tarzanbappa

+0

Это ответ! – echoalpha

+0

Может быть. Если так, вы должны уточнить свой ответ. В противном случае опубликуйте его как комментарий. Поскольку переполнение стека имеет некоторые стандарты. – tarzanbappa