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:

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

    ReplyDelete
  2. 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.

    ReplyDelete
  3. 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)

    ReplyDelete
  4. Changing the offending line to

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

    Solved the problem

    ReplyDelete
  5. 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.

    ReplyDelete
  6. 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?

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

    ReplyDelete
  8. 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.

    ReplyDelete
  9. Thanks, this helped me out alot :)

    ReplyDelete
  10. 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?

    ReplyDelete
  11. Hi,

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

    Thanks,
    Anil.

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

    ReplyDelete
  13. 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>

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

    ReplyDelete
  15. 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

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

    ReplyDelete
  17. 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

    ReplyDelete
  18. 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

    ReplyDelete
  19. 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

    ReplyDelete
  20. 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

    ReplyDelete
  21. 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

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

    ReplyDelete
  23. great tutorial. works perfectly.

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

    ReplyDelete
  25. @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

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

    ReplyDelete
  27. 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.

    ReplyDelete
  28. 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]

    ReplyDelete
  29. 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]

    ReplyDelete
  30. 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]

    ReplyDelete
  31. 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]

    ReplyDelete
  32. 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]

    ReplyDelete
  33. 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]

    ReplyDelete
  34. 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]

    ReplyDelete
  35. 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]

    ReplyDelete
  36. 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

    ReplyDelete
  37. 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]

    ReplyDelete
  38. 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]

    ReplyDelete
  39. 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]

    ReplyDelete
  40. 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]

    ReplyDelete
  41. 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]

    ReplyDelete
  42. 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

    ReplyDelete
  43. 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?

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

    Natasha Swingfield
    spy stores

    ReplyDelete
  45. 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

    ReplyDelete
  46. 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

    ReplyDelete
  47. 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.

    ReplyDelete
  48. 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/

    ReplyDelete
  49. 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/

    ReplyDelete
  50. 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

    ReplyDelete
  51. 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

    ReplyDelete
  52. 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

    ReplyDelete
  53. 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

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

    ReplyDelete
  55. 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

    ReplyDelete
  56. 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

    ReplyDelete