2016-07-31 3 views
2

Im Arbeit an: Best practice for REST token-based authentication with JAX-RS and JerseyJAX RS, mein Filter funktioniert nicht

Aber meine Filter nicht ausgelöst, mein Anruf direkt an den Endpunkt passieren ...

Meine sichere Schnittstelle:

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

Mein Filter:

@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()); 
    } 
} 

Mein Endpunkt:

 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(); 
     } 
     } 

Und meine web.xml (Its ok ??):

   <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> 

las ich eine Menge Frage in Stapel verwendet, aber nicht den Fehler finden.

Wer hat eine Idee?

Vielen Dank im Voraus.

Antwort

-1

@Qualifier Ersetzen mit @NameBinding

+0

ist dies eine Antwort auf die Frage nicht geben. Sobald Sie genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment); stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (http://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/13836730) – tarzanbappa

+0

das ist die Antwort! – echoalpha

+0

Mai sein. Wenn ja, müssen Sie Ihre Antwort ausarbeiten. Ansonsten poste es als Kommentar. Da der Stack-Überlauf einige Standards hat. – tarzanbappa