2016-09-04 1 views
2

ich mehrere Stunden bin versucht, den Mechanismus erklärt in Thema, um die Arbeit: Best practice for REST token-based authentication with JAX-RS and Jerseykann nicht um die Arbeit ContainerRequestFilter

Aber nach dem Debuggen scheint es, dass ich nicht in der ContainerRequestFilter bin zu stoppen ... Hier ist, was ich habe :

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

import javax.ws.rs.NameBinding; 

@NameBinding 
@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.TYPE, ElementType.METHOD}) 
public @interface Secured { } 

Mein AuthenticationFilter ist genau das gleiche wie das, was in dem Thema (Kopie Vergangenheit) erklärt

ich habe einen Endpunkt:

@Path("/") 
    @WebService(name="account", targetNamespace="") 
    public interface ProfileCXFService 
    { 
    @GET 
    @Secured 
    @Path("/displayProfile") 
    @Produces({MediaType.APPLICATION_JSON}) 
    @Consumes({MediaType.APPLICATION_JSON}) 
    public Response displayProfile(@QueryParam("token")String token, @QueryParam("profileID")String profileID); 
    } 

Und hier ist der Inhalt meiner web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
<display-name>CxfRestService</display-name> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/beans.xml</param-value> 
</context-param> 
<servlet> 
    <servlet-name>CXFServlet</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>CXFServlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

Hier wird die Anfrage ich mit Postbote sende (Für den Moment der Token im Inneren des Körpers, aber auch wenn ich Legen Sie es in den Authentication header param, es funktioniert nicht). Das Problem ist, dass der Code des Endpunkts direkt ausgeführt wird und der Filter nicht aufgerufen wird.

GET /BD-BD/rest/account/displayProfile?token=vfE1qPLiiyPx20ymp0C483VxcpCj07HKAB8cTmgXamp;profileID=35 HTTP/1.1 
Host: localhost:8080 
Content-Type: application/json 
Cache-Control: no-cache 
Postman-Token: 0908ac3d-17ab-55ef-337a-fabfe7fed387 

Ist eine Konfiguration erforderlich? Vielen Dank im Voraus :)

Antwort

1

Bei der Verwendung von Apache CXF müssen die Filter und Interzeptoren in der Konfigurationsdatei cxf.xml registriert werden. Diese Datei muss im Klassenpfad Ihrer Anwendung enthalten sein.

Hier ist ein Beispiel, extrahiert aus dem CXF documentation von dem, was Ihre CXF Konfigurationsdatei wie sein kann, wenn ein Filter registriert:

<beans> 
    <jaxrs:server id="customerService" address="/"> 

     <jaxrs:serviceBeans> 
      <bean class="org.CustomerService" /> 
     </jaxrs:serviceBeans> 

     <jaxrs:providers> 
      <ref bean="authorizationFilter" /> 
     </jaxrs:providers> 

     <bean id="authorizationFilter" class="com.bar.providers.AuthorizationFilter"> 
      <!-- authorization bean properties --> 
     </bean> 

    </jaxrs:server> 
</beans> 

Weitere Informationen erhalten Sie im CXF documentation about configuration.

+0

Vielen Dank !! Ich werde nachsehen ! – Geoffrey

+1

@Geoffrey Lass es mich wissen, wenn es funktioniert. –

+0

Morgen früh werde ich Sie wissen :) – Geoffrey