You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Cristiano Costantini <cr...@gmail.com> on 2015/04/16 10:13:38 UTC

Authentication in "pipes and filters" ???

Hello,

I was searching to implement a "Pipes and Filter" EIP that, as the picture
illustrated in http://camel.apache.org/pipes-and-filters.html, it has a
step that "Authenticates" the exchange.

I have not however figured out how to manage a failed authentication:
how do I best implement the rejection of the exchange to be further
processed by subsequents endpoints?

I'm confused as my exchange is an InOut, so I cannot simply abort the
processing, I need to send back some output (either an empty response or
error code) to the initial from endpoint...

Any suggestion?
thanks,
Cristiano

Re: Authentication in "pipes and filters" ???

Posted by Cristiano Costantini <cr...@gmail.com>.
Yeah! There is a drawback! :-(

Exchange.ROUTE_STOP stops completely the processing of the exchange, not
only the current route!

My routes are something like this:

<route id="httpRoute">
<from uri="jetty:http://0.0.0.0:8090/mobile" />
<to uri="direct:gsonDeserialization" />
</route>

<route id="serializationRoute">
<from uri="direct:gsonDeserialization" />
<process ref="gsonDeserializationProcessor" />
<to uri="direct:toMainService" />
<process ref="gsonSerializationProcessor" />
</route>

<route id="mainLogicRoute">
<from uri="direct:toMainService" />
<process ref="authenticatedChannelProcessor" />
<to uri="bean:mainService" />
</route>


I've implemented Exchange.ROUTE_STOP into the "authenticatedChannelProcessor",
which works in JUnit tests, but when I integrate it into this routes, it
does not only stops mainLogicRoute by skipping <to uri="bean:mainService"
/>, it also skips <process ref="gsonSerializationProcessor" /> in the
serializationRoute...

I'm thinking to change by setting a property on my own, and filter <to
uri="bean:mainService" /> if this property is not available...

Suggestions?

Bye!





Il giorno ven 17 apr 2015 alle ore 11:36 Cristiano Costantini <
cristiano.costantini@gmail.com> ha scritto:

> Hi Willem, hi all,
> thank you for your support,
>
> I wanted to avoid to throw an exception, because then I have to handle it
> in order to return proper payload (I want empty payload if the user is not
> authenticated) in the response.
>
> I've maybe found a different approach that I am now investigating:
> As I am processing the message in a custom Processor (who both performs
> authentication and checks authorization), I've discovered that I can stop
> the processing in the Processor by setting a property on the exchange:
>
> exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);
>
> So if the message is not authorized, I first set the body to my empty body
> (I set to a Collections.emptyList() ) and then stop it.
>
> The Junit tests now are working, I now integrate it to check if there are
> other issues.
>
> Feedback on the approach of using "Exchange.ROUTE_STOP" is welcome :-)
>
> Bye,
> Cristiano
>
>
>
> Il giorno gio 16 apr 2015 alle ore 17:19 Willem Jiang <
> willem.jiang@gmail.com> ha scritto:
>
>> I think you can just throw out the authentication failure exception and
>> you can use the error handler to setup some kind of reject exception for
>> the response to use.
>>
>> --
>> Willem Jiang
>>
>> Red Hat, Inc.
>> Web: http://www.redhat.com
>> Blog: http://willemjiang.blogspot.com (English)
>> http://jnn.iteye.com (Chinese)
>> Twitter: willemjiang
>> Weibo: 姜宁willem
>>
>>
>>
>> On April 16, 2015 at 4:15:38 PM, Cristiano Costantini (
>> cristiano.costantini@gmail.com) wrote:
>> > Hello,
>> >
>> > I was searching to implement a "Pipes and Filter" EIP that, as the
>> picture
>> > illustrated in http://camel.apache.org/pipes-and-filters.html, it has a
>> > step that "Authenticates" the exchange.
>> >
>> > I have not however figured out how to manage a failed authentication:
>> > how do I best implement the rejection of the exchange to be further
>> > processed by subsequents endpoints?
>> >
>> > I'm confused as my exchange is an InOut, so I cannot simply abort the
>> > processing, I need to send back some output (either an empty response or
>> > error code) to the initial from endpoint...
>> >
>> > Any suggestion?
>> > thanks,
>> > Cristiano
>> >
>>
>>

Re: Authentication in "pipes and filters" ???

Posted by Cristiano Costantini <cr...@gmail.com>.
Hi Willem, hi all,
thank you for your support,

I wanted to avoid to throw an exception, because then I have to handle it
in order to return proper payload (I want empty payload if the user is not
authenticated) in the response.

I've maybe found a different approach that I am now investigating:
As I am processing the message in a custom Processor (who both performs
authentication and checks authorization), I've discovered that I can stop
the processing in the Processor by setting a property on the exchange:

exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);

So if the message is not authorized, I first set the body to my empty body
(I set to a Collections.emptyList() ) and then stop it.

The Junit tests now are working, I now integrate it to check if there are
other issues.

Feedback on the approach of using "Exchange.ROUTE_STOP" is welcome :-)

Bye,
Cristiano



Il giorno gio 16 apr 2015 alle ore 17:19 Willem Jiang <
willem.jiang@gmail.com> ha scritto:

> I think you can just throw out the authentication failure exception and
> you can use the error handler to setup some kind of reject exception for
> the response to use.
>
> --
> Willem Jiang
>
> Red Hat, Inc.
> Web: http://www.redhat.com
> Blog: http://willemjiang.blogspot.com (English)
> http://jnn.iteye.com (Chinese)
> Twitter: willemjiang
> Weibo: 姜宁willem
>
>
>
> On April 16, 2015 at 4:15:38 PM, Cristiano Costantini (
> cristiano.costantini@gmail.com) wrote:
> > Hello,
> >
> > I was searching to implement a "Pipes and Filter" EIP that, as the
> picture
> > illustrated in http://camel.apache.org/pipes-and-filters.html, it has a
> > step that "Authenticates" the exchange.
> >
> > I have not however figured out how to manage a failed authentication:
> > how do I best implement the rejection of the exchange to be further
> > processed by subsequents endpoints?
> >
> > I'm confused as my exchange is an InOut, so I cannot simply abort the
> > processing, I need to send back some output (either an empty response or
> > error code) to the initial from endpoint...
> >
> > Any suggestion?
> > thanks,
> > Cristiano
> >
>
>

Re: Authentication in "pipes and filters" ???

Posted by Willem Jiang <wi...@gmail.com>.
I think you can just throw out the authentication failure exception and you can use the error handler to setup some kind of reject exception for the response to use.

--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.iteye.com (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem



On April 16, 2015 at 4:15:38 PM, Cristiano Costantini (cristiano.costantini@gmail.com) wrote:
> Hello,
>  
> I was searching to implement a "Pipes and Filter" EIP that, as the picture
> illustrated in http://camel.apache.org/pipes-and-filters.html, it has a
> step that "Authenticates" the exchange.
>  
> I have not however figured out how to manage a failed authentication:
> how do I best implement the rejection of the exchange to be further
> processed by subsequents endpoints?
>  
> I'm confused as my exchange is an InOut, so I cannot simply abort the
> processing, I need to send back some output (either an empty response or
> error code) to the initial from endpoint...
>  
> Any suggestion?
> thanks,
> Cristiano
>