Monday, June 16, 2008

Integrating Spring Security with JSF/Facelets using acegi-jsf

Abstract

Spring Security is the security framework which is a part of Spring framework technology stack. It is a mature, powerful and flexible security solution for enterprise applications. Earlier, it was widely known as Acegi Security and now it is called Spring Security. Recently I have been working on a product of mine and I currently use JSF/Facelets and Spring Webflow /Spring Security and JPA technologies to build the product. Spring webflow out of the box integrates with Spring Security and provides access to implicit expression language ( EL) variable called currentUser to get access to the authenticated principal name. I wanted more than this in other pages that are not part of Spring webflow related.

Authentication Tag Libraries

Spring Security out of the box provides the following tag support to get the authenticated principal in JSP fragments.


<security:authentication property="principal.username"/>

However, Spring Security does not provide any support of using similar tags in JSF/Facelets view technology. I did some research and found the following weblog

My big thanks to Çağatay Çivici who showed us a way to use "acegijsf" tag in JSF/Facelets. However, the website need some more fine grained details as to how to wire everything together to make use of his library. So it is my humble attempt at explaining as to how to use his library in a less invasive way. I hope this will help any novice JSF/Facelets developer to make use of tag support in JSF/Facelets view technology.

Detailed Steps

NOTE: The above said jar is customized to use Spring Security 2.0.2 instead of Acegi Security. I also added acegijsf.taglib.xml inside META-INF folder of the jar. The one you download from Sourceforge.net does not have any of these customizations.

  • Place the above said jar in WEB-INF/lib of your JSF/Facelets web application.
  • Please add the following xml fragments into your faces-config.xml located under WEB-INF of your web application.

<component>
<component-type>net.sf.jsfcomp.acegijsf.Authorize</component-type>
<component-class>net.sf.jsfcomp.acegijsf.Authorize</component-class>
</component>
<component>
<component-type>net.sf.jsfcomp.acegijsf.Authentication</component-type>
<component-class>net.sf.jsfcomp.acegijsf.Authentication</component-class>
</component>
Now, you have to add the following namespace to your facelet .XHTML
  • e.g. xmlns:acegijsf="http://sourceforge.net/projects/jsf-comp/acegijsf"
  • Thats it. Now you can utilize the following tags inside your XHTML.
 <acegijsf:authorize ifAllGranted="ROLE_ADMIN">
Add the components that are only visible to the users that satisfy the requirements here.
</acegijsf:authorize>
The attribute names are same both in jsp tag and the jsf component. You just give a role list seperated with a comma(Whitespaces omitted). All of these attributes can be bound to a value using EL.

ifAllGranted = User must be in all of the roles
ifAnyGranted = User must be in any of the roles
ifNotGranted = None of the roles must be granted for the user

This component does not render the secured children components if the user does not satisfy the granting requirements given with the attributes.

57 comments:

Anonymous said...

Great Work. It works like charm.
I am still trying to figure out how to make the following scriplet work in JSF/Facelets xhtml file

Your principal object is....: = request.getUserPrincipal()

Any pointers/suggestions will be greatly appreciated

Vigil Bose said...

try <acegijsf:authentication operation="username"/>

The above said tag will display the autenticated username similar to java.security.Principal object containing the name of the current authenticated user.

Pointless Researcher said...

It works great once you're authenticated but before I'm receiving a NPE when trying <security:authentication operation="username" />. Here's the trace:

java.lang.NullPointerException
at org.apache.myfaces.shared_impl.renderkit.html.HtmlResponseWriterImpl.write(HtmlResponseWriterImpl.java:574)
at net.sf.jsfcomp.acegijsf.Authentication.encodeBegin(Authentication.java:51)
at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:280)
at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:284)
at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
at org.ajax4jsf.renderkit.html.AjaxOutputPanelRenderer.encodeChildren(AjaxOutputPanelRenderer.java:79)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:594)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:239)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:246)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:455)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:189)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1081)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1016)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:154)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:260)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:366)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:493)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:771)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:546)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:321)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:581)
at com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:113)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3391)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1455)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:115)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)

Pointless Researcher said...

Changing the offending line to

writer.write(result != null ? result : "");

Solved the problem

Tony said...

For those of you trying to make this work directly from XHTML (instead of from XHTML generated from a JSP), there's an additional step that needs to be done.

You need to add a facelet-taglib (that is a ".taglib.xml") configuration for the faces tag.

If you don't do this, the tags are ignored by JSF.

Unknown said...

Can you be more specific on the ".taglib.xml" that is needed? I use *.xhtml for all my pages. But do not know what ".taglib.xml" I seem to need. Where would I get this or create this from?

Unknown said...

I really need some help here please.
I can NOT get the Principal username at all.

Vigil Bose said...

Mick,

The tablib.xml is already embedded inside the jar file you can download from this site. The jar file is acegi-jsf-1.1.3.jar. The tag library xml you will find inside the META-INF folder of the jar is acegijsf.taglib.xml file. If you follow the instructions under Detailed Steps section, then you can use
<acegijsf:authentication operation="username"/> to get the principal inside the JSF page.

Anonymous said...

Thanks, this helped me out alot :)

cecchisandrone said...

Hi, i receive a NPE when I use < acegijsf:authentication operation="username"/ > and I'm not logged. How can I solve this problem using JSF/Facelets?

Anonymous said...

Hi,

Is this new customized jar file available in in maven repository?

Thanks,
Anil.

Vigil Bose said...

You should use the tag only after you logged in or authenticated. The jar is not published in maven repository.

Vigil Bose said...

An example of using the tags that displays the username only when the user has a particular role. The following tag usage displays the user only if the user has either ROLE_USER or ROLE_ADMIN roles.

<acegijsf:authorize ifAnyGranted="ROLE_USER,ROLE_ADMIN">
Welcome, <acegijsf:authentication operation="username"/> | <a href="${request.contextPath}/spring/logout" title="Logout">Logout</a>

</acegijsf:authorize>

Cecchi Sandrone said...

Thank you...I've done as you told and works ;)

Atul said...

I want the username in .xhtml file.
How I can get that?

I am trying as the the others said, but getting the same excepation.

Please help me?How to get this in .xhtml file

Atul

cecchisandrone said...

Do as Vigil said in the last comment...it works for me!

Atul said...

Thanks cecchisandrone

I am doing the same thing...cant get success.
I am using jdbc type implementation

I am passing the username and password, if they are valid then the role and username returns o.w.returns nothing.

I am checking if the user is active or not through query, if it is inactive it returns nothing not even role and the username is null so the error url shows on the same page "login.html/login_error=1"

I want that username to check wheather it is null for the inactive user to disaply the message

Atul said...

acegijsf:authorize ifAnyGranted="ROLE_USER,ROLE_ADMIN">
Welcome, acegijsf:authentication operation="username" | Logout

acegijsf:authorize

for this we need Role name, even we use

ifNotGranted = None of the roles must be granted for the user

I need that username .. even it is null

Vigil Bose said...

Atul,
What you need is an anonymous user role. Spring Security can display anonymous user name from the principal object provided, the user is granted privilege to use the page anonymously.

So define a new role something like ROLE_ANONYMOUS for the user you would like to see on the page. Then use only that role for the username using acegijsf tag (see my example).

The pages where you want authenticated user, use the real roles defined for the user in the database something like ROLE_USER or ROLE_ADMIN.

I hope this makes sense to you.

Regards,
Vigil

Atul said...

Vigil,

Thanks...
I solve the issue. What I do is, change the query, it return me the role. I check the role in acrgijsf tag.

Atul

Dominik Dorn said...

Hi,

I've created a simple jar file to easily integrate Spring Security and Facelets. You can even add it as maven dependency.

Take a look at
Using Spring Security with FaceletsGreetings,
Dominik

Dominik Dorn said...

Sorry, messed with the Link, it should be:Using Spring Security with FaceletsGreetings,
Dominik

wahoho said...

great tutorial. works perfectly.

Anonymous said...

I want to quote your post in my blog. It can?
And you et an account on Twitter?

Tulio Domingos said...

@Domink

Hi Dominik, I've been working on Spring 3 + Spring Security 3 with JSF 2 and Facelets recently and it looks like there is an issue in the "facelets-taglib-0.2_jsf-2.0_spring-3-sources.jar" more info at:
http://datenschwanz.net/2009/12/23/spring-security-3-and-jsf/

Cheers

Tulio

Dominik Dorn said...

@Tulio:
The current version of the taglib is 0.3, where this bug is already resolved.

Anonymous said...

Can you please explain the following step.

"You need to add a facelet-taglib (that is a ".taglib.xml") configuration for the faces tag.

If you don't do this, the tags are ignored by JSF. "

Currently it is not recognizing "ifAnyGranted" for authorize in my .xhtml page.

Anonymous said...

ballroom dance shoes narrow size http://topcitystyle.com/-caps-dolce-amp-gabbana-category88.html clothes in europe [url=http://topcitystyle.com/xxl-dolce-amp-gabbana-size8.html]designer toilets[/url] latest copy analysis gucci
http://topcitystyle.com/vae-victis-sport-brand47.html puma racing shoes [url=http://topcitystyle.com/gioventu-bruciata-men-brand83.html]christian dior handbag[/url]

Anonymous said...

milan fashion week http://topcitystyle.com/burberry-tank-top-for-women-white-item1836.html chanel eyeglass frames [url=http://topcitystyle.com/dsquared-polo-shirts-brand13.html]etonics shoes[/url] mens fashion
http://topcitystyle.com/brown-and-grey-casual-color151.html fashion new photographer york [url=http://topcitystyle.com/hoodies-page5.html]rss chanel for psp[/url]

Anonymous said...

nubuck shoes http://topcitystyle.com/-leggings-pants-type-women-category99.html trash to fashion pictures [url=http://topcitystyle.com/delmaro-shirts-brand45.html]stacy clothes[/url] adidas running shoes women
http://topcitystyle.com/black-blue-on-sale-color135.html university of alabama baby clothes [url=http://topcitystyle.com/white-green-on-sale-color57.html]japanese fashion[/url]

Anonymous said...

travel naturalized cititzens http://adventurecollection.in/airline/best-airline-travel-bag co2 emissions aire travel
[url=http://adventurecollection.in/airlines/partner-airlines-for-continental]value of a used travel trailor[/url] pedro travel cases [url=http://adventurecollection.in/flight/cheap-flight-bombay-to-chennai]cheap flight bombay to chennai[/url]
chile argentina travel http://adventurecollection.in/tourism/arishiyama-japan-tourism
[url=http://adventurecollection.in/cruise/add-on-cruise-control-kit]travel agents athens greece[/url] used travel trailers in dallas fort worth area [url=http://adventurecollection.in/car-rental/mallorca-car-rental-playa-calor]mallorca car rental playa calor[/url]
restored travel air http://adventurecollection.in/airlines/contential-airlines-schedule travel travel tre rose [url=http://adventurecollection.in/expedia/expedia-inc-travel-company]expedia inc travel company[/url]

Anonymous said...

porn acedents http://theporncollection.in/lesbian-sex/lesbian-free-pictures
[url=http://theporncollection.in/lubricant/resorts-couples-incision-leave-lubricant-recommend-single-forums]enourmous strap on dildo[/url] adult myspace xxx [url=http://theporncollection.in/lesbian-sex/lesbian-sex-storie]lesbian sex storie[/url]
jaydes sexy leg link http://theporncollection.in/incest/incest-flamey-pics
[url=http://theporncollection.in/moms/moms-undress-movies]amateur home sex clips blog[/url] freeviw adult channel code [url=http://theporncollection.in/free-hentai/free-hentai-little-girls]free hentai little girls[/url]
midget girl porn http://theporncollection.in/orgy/how-to-hold-back-from-penis-orgy
[url=http://theporncollection.in/incest/unwanted-preganancies-occur-due-to-rape-or-incest-in-malaysia]gabriel fluorlube lubricant[/url] adult shops high street spain [url=http://theporncollection.in/sex-mature/mature-bust]mature bust[/url]
hentai simgirls beta cheats http://theporncollection.in/gay-movie/uncut-gay-redhead-youtube
[url=http://theporncollection.in/hentai-sex/pan-lolita-hentai]animal hentai games[/url] world of warcraft adult pics [url=http://theporncollection.in/free-hentai/hentai-mang]hentai mang[/url]

Anonymous said...

adult japanese vcd http://xwe.in/girl-anal/anal-sex-feels-like
[url=http://xwe.in/adult-xxx/adult-online-dressup-dolls]free tennessee adult chat rooms[/url] hentai vedioes [url=http://xwe.in/gay-boy/gay-chubby-men]gay chubby men[/url]
saw cutting lubricant http://xwe.in/condom/success-rate-of-condoms
[url=http://xwe.in/bdsm/bdsm-domination-guide]developmentally disabled adult agencies[/url] forcing anal sex [url=http://xwe.in/orgasm]orgasm[/url]
paraffin lubricant http://xwe.in/hcg-oral/oral-b-precision-clean-bursh-heads
[url=http://xwe.in/shemale/shemale-flix]anal outdoors[/url] adult porn sharing [url=http://xwe.in/adult-video/statistics-child-physical-abuse-adult-rape]statistics child physical abuse adult rape[/url]
adult story database http://xwe.in/bdsm/streaming-bdsm-videos
[url=http://xwe.in/teen-ass/bad-ass-poems]dbz and sailor moon hentai[/url] review porn star classics [url=http://xwe.in/blow/blow-torch-for-sale]blow torch for sale[/url]

Anonymous said...

travel tralier sales milwaukee http://xwg.in/hotel/riviera-hotel-an-dcasino travel advice phone uk
[url=http://xwg.in/hotel/desert-hotel]adventure travel world cruise tips[/url] documents required to travel to qatar [url=http://xwg.in/plane-tickets/plane-tickets-to-cancun]plane tickets to cancun[/url]
mulitple travel systems http://xwg.in/plane-tickets/discount-air-plane-tickets-to-bangladesh
[url=http://xwg.in/tour/israel-10-day-tour]travel from phoenix to las vegas[/url] scuba travel puerto rico [url=http://xwg.in/hotel]hotel[/url]
travel trailer van http://xwg.in/airlines/promotional-code-for-southwest-airlines kennesaw travel [url=http://xwg.in/plane-tickets/cheap-plane-tickets-hot]cheap plane tickets hot[/url]

Anonymous said...

travel clothes steamer http://www.thefashionhouse.us/-leather-shoes-new-category13.html modernist home designers in florida [url=http://www.thefashionhouse.us/lingerie-category73.html]no shoes no shirt no problem guitar[/url] bicycle shoes and pedals
http://www.thefashionhouse.us/killah-by-miss-sixty-vintage-blouse-hot-style-item1122.html pictures of designer rooms [url=http://www.thefashionhouse.us/red-leather-shoes-color8.html]kleine loo[/url]

Anonymous said...

sirtex medical limited [url=http://usadrugstoretoday.com/products/advair-diskus.htm]advair diskus[/url] health issues in new zealand http://usadrugstoretoday.com/categories/hypnotherapie.htm
i drink your blood public domaine [url=http://usadrugstoretoday.com/categories/disfunzione-erettile.htm]disfunzione erettile[/url] average penis size for 12 year old boy [url=http://usadrugstoretoday.com/products/levitra.htm ]cook books downs syndrome [/url] vitamin a facts
information on weight loss supplement [url=http://usadrugstoretoday.com/products/ed-discount-pack-2.htm]Order ED discount pack 2[/url] what are shoot out roses http://usadrugstoretoday.com/categories/gastro-intestinal.htm
handbook for short term medical missions [url=http://usadrugstoretoday.com/products/cialis-soft-tabs.htm]cialis soft tabs[/url] against legalizing drugs [url=http://usadrugstoretoday.com/products/karela.htm ]muscle woman fuck [/url] urea and nacl and red blood cell

Anonymous said...

fashion london photographer http://www.thefashionhouse.us/blue-and-grey-men-color145.html vegetarian shoes [url=http://www.thefashionhouse.us/white-dolce-amp-gabbana-color4.html]difference between interior designer and interior decorator[/url] taryn rose shoes
http://www.thefashionhouse.us/t-shirts-for-men-page3.html mephisto spinnaker boat shoes [url=http://www.thefashionhouse.us/lagos-sweaters-brand86.html]renaissance fashion[/url]

Anonymous said...

http://xwv.in/ketorolac/ketorolac/im/dosage
[url=http://xwv.in/lisinopril/pravachol/bontril/lisinopril]street drug acid[/url] pharmacy technicians identifying problems [url=http://xwv.in/kidney/growing/kidney/beans]growing kidney beans[/url]
peer support in mental health http://xwv.in/weight-loss/walking/for/weight/loss/after/meal
[url=http://xwv.in/mysoline/mysoline/treatment/for/essential/tremors]gcse edexcel medicine paper[/url] fooling a home drug test thc [url=http://xwv.in/pain-relief/lumber/pain/relief]lumber pain relief[/url]
percepition drug kill http://xwv.in/xanax/xanax/info
[url=http://xwv.in/ketoconazole/how/is/ketoconazole/despensed]pre pharmacy school rankings[/url] brand name drugs serevent [url=http://xwv.in/ketorolac/ketorolac/im/dosage]ketorolac im dosage[/url] first author criteria for pharmacy journals [url=http://xwv.in/kidneys/where/the/kidneys/are/located]where the kidneys are located[/url]

Anonymous said...

australian fashion designers http://topcitystyle.com/6-years-new-size37.html designer handbag replica [url=http://topcitystyle.com/brown-outwear-color12.html]customizable basketball shoes[/url] lauren hutton makeup
http://topcitystyle.com/bizzbee-casual-brand70.html designer upholstered headboard [url=http://topcitystyle.com/d-amp-g-underwear-for-men-black-item2002.html]yorkie clothes[/url]

Anonymous said...

blackjack getting started cd http://wqm.in/bingo_bingo-place-play lottery results in massachusetts
[url=http://wqm.in/slot_free-monopoly-slot]betting nba playoffs[/url] darts betting [url=http://wqm.in/slots_inspirion-531-slots]inspirion 531 slots[/url]
brighton bingo http://wqm.in/poker-online_world-championship-poker-for-xbox
[url=http://wqm.in/roulette_on-line-roulette-game-bonus]gambling powerpoint template[/url] where can i get directions to a casino [url=http://wqm.in/slot_slot-machine-computer-game]slot machine computer game[/url]
how to run basket bingo http://wqm.in/poker-online_real-poker-players motels jackpot nevada [url=http://wqm.in/jackpot_hot-hot-jackpot-sound-effect-ringtone]hot hot jackpot sound effect ringtone[/url]

Anonymous said...

indisn lottery http://lwv.in/bingo/printable-bingo-cards-holiday online casinos keno mini online
[url=http://lwv.in/bingo/play-bingo-online-no-deposit]ga lottery winning numbers 2 16 08[/url] gold strike casino resort [url=http://lwv.in/blackjack/blackjack-strategy-chart]blackjack strategy chart[/url]
code all mobile casino http://lwv.in/lottery/wi-lottery
[url=http://lwv.in/poker-online/lee-jones-poker]miami gambling locations[/url] revenue earned by states through gambling [url=http://lwv.in/bingo/bingo-card-maker-free]bingo card maker free[/url]
gambling and taxes http://lwv.in/bingo/bingo-card-maker-free risks and gambling [url=http://lwv.in/bingo/kids-bingo-games-online]kids bingo games online[/url]

Anonymous said...

Rather nice place you've got here. Thanks the author for it. I like such topics and everything that is connected to them. I would like to read more soon.

Avril Hakkinen

Anonymous said...

I would like to read more on this blog soon. By the way, pretty nice design that site has, but don’t you think it should be changed every few months?

Anonymous said...

Wow, pretty great info. How can I find this subscription?

Natasha Swingfield
spy stores

Anonymous said...

Rather cool blog you've got here. Thanks for it. I like such topics and anything connected to them. I would like to read a bit more on that blog soon.

Anete Hakkinen
black escort in london

Anonymous said...

Rather nice place you've got here. Thank you for it. I like such themes and anything connected to this matter. I definitely want to read more soon.

Avril Hakkinen
escort new york asian

Herschel Muehlbach said...

Galletto 1260 OBD-II OBD2 CAN USB Interface Diagnostic Tool is particularly uncomplicated to utilize. Just turn your laptop or computer into a auto diagnostic program. This obd connector interface with software included is all you need. Works for most of vehicles immediately after 1996. It can read and clear all diagnostic trouble codes. Display all the live information of your automobile.

Anonymous said...

XqmEjr [url=http://www.outletmonclerspacciopiumini.com/]Moncler Outlet[/url] LiqNos http://www.outletmonclerspacciopiumini.com/

VknZbn [url=http://www.vnikefree.com/]Nike Free[/url] QosLxm http://www.vnikefree.com/

ZwaGsx [url=http://www.outletmonclerspaccio.com/]Moncler Outlet[/url] RbfLks http://www.outletmonclerspaccio.com/

IenMcr [url=http://www.Jakker2canadagoose.com/]Goose Jakker[/url] ZioDjg http://www.Jakker2canadagoose.com/

FmnMaa [url=http://www.parkajakker4canadagoose.com/]Canada Goose Canada[/url] DgsAge http://www.parkajakker4canadagoose.com/

JfbGni [url=http://www.jakke2canadagoose.com/]Canada Goose Parka[/url] SgvFfd http://www.jakke2canadagoose.com/

SyxCky [url=http://www.canadagoosefromcanada.com/]Canada Goose Canada[/url] HhkOzf http://www.canadagoosefromcanada.com/

Anonymous said...

IlvDcv [url=http://www.nikefreevnikefree.com/]Billige Nike Free Sko[/url] PhnXve http://www.nikefreevnikefree.com/

TckHyo [url=http://www.canadagoosefromcanada.com/]Canada Goose Jakke[/url] WhiFqa http://www.canadagoosefromcanada.com/

Anonymous said...

Wonderful goods from you, man. I've understand your stuff previous to and you're just extremely great.
I actually like what you have acquired here, really like
what you're saying and the way in which you say it. You make it entertaining and you still take care of to keep it wise. I can't wait to read much more from you.
This is actually a wonderful website.
Also see my web site: legit ways to make money online

Anonymous said...

Thank you, I've just been looking for info about this topic for ages and yours is the greatest I've
came upon so far. However, what in regards to the bottom line?
Are you certain about the source?
Here is my homepage - how to make money on ebay fast

Anonymous said...

My spouse and I absolutely love your blog and find nearly all of
your post's to be exactly what I'm looking for. Would you
offer guest writers to write content to suit your needs?

I wouldn't mind writing a post or elaborating on a few of the subjects you write about here. Again, awesome web log!
My web site how to make quick money from home

Anonymous said...

Magnificent goods from you, man. I've understand your stuff previous to and you are just too fantastic. I really like what you have acquired here, certainly like what you're saying and the way in which
you say it. You make it enjoyable and you still care for to keep it smart.
I can not wait to read far more from you.

This is really a tremendous site.
Feel free to visit my page ... high paying affiliate programs

Anonymous said...

Thanks for finally writing about > "Integrating Spring Security with JSF/Facelets using acegi-jsf" < Liked it!
My homepage : play slot machine online for money

Anonymous said...

Have you ever thought about including a little bit
more than just your articles? I mean, what you say is important
and all. However think of if you added some great photos or video
clips to give your posts more, "pop"! Your content is excellent but with pics and clips, this website could certainly be one of the very best in its field.
Good blog!
My web site > Online Slots For Money

Anonymous said...

May I simply just say what a comfort to find someone who really knows what they're talking about on the internet. You certainly understand how to bring an issue to light and make it important. More and more people need to read this and understand this side of the story. It's
surprising you aren't more popular since you certainly possess the gift.
Also visit my page ; find a slot machine

Anonymous said...

electronic cigarette, electronic cigarette, smokeless cigarettes, e cigarette, smokeless cigarettes, electronic cigarettes