blob: 991de81cb1528e96b2df4fc42d377829c9aee70a [file] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
Jackrabbit Oak - Exercise
=======================================================
Oak module providing exercises for developers who wish to become familiar with
the Oak code base and understand the design principals and implementation
details.
NOTE: This module is not suited as reference for 'best-practises' for JCR
and Jackrabbit API consumers. Instead it often uses low-level implementation
access to illustrate a particular pattern or detail.
Mandatory Preparation
---------------------
Apart from the exercise code, you need have to following source packges
installed
Please make sure you have the following source code on your computer and setup in your preferred IDE
- Oak (http://svn.apache.org/repos/asf/jackrabbit/oak/trunk/, https://github.com/apache/jackrabbit-oak)
- JCR 2.0 (https://svn.java.net/svn/jsr-283~svn/trunk/src/)
- Jackrabbit API (http://svn.apache.org/repos/asf/jackrabbit/trunk/jackrabbit-api/, https://github.com/apache/jackrabbit)
- Jackrabbit Commons (http://svn.apache.org/repos/asf/jackrabbit/trunk/jackrabbit-jcr-commons/, https://github.com/apache/jackrabbit)
Recommended Reading
-------------------
As preparation of the introduction it is recommended to take a look at security related sections of the JSR283 and to make yourself familiar with the security related areas of the API as well with the extensions defined in Apache Jackrabbit.
JSR 283 : Content Repository for Java Technology API Specification v2.0
The following sections of the specification deal with security in particular with authentication and authorization.
- 4.2 Login (https://s.apache.org/jcr-2.0-spec/4_Connecting.html#4.2%20Login)
- 4.3 Impersonate (https://s.apache.org/jcr-2.0-spec/4_Connecting.html#4.3%20Impersonate)
- 4.4.1 User (https://s.apache.org/jcr-2.0-spec/4_Connecting.html#4.4.1%20User)
- 9 Permissions and Capabilities (https://s.apache.org/jcr-2.0-spec/9_Permissions_and_Capabilities.html)
- 16 Access Control Management (https://s.apache.org/jcr-2.0-spec/16_Access_Control_Management.html)
You can also find the correspoding parts of the API documentation:
- Login and Impersonation
https://s.apache.org/jcr-2.0-javadoc/javax/jcr/Repository.html#login%28javax.jcr.Credentials,%20java.lang.String%29
https://s.apache.org/jcr-2.0-javadoc/javax/jcr/Session.html#impersonate%28javax.jcr.Credentials%29
- Credentials
https://s.apache.org/jcr-2.0-javadoc/javax/jcr/Credentials.html
https://s.apache.org/jcr-2.0-javadoc/javax/jcr/GuestCredentials.html
https://s.apache.org/jcr-2.0-javadoc/javax/jcr/SimpleCredentials.html
- Permission Discovery and JCR Action Constants
https://s.apache.org/jcr-2.0-javadoc/javax/jcr/Session.html
https://s.apache.org/jcr-2.0-javadoc/javax/jcr/Session.html#hasPermission%28java.lang.String,%20java.lang.String%29
https://s.apache.org/jcr-2.0-javadoc/javax/jcr/Session.html#checkPermission%28java.lang.String,%20java.lang.String%29
- Access Control Management
https://s.apache.org/jcr-2.0-javadoc/javax/jcr/security/package-summary.html
#### Apache Jackrabbit : API Extensions for JSR 283
The JavaDoc for the latest Jackrabbit API (2.10) can be found at http://jackrabbit.apache.org/api/2.10/
- Authentication (TokenCredentials)
http://jackrabbit.apache.org/api/2.10/org/apache/jackrabbit/api/security/authentication/token/TokenCredentials.html
- Access Control Management
http://jackrabbit.apache.org/api/2.10/org/apache/jackrabbit/api/security/package-summary.html
- Privilege Management
http://jackrabbit.apache.org/api/2.10/org/apache/jackrabbit/api/security/authorization/PrivilegeManager.html
- Principal Management
http://jackrabbit.apache.org/api/2.10/org/apache/jackrabbit/api/security/principal/package-summary.html
- User Management
http://jackrabbit.apache.org/api/2.10/org/apache/jackrabbit/api/security/user/package-summary.html
#### Oak Documentation
There exists some documentation about Oak Security at http://jackrabbit.apache.org/oak/docs/security/overview.html. That should cover everything that is being looked at during that introduction.
Further References
Java Authentication and Authorization Service (JAAS)
Note that we only make use of the Authentication part of JAAS. Nevertheless the following documents might be useful to consult when you are dealing with authentication.
- Reference Guide
http://docs.oracle.com/javase/7/docs/technotes/guides/security/jaas/JAASRefGuide.html
- Develop a LoginModule
http://docs.oracle.com/javase/7/docs/technotes/guides/security/jaas/JAASLMDevGuide.html
#### Java API References
The following API references to some authentication related classes that we keep referring to when talking about security in the repository
General Security
- Principal (http://docs.oracle.com/javase/7/docs/api/java/security/Principal.html)
- Group (http://docs.oracle.com/javase/7/docs/api/java/security/acl/Group.html)
#### Authentication
- LoginContext (http://docs.oracle.com/javase/7/docs/api/javax/security/auth/login/LoginContext.html )
- LoginModule (http://docs.oracle.com/javase/7/docs/api/javax/security/auth/spi/LoginModule.html)
- Configuration (http://docs.oracle.com/javase/7/docs/api/javax/security/auth/login/Configuration.html)
- Subject (http://docs.oracle.com/javase/7/docs/api/javax/security/auth/Subject.html)
Using the Exercise Module
-------------------------
The exercise module consists of training material in the form of test-cases that are to be 'fixed' based on the
instructions in the description and the test-method (EXERCISE comments).
In addition the module comes with examples for customizations and extensions that can be adjusted and plugged
into an test repository for advanced learners.
How to Verify your Solutions
----------------------------
The instructions and the EXERCISE comments indicate how the tests need to be adjusted.
Run the tests in your IDE and verify that they pass to check if your solution is correct.
NOTE: The module by default skips test execution. Enable test verification if you intend to verify your solutions with
'mvn clean install'.