More documentation updates.
This commit is contained in:
@@ -29,8 +29,105 @@
|
||||
<body>
|
||||
<h1>Frequently Asked Questions</h1>
|
||||
|
||||
<h2>What is Acegi Security?</h2>
|
||||
<p>Acegi Security is an open source project that provide comprehensive authentication
|
||||
and authorisation services for enterprise applications based on
|
||||
<a href="http://www.springframework.org">The Spring Framework</a>.
|
||||
Acegi Security can authenticate using a variety of pluggable providers, and
|
||||
can authorise both web requests and method invocations.
|
||||
Acegi Security provides an integrated security approach across
|
||||
these various targets, and also offers access control list (ACL) capabilities to
|
||||
enable individual domain object instances to be secured. At an implementation
|
||||
level, Acegi Security is managed through Spring's inversion of control and
|
||||
lifecycle services, and actually enforces security using interception through
|
||||
servlet Filters and Java AOP frameworks. In terms of AOP framework support, Acegi
|
||||
Security currently supports AOP Alliance (which is what the
|
||||
Spring IoC container uses internally) and AspectJ, although additional frameworks
|
||||
can be easily supported.</p>
|
||||
|
||||
<h2>Why not just use web.xml security?</h2>
|
||||
<p>Let's assuming you're developing an enterprise application based on Spring.
|
||||
There are four security concerns you typically need to address: authentication,
|
||||
web request security, service layer security (ie your methods that implement
|
||||
business logic), and domain object instance security (ie different domain objects
|
||||
have different permissions). With these typical requirements in mind:
|
||||
<ol>
|
||||
<li><b>Authentication</b>: The servlet specification provides an approach
|
||||
to authentication. However, you will need to configure the container
|
||||
to perform authentication which typically requires editing of
|
||||
container-specific "realm" settings. This makes a non-portable
|
||||
configuration, and if you need to write an actual Java class to implement
|
||||
the container's authentication interface, it becomes even more non-portable.
|
||||
With Acegi Security you achieve complete portability - right down to the
|
||||
WAR level. Also, Acegi Security offers a choice of production-proven
|
||||
authentication providers and mechanisms, meaning you can switch your
|
||||
authentication approaches at deployment time. This is particularly
|
||||
valuable for software vendors writing products that need to work in
|
||||
an unknown target environment.<br><br></li>
|
||||
<li><b>Web request security:</b> The servlet specification provides an
|
||||
approach to secure your request URIs. However, these URIs can only be
|
||||
expressed in the servlet specification's own limited URI path format.
|
||||
Acegi Security provides a far more comprehensive approach. For instance,
|
||||
you can use Ant paths or regular expressions, you can consider parts of the
|
||||
URI other than simply the requested page (eg you can consider request
|
||||
parameters), and you can implement your own runtime source of configuration
|
||||
data. This means your web request security can be dynamically changed during
|
||||
the actual execution of your webapp.<br><br></li>
|
||||
<li><b>Service layer and domain object security:</b> The absence of support
|
||||
in the servlet specification for services layer security or domain object
|
||||
instance security represent serious limitations for multi-tiered
|
||||
applications. Typically developers either ignore these requirements, or
|
||||
implement security logic within their MVC controller code (or even worse,
|
||||
inside the views). There are serious disadvantages with this approach:<br><br>
|
||||
<ol>
|
||||
<li><i>Separation of concerns:</i> Authorization is a
|
||||
crosscutting concern and should be implemented as such.
|
||||
MVC controllers or views implementing authorization code
|
||||
makes it more difficult to test both the controller and
|
||||
authorization logic, more difficult to debug, and will
|
||||
often lead to code duplication.</li>
|
||||
<li><i>Support for rich clients and web services:</i> If an
|
||||
additional client type must ultimately be supported, any
|
||||
authorization code embedded within the web layer is
|
||||
non-reusable. It should be considered that Spring remoting
|
||||
exporters only export service layer beans (not MVC
|
||||
controllers). As such authorization logic needs to be
|
||||
located in the services layer to support a multitude of
|
||||
client types.</li>
|
||||
<li><i>Layering issues:</i> An MVC controller or view is simply
|
||||
the incorrect architectural layer to implement authorization
|
||||
decisions concerning services layer methods or domain object
|
||||
instances. Whilst the Principal may be passed to the services
|
||||
layer to enable it to make the authorization decision, doing
|
||||
so would introduce an additional argument on every services
|
||||
layer method. A more elegant approach is to use a ThreadLocal
|
||||
to hold the Principal, although this would likely increase
|
||||
development time to a point where it would become more e
|
||||
conomical (on a cost-benefit basis) to simply use a dedicated
|
||||
security framework.</li>
|
||||
<li><i>Authorisation code quality:</i> It is often said of web
|
||||
frameworks that they "make it easier to do the right things,
|
||||
and harder to do the wrong things". Security frameworks are
|
||||
the same, because they are designed in an abstract manner for
|
||||
a wide range of purposes. Writing your own authorization code
|
||||
from scratch does not provide the "design check" a framework
|
||||
would offer, and in-house authorization code will typically
|
||||
lack the improvements that emerge from widespread deployment,
|
||||
peer review and new versions.
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
For simple applications, servlet specification may just be enough.
|
||||
Although when considered within the context of web container portability,
|
||||
configuration requirements, limited web request security flexibility, and
|
||||
non-existent services layer and domain object instance security, it becomes
|
||||
clear why developers often look to alternative solutions.
|
||||
</p>
|
||||
|
||||
<h2>How do you pronounce "Acegi"?</h2>
|
||||
<p><i>Ah-see-gee</i>. Said quickly, without emphasis on any part.</p>
|
||||
<p><i>Ah-see-gee</i>. Said quickly, without emphasis on any part.
|
||||
Acegi isn't an acronym, name of a Greek God or anything similarly
|
||||
impressive - it's just letters #1, #3, #5, #7 and #9 of the alphabet.</p>
|
||||
|
||||
<h2>Is it called "Acegi" or "Acegi Security"?</h2>
|
||||
<p>It's official name is <i>Acegi Security System for Spring</i>,
|
||||
@@ -39,7 +136,7 @@
|
||||
as that gets confused with the name of the company that maintains Acegi
|
||||
Security.</p>
|
||||
|
||||
<h2>Why catches 80% of users reporting problems?</h2>
|
||||
<h2>What catches 80% of users reporting problems?</h2>
|
||||
<p>80% of support questions are because people have not defined
|
||||
the necessary filters in <code>web.xml</code>, or the filters are being
|
||||
mapped in the incorrect order. Check the
|
||||
@@ -55,11 +152,6 @@
|
||||
<code>UserDetails</code> object generated by your <code>AuthenticationDao</code>
|
||||
to the log and check it looks correct.</p>
|
||||
|
||||
<h2>How do I store custom properties, like a user's email address?</h2>
|
||||
<p>In most cases write an <code>AuthenticationDao</code> which returns
|
||||
a subclass of <code>User</code>. Alternatively, write your own
|
||||
<code>UserDetails</code> implementation from scratch and return that.</p>
|
||||
|
||||
<h2>I need some help. What files should I post?</h2>
|
||||
<p>The most important things to post with any support requests on the
|
||||
<a href="http://forum.springframework.org">Spring Forums</a> are your
|
||||
@@ -82,6 +174,11 @@
|
||||
|
||||
log4j.category.net.sf.acegisecurity=DEBUG</pre>
|
||||
|
||||
<h2>How do I store custom properties, like a user's email address?</h2>
|
||||
<p>In most cases write an <code>AuthenticationDao</code> which returns
|
||||
a subclass of <code>User</code>. Alternatively, write your own
|
||||
<code>UserDetails</code> implementation from scratch and return that.</p>
|
||||
|
||||
<h2>Why doesn't Acegi Security use JAAS?</h2>
|
||||
<p>Acegi Security targets <i>enterprise applications</i>, which are typically
|
||||
multi-user, data-oriented applications that are important to
|
||||
|
||||
Reference in New Issue
Block a user