Domain object instance security: In many applications
it's desirable to define Access Control Lists (ACLs) for individual
domain object instances. We provide a comprehensive ACL package with
features including integer bit masking, permission inheritance
(including blocking), an optimized JDBC-backed ACL repository, caching
and a pluggable, interface-driven design.
OpenID Support: the web's emerging single sign-on standard
(supported by Google, IBM, Sun, Yahoo and others) is also supported in Spring
Security
Easy integration with existing databases: Our implementations
have been designed to make it easy to use your existing authentication schema
and data (without modification). Of course, you can also provide your own Data
Access Object if you wish.
Password encoding: Of course, passwords in your authentication
repository need not be in plain text. We support both SHA and MD5 encoding, and
also pluggable "salt" providers to maximise password security.
Caching: Spring Security optionally integrates with Spring's Ehcache factory. This flexibility
means your database (or other authentication repository) is not repeatedly queried
for authentication information when using Spring Security with stateless
applications.
Run-as replacement: The system fully supports temporarily
replacing the authenticated principal for the duration of the web request or
bean invocation. This enables you to build public-facing object tiers with
different security configurations than your backend objects.
Tag library support: Your JSP files can use our taglib to ensure
that protected content like links and messages are only displayed to users
holding the appropriate granted authorities. The taglib also fully integrates
with Spring Security's ACL services, and obtaining extra information about the
logged-in principal.
User Provisioning APIs: Support for groups, hierarchical roles
and a user management API, which all combine to reduce development time and
significantly improve system administration.
Enterprise-wide single sign on using CAS 3: Spring Security
integrates with JA-SIG's open source Central Authentication
Service (CAS)
In any access control model, the entities that can perform actions in the system are called subjects, and the entities representing resources to which access may need to be controlled are called objects
object-capability model, any software entity can potentially act as both a subject and object
Access control models used by current systems tend to fall into one of two classes:
those based on capabilities
those based on access control lists (ACLs)
Both capability-based and ACL-based models have mechanisms to allow access rights to be granted to all members of a group of subjects (often the group is itself modeled as a subject)
identification and authentication determine who can log on to a system, and the association of users with the software subjects that they are able to control as a result of logging in;
authorization determines what a subject can do;
accountability identifies what a subject (or all subjects associated with a user) did.
Authorization determines what a subject can do on the system
Authorization
Access control models
categorized as either discretionary or non-discretionary
three most widely recognized models are
Discretionary Access Control (DAC)
Mandatory Access Control (MAC)
Role Based Access Control (RBAC)
Attribute-based access control
Discretionary access control
Discretionary access control (DAC) is a policy determined by the owner of an object. The owner decides who is allowed to access the object and what privileges they have.
Every object in the system has an owner
access policy for an object is determined by its owner
DAC systems, each object's initial owner is the subject that caused it to be created
Mandatory access control
Mandatory access control refers to allowing access to a resource
if and only if rules exist
that allow a given user to access the resource
Management is often simplified (over what can be required) if the information can be protected using
hierarchical access control
or by implementing sensitivity labels.
Sensitivity labels
A subject's sensitivity label specifies its
level of trust
level of trust required for access
subject must have a sensitivity level equal to or higher than the requested object
If your application's authentication process is username/password based
(like most), instead of implementing this interface yourself, take a look at the
UsernamePasswordToken class, as it is probably sufficient for your needs.
"If your application's authentication process is username/password based (like most), instead of implementing this interface yourself, take a look at the UsernamePasswordToken class, as it is probably sufficient for your need"
A Realm is a security component that can access application-specific security entities
such as users, roles, and permissions to determine authentication and authorization operations
security-specific
DAOs
If for some reason you don't want your Realm implementation to perform authentication
duties, you should override the supports(org.apache.shiro.authc.AuthenticationToken) method to always
return false
does not require you to implement or extend any User, Group or Role
interfaces or classes
Shiro tries to maintain a non-intrusive development philosophy
Most users will not implement the Realm interface directly, but will extend one of the subclasses,
AuthenticatingRealm or AuthorizingRealm, greatly reducing the effort requird
to implement a Realm from scratch
even if you deploy your application in a Servlet or EJB container, there are still compelling reasons to use Shiro's Session support instead of the container's
Realm that allows authentication and authorization via JDBC calls
this class can be subclassed and the
appropriate methods overridden. (usually doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken),
getRoleNamesForUser(java.sql.Connection,String), and/or getPermissions(java.sql.Connection,String,java.util.Collection)
always have to include this library in either
WEB-INF/lib
support for CDI is included in the library granite-cdi.jar
10.1. Configuration with Servlet 3
On Servlet 3 compliant containers, GraniteDS can use the new APIs to automatically register its own servlets and filters and thus does not need any
particular configuration in web.xml. This automatic setup is triggered when GraniteDS finds a class annotated with
@FlexFilter in one of the application archives:
@FlexFilter declaration will setup an AMF processor for the specified url pattern
tideAnnotations
defines suitable default values
@TideEnabled
@RemoteDestination
always declared by default
tideInterfaces
tideRoles
exceptionConverters
amf3MessageInterceptor
10.3.2. Typesafe Remoting with Dependency Injection
It is possible to benefit from even more type safety by using the annotation [Inject] instead of In.
When using this annotation, the full class name is used to find the target bean in the CDI context instead of the bean name.
Security
integration between the client RemoteObject
credentials and the server-side container security
client-side component named
identity
API to define runtime authorization checks on the Flex UI