<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>REVERT TO CONSOLE &#187; Security</title>
	<atom:link href="http://www.reverttoconsole.com/blog/category/security/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.reverttoconsole.com</link>
	<description>for f in *;do echo &#124; sed &#039;i\rtc&#039; &#62;&#62; $f;done; java programming et al</description>
	<lastBuildDate>Thu, 25 Aug 2011 15:02:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>CAPTCHA Overview and alternatives</title>
		<link>http://www.reverttoconsole.com/blog/security/captcha-overview-and-alternatives/</link>
		<comments>http://www.reverttoconsole.com/blog/security/captcha-overview-and-alternatives/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 17:54:51 +0000</pubDate>
		<dc:creator>Priyatam</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/?p=347</guid>
		<description><![CDATA[I recently evaluated CAPTCHA for a client requirement. Here is a brief overview (Source: blogs, wiki, white papers found on google search) CAPTCHA stands for: “Completely Automated Public Turing test to Tell Computers and Humans Apart”. It refers to a technology familiar to anyone who’s registered on a popular website &#8211; the “what word is [...]]]></description>
			<content:encoded><![CDATA[<p>I recently evaluated CAPTCHA for a client requirement. Here is a brief overview (Source: blogs, wiki, white papers found on google search)</p>
<p>CAPTCHA stands for: “Completely Automated Public Turing test to Tell Computers and Humans Apart”. It refers to a technology familiar to anyone who’s registered on a popular website &#8211; the “what word is shown on this image” challenge. As the “Turing test” alludes to, the purpose is to distinguish between humans and computers. Types of CAPTCHA:</p>
<p>* Photo/Image CAPTCHA<br />
* Animated CAPTCHA<br />
* Sound CAPTCHA<br />
* Multiple choice questions<br />
* Logic questions</p>
<p>CAPTCHA doesn’t prevent hackers or attackers to the site. It merely attempts to prevent bots and spammers.</p>
<p><strong>How does CAPTCHA work?</strong></p>
<p><span id="more-293"></span><br />
CAPTCHA fools the bots by asking questions or generating pictures only human can answer. They contain distorted letters, different pictures with different letters in different shapes. After the user submits the answer CAPTCHA validate the answer. Since Bots cannot recognize each letter alone, this is a fairly difficult to break.</p>
<p><strong>How to create CAPTCHA?</strong><br />
CAPTCHA can be written using any programming languages including Java. The code should provide three main functions. First, the code should generate a random picture with different properties. Second, validate the user answer. Third, make these pictures secure. Also, there are many things to make the code more reliable like&#8221; Rotate the text randomly, add random spaces in between characters, use a TTF fonts and change the font randomly every time, use a random text and image size every time, use more advanced text distortion and colors, move the lines randomly, store the password in a random cookie. In addition, there are CAPTCHA creator programs which allow users to choose their CAPTCHA shapes. Sophisticated libraries often provide extensions for developers to create their own algorithm for drawing images.<br />
CAPTCHA benefits</p>
<p>* Preventing Comment Spam in Blogs.<br />
* Protecting Website Registration.<br />
* Protecting Email Addresses from Scrapers.<br />
* Online Polls<br />
* Search Engine Bots.<br />
* Worms and Spam</p>
<p><strong>Implementations of CAPTCHA</strong><br />
There are several implementations of CAPTCHA – commercial and open-source, in almost every programming language. The following are some Java based CAPTCHA frameworks<br />
* reCaptcha (most popular, available as web-service)<br />
* SimpleCaptcha (Java)<br />
* JBoss Seam Captcha (for Java Seam based projects, works out of the box, can extend algorithm)<br />
* jCaptcha (Java)<br />
* Kaptcha (very simple java alternative to jCaptcha)<br />
* … and many more</p>
<p><strong>Problems</strong><br />
* When captchas get funky that humans with 20/20 vision start struggling; accessibility is far away<br />
* Prone to common attacks<br />
* The image challenge is inaccessible to visually impaired users. This problem is usually addressed by providing an alternative audio CAPTCHA for these users. However, many audio CAPTCHAs can be difficult to hear even to those with good hearing due to background noise and distorted pronunciation.<br />
* Providing both image and audio CAPTCHAs is difficult to implement. ReCAPTCHA can simplify the process, but requires Javascript, and needs to be imbedded in your mark-up using iframes.<br />
* Image CAPTCHAs are not infallible. A number of projects have shown that automatic character recognition software can often read the letters in the image.</p>
<p><strong>Alternate Solutions</strong><br />
There are several alternatives to CAPTCHA. Most of them can be easily incorporated into an existing web framework:</p>
<ul>
<li><strong>Dummy form elements</strong></li>
</ul>
<p>Dummy form elements can be added to trick bots into filling them and hiddeen those from users with CSS. Additionally, dummy elements should be named suggestively to fool the bots &#8211; for example, subject, name, URL. Then when form is submitted, system can check if any of these fields have been filled and if so you can isolate a “bot.”</p>
<ul>
<li><strong>Session variable / GET request detection</strong></li>
</ul>
<p>This isn’t CAPTCHA alternative, but it can be used to filter out spam-bots. A variable is put in session when a GET request is made and when a form is submitted the system checks the session for that variable. This can filter out bots that submit request directly to POST without getting a page with the form. However this system can be easily fooled by creating a bot that acts like a web browser.</p>
<ul>
<li><strong>Session variable with time computation</strong></li>
</ul>
<p>Similar to the above session idea where, time can be recorded when the form was loaded. On post, system calculates the time difference and if it’s less than say 5 seconds, it can be ignored as spam. However spam bots could easily adjust for this by building in a delay.</p>
<ul>
<li><strong>5 Layer Spam Filter</strong></li>
</ul>
<p>It uses some cunning techniques to identify bots without having to resort to CAPTCHA:</p>
<p>* Do fields hidden off-screen still get filled in<br />
* Is the form filled in in seconds?<br />
* Do they not have JavaScript enabled?<br />
* Does Askimet mark it as spam<br />
* Etc …</p>
<ul>
<li><strong>Forced Visual cues</strong></li>
</ul>
<p>This is a simpler alternative. The webpage with a &#8220;yes&#8221; and a &#8220;no&#8221; radio button can make &#8220;no&#8221; the default and have the visitors state that they are not spammers by selecting &#8220;yes.&#8221;</p>
<ul>
<li><strong>SAPTCHA (“Text based CAPTCHA)</strong></li>
</ul>
<p>SAPTCHA stands for Semi Automatic Public Turing Test to Tell Computers and Humans Apart.</p>
<p>The key concept is same as with CAPTCHA: user is presented with test question or instructions and must give correct answer to use resource. Main difference is that computer does not try to automatically generate &#8220;unique&#8221; test questions on each query; only verification of answer is automatic. Instead, unique test question and answer[s] is set by moderator or owner when SAPTCHA is installed, and should be easy to change if needed.<br />
Comparison of SAPTCHA versus CAPTCHA features<br />
<strong></strong></p>
<p><em>Advantages of SAPTCHA over CAPTCHA:</em></p>
<p>1. SAPTCHA software is much easier to implement than CAPTCHA<br />
2. Textual SAPTCHA does not discriminate against disabled who can use internet. [Audio CAPTCHA plus visual CAPTCHA would double effort and is thus very uncommon in practice]<br />
3. There is methods for breaking image based CAPTCHAs. Even with popular CAPTCHA, the system may still get spammed by entirely automatic bot. SAPTCHAs can be much more varied and there won&#8217;t be common method of breaking until it becomes possible for computers to interpret human instructions in normal human language.<br />
<strong><br />
</strong><em>Advantages of CAPTCHA over SAPTCHA (disadvantages of SAPTCHA):</em></p>
<p>1. With SAPTCHA, when banning spammer, moderator must enter new question and answer. With CAPTCHA, though, there&#8217;s point 1 above (&amp; CAPTCHA code won&#8217;t remain useful forever either), so for not extremely popular websites it seems highly unlikely that even in long run CAPTCHA would save work.<br />
2. If SAPTCHA is used to protect registration, it is easier to register many accounts at once than with CAPTCHA; may matter with popular email services.<br />
3. Verbal SAPTCHA is problematic when it is multi-language resource that needs frequent changes.</p>
<ul>
<li><strong>Mouse Intervention CAPTCHA</strong></li>
</ul>
<p>A simple Mouse Intervention CAPTCHA implemented in a Java applet. The server generates some drawings and asks the user to click on all drawings with an odd number of edges. The mouse click events are recorded. As long as the mouse is clicked within the dark area of drawings with an odd number of edges, access is granted.</p>
<p><strong>Conclusion</strong><br />
CAPTCHA is widely used across the internet including by Google, Yahoo and Microsoft. Hence discarding this solution should be done only for a ground-breaking alternative. With CAPTCHA, the criteria would be to pick an image/audio based CAPTCHA or text-based CAPTCHA for the project depending on the target user base. Once that’s decided, one of the several free libraries can be chosen to fit well into an existing technology stack. A relatively “light” library that provides easy extension hooks for custom extensions of CAPTCHA algorithms would be ideal.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/security/captcha-overview-and-alternatives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HSQLDB Integration Into Spring Security</title>
		<link>http://www.reverttoconsole.com/blog/security/hsqldb-integration-into-spring-security/</link>
		<comments>http://www.reverttoconsole.com/blog/security/hsqldb-integration-into-spring-security/#comments</comments>
		<pubDate>Fri, 02 May 2008 15:40:18 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[hsqldb]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/176</guid>
		<description><![CDATA[Adding a database back end to Spring Security seems deceptively simple. And to be fair, there are several ways to do it. The way I had in mind looked like a shortcut. In my application there is basically one table for all users. It contains the values I need for username, password, role, and the [...]]]></description>
			<content:encoded><![CDATA[<p>Adding a database back end to Spring Security seems deceptively simple. And to be fair, <a href="http://static.springframework.org/spring-security/site/reference/html/authentication-common-auth-services.html#jdbc-service">there are several ways to do it</a>. The way I had in mind looked like a shortcut.</p>
<p>In my application there is basically one table for all users. It contains the values I need for username, password, role, and the active flag that Spring Security supports. No, it wouldn&#8217;t be my first choice of table setup, but that&#8217;s what I have to work with.</p>
<p>I read through Chris Baker&#8217;s <a href="http://java.dzone.com/tips/pathway-acegi-spring-security-">fine article in the Java DZONE</a> and the way he did it was to override two values in the jdbc-user-service, which replaces the user-service authentication provider. He used:</p>
<pre>
&lt;authentication-provider&gt;
	&lt;jdbc-user-service data-source-ref=&quot;dataSource&quot;
	users-by-username-query=&quot;SELECT U.username, U.password, U.accountEnabled AS &#039;enabled&#039; FROM User U where U.username=?&quot;
	authorities-by-username-query=&quot;SELECT U.username, R.name as &#039;authority&#039; FROM User U JOIN Authority A ON u.id = A.userId JOIN Role R ON R.id = A.roleId WHERE U.username=?&quot;/&gt;
&lt;/authentication-provider&gt;
</pre>
<p>I wanted to do something similar, and initially banged out:</p>
<pre>
	&lt;authentication-provider&gt;
	&lt;jdbc-user-service data-source-ref=&quot;baseDataSource&quot;
	users-by-username-query=&quot;SELECT LOGONID, PASSWORD, ACTIVE FROM EMPLOYEE WHERE LOGONID=?&quot;
	authorities-by-username-query=&quot;SELECT LOGONID, ROLE FROM EMPLOYEE WHERE LOGONID=?&quot;/&gt;
	&lt;/authentication-provider&gt;
</pre>
<p>The result was that all employees were inactive for Spring Security. Why? Because the EMPLOYEE table&#8217;s ACTIVE column is a CHAR, and Spring Security expects a BIT or BOOLEAN. After tinkering around for a bit, I decided to modify the EMPLOYEE table to use a BOOLEAN instead. The actually posed a <a href="http://www.carbonfive.com/community/archives/2005/07/dbunit_hsql_and.html">problem for DbUnit</a>, surprise surprise. The workaround in Ant didn&#8217;t work for me, I had a weird classnotfound error that I couldn&#8217;t track back to ant, and just gave up after a while. I didn&#8217;t really want to change the column type anyway.</p>
<p>In the end, I played around with HSQL for a while and came up with</p>
<pre>
	&lt;authentication-provider&gt;
	&lt;jdbc-user-service data-source-ref=&quot;baseDataSource&quot;
	users-by-username-query=&quot;SELECT LOGONID, PASSWORD, CASE WHEN UCASE(ACTIVE)=&#039;T&#039; THEN 1 ELSE 0 END FROM EMPLOYEE WHERE LOGONID=?&quot;
	authorities-by-username-query=&quot;SELECT LOGONID, ROLE FROM EMPLOYEE WHERE LOGONID=?&quot;/&gt;
	&lt;/authentication-provider&gt;
</pre>
<p>Disclaimer: There are other ways to do this that are identified in the Spring Security reference documentation. The documentation is very good, my only wish would be that they provide the default schema, and provide a description of the default roles.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fhsqldb-integration-into-spring-security%2F&amp;title=HSQLDB+Integration+Into+Spring+Security" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fhsqldb-integration-into-spring-security%2F&amp;title=HSQLDB+Integration+Into+Spring+Security" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fhsqldb-integration-into-spring-security%2F&amp;title=HSQLDB+Integration+Into+Spring+Security" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fhsqldb-integration-into-spring-security%2F&amp;title=HSQLDB+Integration+Into+Spring+Security" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fhsqldb-integration-into-spring-security%2F&amp;title=HSQLDB+Integration+Into+Spring+Security', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fhsqldb-integration-into-spring-security%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fhsqldb-integration-into-spring-security%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fhsqldb-integration-into-spring-security%2F&amp;title=HSQLDB+Integration+Into+Spring+Security" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fhsqldb-integration-into-spring-security%2F&amp;title=HSQLDB+Integration+Into+Spring+Security" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/security/hsqldb-integration-into-spring-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring Security, Replacing Acegi</title>
		<link>http://www.reverttoconsole.com/blog/security/spring-security-replacing-acegi/</link>
		<comments>http://www.reverttoconsole.com/blog/security/spring-security-replacing-acegi/#comments</comments>
		<pubDate>Thu, 01 May 2008 13:31:29 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/175</guid>
		<description><![CDATA[Astute readers of my last Acegi article will note that Acegi has been assimilated into the Spring project, and is now called Spring Security. This next example is how I was able to get Spring Security running on my webapp. I decided early on that I did not want to mess up the other developers [...]]]></description>
			<content:encoded><![CDATA[<p>Astute readers of my last Acegi article will note that Acegi has been assimilated into the Spring project, and is now called Spring Security. This next example is how I was able to get Spring Security running on my webapp.</p>
<p>I decided early on that I did not want to mess up the other developers on the project any more than I needed to, so I added a securityContext.xml file rather than integrate (what used to be) the reams and reams of configuration required for Acegi. Here is my latest version of Spring Security. This is really simple, but meets the basic needs of the project at this point in development:</p>
<pre>

&lt;beans:beans xmlns=&quot;http://www.springframework.org/schema/security&quot;
    xmlns:beans=&quot;http://www.springframework.org/schema/beans&quot;
    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd&quot;&gt;

	&lt;global-method-security secured-annotations=&quot;enabled&quot; /&gt;

    &lt;http auto-config=&quot;true&quot; access-denied-page=&quot;/jsp/accessDenied.jsp&quot;&gt;
        &lt;intercept-url pattern=&quot;/admin/*.do&quot; access=&quot;ROLE_SUPERVISOR&quot;/&gt;
        &lt;intercept-url pattern=&quot;/consultant/*.do&quot; access=&quot;IS_AUTHENTICATED_REMEMBERED&quot; /&gt;
        &lt;intercept-url pattern=&quot;/**&quot; access=&quot;IS_AUTHENTICATED_ANONYMOUSLY&quot; /&gt;

    	&lt;intercept-url pattern=&quot;/jsp/login.jsp*&quot; filters=&quot;none&quot;/&gt;

    	&lt;form-login login-page=&quot;/jsp/login.jsp&quot; authentication-failure-url=&quot;/jsp/login.jsp?login_error=1&quot;/&gt;

	&lt;logout logout-success-url=&quot;/jsp/logout.jsp&quot;/&gt;

    &lt;/http&gt;

    &lt;authentication-provider&gt;
        &lt;user-service&gt;
            &lt;user name=&quot;joe&quot; password=&quot;password&quot; authorities=&quot;ROLE_SUPERVISOR, ROLE_USER&quot; /&gt;
	    &lt;user name=&quot;steve&quot; password=&quot;DOC&quot; authorities=&quot;ROLE_USER&quot; /&gt;
	&lt;/user-service&gt;
    &lt;/authentication-provider&gt;
</pre>
<p>Not bad looking at all, especially compared with the old way. But note, this makes use of XML namespaces, and we&#8217;re not done yet.</p>
<p>I&#8217;m using a beanRefContext.xml that&#8217;s referring to both my applicationContext and my securityContext file:</p>
<pre>

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
	xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;&gt;

	&lt;bean id=&quot;org.reverttoconsole.app.context&quot;
		class=&quot;org.springframework.context.support.ClassPathXmlApplicationContext&quot;&gt;
		&lt;constructor-arg&gt;
			&lt;list&gt;
				&lt;value&gt;resources/org/reverttoconsole/app/applicationContext.xml&lt;/value&gt;
				&lt;value&gt;resources/org/reverttoconsole/app/securityContext_2.0.xml&lt;/value&gt;
			&lt;/list&gt;
		&lt;/constructor-arg&gt;
	&lt;/bean&gt;

&lt;/beans&gt;
</pre>
<p>This wires my two contexts up, in order. The applicationContext has no bearing on the security, except that it loads the security namespace, which the securityContext.xml uses:</p>
<pre>

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
       xmlns:util=&quot;http://www.springframework.org/schema/util&quot;
       xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot;
       xmlns:jee=&quot;http://www.springframework.org/schema/jee&quot;
       xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot;
       xmlns:security=&quot;http://www.springframework.org/schema/security&quot;
       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
                           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
                           http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd
                           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
                           http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd&quot;&gt;
</pre>
<p>Lastly, the relevant additions to the web.xml file:</p>
<pre>
   &lt;filter&gt;
        &lt;filter-name&gt;springSecurityFilterChain&lt;/filter-name&gt;
        &lt;filter-class&gt;org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class&gt;
    &lt;/filter&gt;

    &lt;filter-mapping&gt;
      &lt;filter-name&gt;springSecurityFilterChain&lt;/filter-name&gt;
      &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
    &lt;/filter-mapping&gt;
</pre>
<p>And that&#8217;s it!</p>
<p><strong>Note: Recommended reading:</strong><br />
<a href="http://static.springframework.org/spring-security/site/reference/html/springsecurity.html">Spring Security Documentation</a></p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fspring-security-replacing-acegi%2F&amp;title=Spring+Security%2C+Replacing+Acegi" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fspring-security-replacing-acegi%2F&amp;title=Spring+Security%2C+Replacing+Acegi" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fspring-security-replacing-acegi%2F&amp;title=Spring+Security%2C+Replacing+Acegi" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fspring-security-replacing-acegi%2F&amp;title=Spring+Security%2C+Replacing+Acegi" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fspring-security-replacing-acegi%2F&amp;title=Spring+Security%2C+Replacing+Acegi', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fspring-security-replacing-acegi%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fspring-security-replacing-acegi%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fspring-security-replacing-acegi%2F&amp;title=Spring+Security%2C+Replacing+Acegi" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Fspring-security-replacing-acegi%2F&amp;title=Spring+Security%2C+Replacing+Acegi" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/security/spring-security-replacing-acegi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acegi 1.0.8 Example (Life Without the SecurityEnforcementFilter)</title>
		<link>http://www.reverttoconsole.com/blog/security/acegi-108-example-life-without-the-securityenforcementfilter/</link>
		<comments>http://www.reverttoconsole.com/blog/security/acegi-108-example-life-without-the-securityenforcementfilter/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 12:29:41 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/173</guid>
		<description><![CDATA[Note; This was my first day of adding Acegi to an existing webapp. You can find a lot of Acegi security framework examples on the web these days. Unfortunately, nearly all of the examples use Acegi use the pre 1.0 version, which is before someone removed the SecurityEnforcementFilter.. The official description of this event follows: [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Note; This was my first day of adding Acegi to an existing webapp. </strong></p>
<p>You can find a lot of <a href="http://www.acegisecurity.org/">Acegi</a> security framework examples on the web these days. Unfortunately, nearly all of the examples use Acegi use the pre 1.0 version, which is before someone removed the <a href="http://www.docjar.com/docs/api/org/acegisecurity/intercept/web/SecurityEnforcementFilter.html">SecurityEnforcementFilter</a>..<br />
The official description of this event follows:</p>
<blockquote><p> org.acegisecurity.intercept.web.SecurityEnforcementFilter has moved to a new location and name, org.acegisecurity.ui.ExceptionTranslationFilter. In addition, the &#8220;filterSecurityInterceptor&#8221; property on the old SecurityEnforcementFilter class has been removed. This is because SecurityEnforcementFilter will no longer delegate to FilterSecurityInterceptor as it has in the past. Because this delegation feature has been removed (see SEC-144 for a background as to why), please add a new filter definition for FilterSecurityInterceptor to the end of your FilterChainProxy. Generally you&#8217;ll also rename the old SecurityEnforcementFilter entry in your FilterChainProxy to ExceptionTranslationFilter, more accurately reflecting its purpose. If you are not using FilterChainProxy (although we recommend that you do), you will need to add an additional filter entry to web.xml and use FilterToBeanProxy to access the FilterSecurityInterceptor.</p></blockquote>
<p>Which is another way of saying if you need to implement a security system in a hurry like 90% of the developers out there, you&#8217;re SOL. This description will probably make a lot of sense to those familiar with Acegi, but it&#8217;s a daunting task to figure out if you&#8217;re new to the system. My efforts and example with Acegi 1.0.7 follow after the jump.</p>
<p><span id="more-147"></span></p>
<p>I joined a small team working on a small internal app and was assigned the task of introducing Acegi to the application.<br />
They are using Spring MVC, Hibernate, and HSQLDB for development. Because Acegi introduces so many new bean wirings, I chose to introduce the security framework as a new XML file, calling it securityContext.xml.</p>
<p>The relevant pieces of the web.xml look like this:</p>
<pre>
&lt;context-param&gt;&lt;/context-param&gt;
&lt;param-name&gt;locatorFactorySelector&lt;/param-name&gt; 		&lt;!--
This item points to one beanRefContext. The beanRefContext then
holds a reference to the base applicationContext.xml.
--&gt;
&lt;param-value&gt; 			classpath:/resources/org/reverttoconsole/app/beanRefContext.xml 		&lt;/param-value&gt;
</pre>
<p>and</p>
<pre>
	&lt;filter&gt;
    	&lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;
		&lt;filter-class&gt;org.acegisecurity.util.FilterToBeanProxy&lt;/filter-class&gt;
        &lt;init-param&gt;
        	&lt;param-name&gt;targetClass&lt;/param-name&gt;
            &lt;param-value&gt;org.acegisecurity.util.FilterChainProxy&lt;/param-value&gt;
        &lt;/init-param&gt;
    &lt;/filter&gt;
    &lt;filter&gt;
		&lt;filter-name&gt;LogoutFilter&lt;/filter-name&gt;
		&lt;filter-class&gt;org.acegisecurity.util.FilterToBeanProxy&lt;/filter-class&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;targetBean&lt;/param-name&gt;
			&lt;param-value&gt;logoutFilter&lt;/param-value&gt;
		&lt;/init-param&gt;
	&lt;/filter&gt;
	&lt;filter-mapping&gt;
		&lt;filter-name&gt;LogoutFilter&lt;/filter-name&gt;
		&lt;url-pattern&gt;/logout.do&lt;/url-pattern&gt;
	&lt;/filter-mapping&gt;
    &lt;filter-mapping&gt;
    	&lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;
		&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
    &lt;/filter-mapping&gt;
</pre>
<p>The beanRefContext picks up my security xml addition:</p>
<pre>
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;&gt;
&lt;/beans&gt;	xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;&amp;gt;

	&lt;bean id=&quot;org.reverttoconsole.app.context&quot;&gt;
&lt;/bean&gt;		class=&quot;org.springframework.context.support.ClassPathXmlApplicationContext&quot;&amp;gt;
		&lt;constructor-arg&gt;
&lt;list&gt;
				&lt;value&gt;resources/org/reverttoconsole/app/applicationContext.xml&lt;/value&gt;
				&lt;value&gt;resources/org/reverttoconsole/app/securityContext.xml&lt;/value&gt;
			&lt;/list&gt;
		&lt;/constructor-arg&gt;
</pre>
<p>and my additional security wiring looks like this:</p>
<pre>

&lt;!--
  - A simple &quot;base bones&quot; Acegi Security configuration.
  --&gt;

&lt;beans&gt;

	&lt;bean id=&quot;filterChainProxy&quot; class=&quot;org.acegisecurity.util.FilterChainProxy&quot;&gt;
&lt;property name=&quot;filterInvocationDefinitionSource&quot;&gt;
			&lt;value&gt;&lt;!--[CDATA[
				CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
				PATTERN_TYPE_APACHE_ANT
				/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
			]]--&gt;&lt;/value&gt;
		&lt;/property&gt;
	&lt;/bean&gt;

	&lt;bean id=&quot;httpSessionContextIntegrationFilter&quot; class=&quot;org.acegisecurity.context.HttpSessionContextIntegrationFilter&quot;&gt;&lt;/bean&gt;

	&lt;bean id=&quot;logoutFilter&quot; class=&quot;org.acegisecurity.ui.logout.LogoutFilter&quot;&gt;
		&lt;constructor-arg value=&quot;/jsp/logout.jsp&quot;/&gt; &lt;!-- URL redirected to after logout --&gt;
		&lt;constructor-arg&gt;
			&lt;list&gt;
				&lt;ref bean=&quot;rememberMeServices&quot;/&gt;
				&lt;bean class=&quot;org.acegisecurity.ui.logout.SecurityContextLogoutHandler&quot;/&gt;
			&lt;/list&gt;
		&lt;/constructor-arg&gt;
		&lt;property name=&quot;filterProcessesUrl&quot; value=&quot;/logout.do&quot; /&gt;
	&lt;/bean&gt;

	&lt;bean id=&quot;authenticationProcessingFilter&quot; class=&quot;org.acegisecurity.ui.webapp.AuthenticationProcessingFilter&quot;&gt;
&lt;property name=&quot;authenticationManager&quot; ref=&quot;authenticationManager&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;authenticationFailureUrl&quot; value=&quot;/jsp/login.jsp?login_error=1&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;defaultTargetUrl&quot; value=&quot;/index.html&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;filterProcessesUrl&quot; value=&quot;/jsp/j_acegi_security_check&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;rememberMeServices&quot; ref=&quot;rememberMeServices&quot;&gt;&lt;/property&gt;
	&lt;/bean&gt;

	&lt;bean id=&quot;securityContextHolderAwareRequestFilter&quot; class=&quot;org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter&quot;&gt;&lt;/bean&gt;

	&lt;bean id=&quot;rememberMeProcessingFilter&quot; class=&quot;org.acegisecurity.ui.rememberme.RememberMeProcessingFilter&quot;&gt;
&lt;property name=&quot;authenticationManager&quot; ref=&quot;authenticationManager&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;rememberMeServices&quot; ref=&quot;rememberMeServices&quot;&gt;&lt;/property&gt;
	&lt;/bean&gt;

	&lt;bean id=&quot;anonymousProcessingFilter&quot; class=&quot;org.acegisecurity.providers.anonymous.AnonymousProcessingFilter&quot;&gt;
&lt;property name=&quot;key&quot; value=&quot;changeThis&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;userAttribute&quot; value=&quot;anonymousUser,ROLE_ANONYMOUS&quot;&gt;&lt;/property&gt;
	&lt;/bean&gt;

	&lt;bean id=&quot;exceptionTranslationFilter&quot; class=&quot;org.acegisecurity.ui.ExceptionTranslationFilter&quot;&gt;
&lt;property name=&quot;authenticationEntryPoint&quot;&gt;
			&lt;bean class=&quot;org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint&quot;&gt;
&lt;property name=&quot;loginFormUrl&quot; value=&quot;/jsp/login.jsp&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;forceHttps&quot; value=&quot;false&quot;&gt;&lt;/property&gt;
			&lt;/bean&gt;
		&lt;/property&gt;
&lt;property name=&quot;accessDeniedHandler&quot;&gt;
			&lt;bean class=&quot;org.acegisecurity.ui.AccessDeniedHandlerImpl&quot;&gt;
&lt;property name=&quot;errorPage&quot; value=&quot;/jsp/accessDenied.jsp&quot;&gt;&lt;/property&gt;
			&lt;/bean&gt;
		&lt;/property&gt;
	&lt;/bean&gt;

	&lt;bean id=&quot;filterInvocationInterceptor&quot; class=&quot;org.acegisecurity.intercept.web.FilterSecurityInterceptor&quot;&gt;
&lt;property name=&quot;authenticationManager&quot; ref=&quot;authenticationManager&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;accessDecisionManager&quot;&gt;
			&lt;bean class=&quot;org.acegisecurity.vote.AffirmativeBased&quot;&gt;
&lt;property name=&quot;allowIfAllAbstainDecisions&quot; value=&quot;false&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;decisionVoters&quot;&gt;
&lt;list&gt;
						&lt;bean class=&quot;org.acegisecurity.vote.RoleVoter&quot;&gt;&lt;/bean&gt;
						&lt;bean class=&quot;org.acegisecurity.vote.AuthenticatedVoter&quot;&gt;&lt;/bean&gt;
					&lt;/list&gt;
				&lt;/property&gt;
			&lt;/bean&gt;
		&lt;/property&gt;
&lt;!-- Defines two role groups; administrators and consultants --&gt;
&lt;property name=&quot;objectDefinitionSource&quot;&gt;
			&lt;value&gt;&lt;!--[CDATA[
				CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
				PATTERN_TYPE_APACHE_ANT
				/admin/**=ROLE_SUPERVISOR
				/consultant/**=IS_AUTHENTICATED_REMEMBERED
				/**=IS_AUTHENTICATED_ANONYMOUSLY
			]]--&gt;&lt;/value&gt;
		&lt;/property&gt;
	&lt;/bean&gt;

	&lt;bean id=&quot;rememberMeServices&quot; class=&quot;org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices&quot;&gt;
&lt;property name=&quot;userDetailsService&quot; ref=&quot;userDetailsService&quot;&gt;&lt;/property&gt;
&lt;property name=&quot;key&quot; value=&quot;changeThis&quot;&gt;&lt;/property&gt;
	&lt;/bean&gt;

	&lt;bean id=&quot;authenticationManager&quot; class=&quot;org.acegisecurity.providers.ProviderManager&quot;&gt;
&lt;property name=&quot;providers&quot;&gt;
&lt;list&gt;
				&lt;ref local=&quot;daoAuthenticationProvider&quot;&gt;
				&lt;bean class=&quot;org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider&quot;&gt;
&lt;property name=&quot;key&quot; value=&quot;changeThis1&quot;&gt;&lt;/property&gt;
				&lt;/bean&gt;
				&lt;bean class=&quot;org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider&quot;&gt;
&lt;property name=&quot;key&quot; value=&quot;changeThis1&quot;&gt;&lt;/property&gt;
				&lt;/bean&gt;
			&lt;/ref&gt;
		&lt;/list&gt;
	&lt;/property&gt;

	&lt;bean id=&quot;daoAuthenticationProvider&quot; class=&quot;org.acegisecurity.providers.dao.DaoAuthenticationProvider&quot;&gt;
&lt;property name=&quot;userDetailsService&quot; ref=&quot;userDetailsService&quot;&gt;&lt;/property&gt;
	&lt;/bean&gt;

	&lt;!-- UserDetailsService is the most commonly frequently Acegi Security interface implemented by end users --&gt;
	&lt;bean id=&quot;userDetailsService&quot; class=&quot;org.acegisecurity.userdetails.memory.InMemoryDaoImpl&quot;&gt;
&lt;property name=&quot;userProperties&quot;&gt;
			&lt;bean class=&quot;org.springframework.beans.factory.config.PropertiesFactoryBean&quot;&gt;
&lt;property name=&quot;location&quot; value=&quot;/WEB-INF/users.properties&quot;&gt;&lt;/property&gt;
			&lt;/bean&gt;
		&lt;/property&gt;
	&lt;/bean&gt;

	&lt;!-- This bean is optional; it isn&#039;t used by any other bean as it only listens and logs --&gt;
	&lt;bean id=&quot;loggerListener&quot; class=&quot;org.acegisecurity.event.authentication.LoggerListener&quot;&gt;&lt;/bean&gt;

&lt;/bean&gt;&lt;/constructor-arg&gt;&lt;/bean&gt;&lt;/beans&gt;
</pre>
<p>Note: this is borrowed almost completely from acegi-security-samples-tutorial. I&#8217;d recommend checking it out before using this example and particularly before looking for other examples online (it will save you a lot of time).<br />
I&#8217;ve modified the section for roles; my application has two roles- administrators and consultants.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/security/acegi-108-example-life-without-the-securityenforcementfilter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easy Acegi</title>
		<link>http://www.reverttoconsole.com/blog/security/easy-acegi/</link>
		<comments>http://www.reverttoconsole.com/blog/security/easy-acegi/#comments</comments>
		<pubDate>Mon, 19 Feb 2007 20:55:10 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/74</guid>
		<description><![CDATA[Acegi-Security for Spring is a popular open source choice for implementing a robust security solution. It can be a daunting task to get up and running with it quickly. The recommended steps from the website say that you need to spend about a week learning it before you can use it. Well, in my position, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.acegisecurity.org">Acegi-Security</a> for Spring is a popular open source choice for implementing a robust security solution.  It can be a daunting task to get up and running with it quickly.  The recommended steps from the website say that you need to spend about a week learning it before you can use it.  Well, in my position, I just don&#8217;t have that kind of time.  Having said that, the time required to learn could be trimmed down significantly if there was adequate documentation (more than just the reference guide) and some more detailed examples.  My goal here is to give those who chose to use Acegi a jump-start.</p>
<p>Please read the <a href="http://reverttoconsole.com/wiki/index.php?title=Acegi_Security_Quickstart">Acegi Security Quickstart</a> article on the <a href="http://www.reverttoconsole.com/wiki">wiki</a> if you wish to spare yourself some pain.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Feasy-acegi%2F&amp;title=Easy+Acegi" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Feasy-acegi%2F&amp;title=Easy+Acegi" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Feasy-acegi%2F&amp;title=Easy+Acegi" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Feasy-acegi%2F&amp;title=Easy+Acegi" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Feasy-acegi%2F&amp;title=Easy+Acegi', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Feasy-acegi%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Feasy-acegi%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Feasy-acegi%2F&amp;title=Easy+Acegi" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fsecurity%2Feasy-acegi%2F&amp;title=Easy+Acegi" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/security/easy-acegi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

