2015-12-22 6 views
2

Я создал веб-сервиса с Apache Camel, используя компонент CXF, как показано ниже:Camel CXF - Безопасность (Authentication)

blueprint.xml:

<bean class="ngtrend.ws.Testws"/> 
    <!-- Defined the server endpoint to create the cxf-rs consumer --> 
    <cxf:rsServer id="rsServer" address="http://localhost:9050/route" 
    serviceClass="ngtrend.ws.Testws"  /> 
    <camelContext xmlns="http://camel.apache.org/schema/blueprint"> 
    <route id="timerToLog"> 
     <from uri="cxfrs://bean://rsServer"/> 
     <to uri="bean:ngtrend.ws.HelloBean?method=test(Exchange)"/> 
     <log message="${body}"/> 
    </route> 
    </camelContext> 

Testws.java:

public class Testws { 
    @GET 
    @Path("/test/{id}") 
    @Produces("application/xml") 
    //@Consumes("text/xml") 
    public Integer getAssets(@PathParam("id") int id){ 
     return null; 
    } 
} 

и Я бы хотел, чтобы он заставлял клиента отправлять (или вводить в диалоговом окне при использовании браузера) логин и пароль (BASIC Http authentication). Как я могу сделать эту конфигурацию?

ответ

0

В рамках CXF аутентификацию успокоительных услуг можно сделать, используя следующий подход:

<cxf:rsServer id="rsServer" 
       address="http://localhost:9050/route"> 

    <jaxrs:serviceBeans> 
       <ref bean="serviceBean"/> 
     </jaxrs:serviceBeans> 

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

</cxf:server> 


<bean id="serviceBean" class="ngtrend.ws.Testws"/> 

<bean id="authenticationHandler" class="yourpackage.Class" /> 

Создайте свой собственный обработчик для authenticationHandler, который будет осуществлять импорт org.apache.cxf.jaxrs.ext.RequestHandler. Используйте стратегию аутентификации, необходимую для этого класса, например, аутентифицируйте базу данных и т. Д. Это должно обеспечить базовую аутентификацию.

+0

не могли бы вы предоставить какой-нибудь белок или ссылку на код. –

0

Вы можете написать класс, который реализует ContainerRequestFilter. А затем установить его в CXF: поставщиков, как показано ниже:

<bean id="authenticationHandler" class="a class which implements ContainerRequestFilter" /> 
<cxf:rsServer id="xxxRsServer" 
    address="/xxxservice" serviceClass="xxx.XXXService" 
    loggingFeatureEnabled="true" loggingSizeLimit="20"> 
    <cxf:providers> 
     <ref component-id="authenticationHandler"/> 
    </cxf:providers> 
</cxf:rsServer> 

В этом случае, вы можете переопределить метод ниже

public void filter(ContainerRequestContext requestContext) 

Например, вы могли бы сделать простую аутентификацию, основанную на requestContext.getHeaderString ("UserPassInfo"). Если это удастся, ничего не делайте, иначе вызовите requestContext.abortWith (Response.status (401) .header («WWW-Authenticate», «Basic»). Build());