This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/tomee-site-pub.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 02cb6e0 [site-publish] source tomee-site-generator
https://github.com/apache/tomee-site-generator
https://ci-builds.apache.org/job/Tomee/job/site-publish
02cb6e0 is described below
commit 02cb6e02dc43f1a565e461211af88b9ba353df46
Author: jenkins <[email protected]>
AuthorDate: Thu Jun 24 16:08:07 2021 +0000
[site-publish] source tomee-site-generator
https://github.com/apache/tomee-site-generator
https://ci-builds.apache.org/job/Tomee/job/site-publish
---
.../javax/annotation/security/DeclareRoles.html | 2 +-
.../BasicAuthenticationMechanismDefinition.html | 2 +-
.../security/enterprise/credential/Credential.html | 4 +
.../credential/UsernamePasswordCredential.html | 4 +
.../identitystore/CredentialValidationResult.html | 2 +
.../enterprise/identitystore/IdentityStore.html | 4 +
.../javadoc/javax/servlet/ServletException.html | 2 +-
.../javax/servlet/annotation/HttpConstraint.html | 2 +
.../javax/servlet/annotation/ServletSecurity.html | 2 +
.../javax/servlet/annotation/WebServlet.html | 2 +-
.../javadoc/javax/servlet/http/HttpServlet.html | 2 +-
.../javax/servlet/http/HttpServletRequest.html | 2 +-
.../javax/servlet/http/HttpServletResponse.html | 2 +-
.../jakarta/annotation/security/DeclareRoles.html | 2 +-
.../BasicAuthenticationMechanismDefinition.html | 2 +-
.../security/enterprise/credential/Credential.html | 4 +
.../credential/UsernamePasswordCredential.html | 4 +
.../identitystore/CredentialValidationResult.html | 2 +
.../enterprise/identitystore/IdentityStore.html | 4 +
.../javadoc/jakarta/servlet/ServletException.html | 2 +-
.../jakarta/servlet/annotation/HttpConstraint.html | 2 +
.../servlet/annotation/ServletSecurity.html | 2 +
.../jakarta/servlet/annotation/WebServlet.html | 2 +-
.../javadoc/jakarta/servlet/http/HttpServlet.html | 2 +-
.../jakarta/servlet/http/HttpServletRequest.html | 2 +-
.../jakarta/servlet/http/HttpServletResponse.html | 2 +-
latest/examples/index.html | 17 +-
latest/examples/security-custom-identitystore.html | 389 +++++++++++++++++++
.../org/apache/tomee/bootstrap/Archive.html | 2 +-
.../javadoc/org/apache/tomee/bootstrap/Server.html | 2 +-
master/examples/index.html | 17 +-
master/examples/security-custom-identitystore.html | 428 +++++++++++++++++++++
.../org/apache/tomee/bootstrap/Archive.html | 2 +-
.../javadoc/org/apache/tomee/bootstrap/Server.html | 2 +-
tomee-8.0/examples/index.html | 17 +-
.../examples/security-custom-identitystore.html | 428 +++++++++++++++++++++
.../org/apache/tomee/bootstrap/Archive.html | 2 +-
.../javadoc/org/apache/tomee/bootstrap/Server.html | 2 +-
tomee-9.0/examples/index.html | 17 +-
.../examples/security-custom-identitystore.html | 428 +++++++++++++++++++++
.../org/apache/tomee/bootstrap/Archive.html | 2 +-
.../javadoc/org/apache/tomee/bootstrap/Server.html | 2 +-
42 files changed, 1767 insertions(+), 54 deletions(-)
diff --git a/jakartaee-8.0/javadoc/javax/annotation/security/DeclareRoles.html
b/jakartaee-8.0/javadoc/javax/annotation/security/DeclareRoles.html
index ae62dd6..ff8864f 100644
--- a/jakartaee-8.0/javadoc/javax/annotation/security/DeclareRoles.html
+++ b/jakartaee-8.0/javadoc/javax/annotation/security/DeclareRoles.html
@@ -103,7 +103,7 @@ public @interface <span
class="memberNameLabel">DeclareRoles</span></pre>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>Common Annotations 1.0</dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-8.0/examples/webservice-ws-security.html">webservice-ws-security</a>,
<a
href="../../../../../../tomee-8.0/examples/webservice-ssl-client-cert.html">webservice-ssl-client-cert</a>,
<a
href="../../../../../../tomee-8.0/examples/webservice-security.html">webservice-security</a>,
<a
href="../../../../../../tomee-8.0/examples/security-tomcat-user-identitystore.html">security-tomcat-user-identitystore</a>,
<a href="../../../../../../tomee-8.0/examples/ejb- [...]
+<dd><a
href="../../../../../../tomee-8.0/examples/webservice-ws-security.html">webservice-ws-security</a>,
<a
href="../../../../../../tomee-8.0/examples/webservice-ssl-client-cert.html">webservice-ssl-client-cert</a>,
<a
href="../../../../../../tomee-8.0/examples/webservice-security.html">webservice-security</a>,
<a
href="../../../../../../tomee-8.0/examples/security-tomcat-user-identitystore.html">security-tomcat-user-identitystore</a>,
<a href="../../../../../../tomee-8.0/examples/secu [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../tomee-8.0/pt/examples/webservice-ssl-client-cert.html">webservice-ssl-client-cert</a></dd>
</dl>
diff --git
a/jakartaee-8.0/javadoc/javax/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html
b/jakartaee-8.0/javadoc/javax/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html
index ec0332e..f4008cb 100644
---
a/jakartaee-8.0/javadoc/javax/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html
+++
b/jakartaee-8.0/javadoc/javax/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html
@@ -100,7 +100,7 @@ public @interface <span
class="memberNameLabel">BasicAuthenticationMechanismDefi
and make that implementation available as an enabled CDI bean.</div>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../../../tomee-8.0/examples/security-tomcat-user-identitystore.html">security-tomcat-user-identitystore</a></dd>
+<dd><a
href="../../../../../../../../../tomee-8.0/examples/security-tomcat-user-identitystore.html">security-tomcat-user-identitystore</a>,
<a
href="../../../../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
</dl>
</li>
</ul>
diff --git
a/jakartaee-8.0/javadoc/javax/security/enterprise/credential/Credential.html
b/jakartaee-8.0/javadoc/javax/security/enterprise/credential/Credential.html
index 7bebaff..43322ac 100644
--- a/jakartaee-8.0/javadoc/javax/security/enterprise/credential/Credential.html
+++ b/jakartaee-8.0/javadoc/javax/security/enterprise/credential/Credential.html
@@ -106,6 +106,10 @@ var activeTableTab = "activeTableTab";
<br>
<pre>public interface <span class="typeNameLabel">Credential</span></pre>
<div class="block"><code>Credential</code> represents the credential the
caller will use to authenticate.</div>
+<dl>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
+</dl>
</li>
</ul>
</div>
diff --git
a/jakartaee-8.0/javadoc/javax/security/enterprise/credential/UsernamePasswordCredential.html
b/jakartaee-8.0/javadoc/javax/security/enterprise/credential/UsernamePasswordCredential.html
index 1c7a939..b1137ad 100644
---
a/jakartaee-8.0/javadoc/javax/security/enterprise/credential/UsernamePasswordCredential.html
+++
b/jakartaee-8.0/javadoc/javax/security/enterprise/credential/UsernamePasswordCredential.html
@@ -124,6 +124,10 @@ var activeTableTab = "activeTableTab";
<pre>public class <span class="typeNameLabel">UsernamePasswordCredential</span>
extends <a
href="../../../../javax/security/enterprise/credential/AbstractClearableCredential.html"
title="class in
javax.security.enterprise.credential">AbstractClearableCredential</a></pre>
<div class="block">Represents the credentials typically used by standard
caller name/password authentication.</div>
+<dl>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
+</dl>
</li>
</ul>
</div>
diff --git
a/jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/CredentialValidationResult.html
b/jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/CredentialValidationResult.html
index 6d7f518..f59a918 100644
---
a/jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/CredentialValidationResult.html
+++
b/jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/CredentialValidationResult.html
@@ -115,6 +115,8 @@ extends java.lang.Object</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a
href="../../../../javax/security/enterprise/identitystore/IdentityStore.html#validate-javax.security.enterprise.credential.Credential-"><code>IdentityStore.validate(javax.security.enterprise.credential.Credential)</code></a></dd>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
</dl>
</li>
</ul>
diff --git
a/jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/IdentityStore.html
b/jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/IdentityStore.html
index f5ab9c7..c5ad704 100644
---
a/jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/IdentityStore.html
+++
b/jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/IdentityStore.html
@@ -110,6 +110,10 @@ var activeTableTab = "activeTableTab";
<p>
An <code>IdentityStore</code> obtains identity data from a persistent store,
such as a database, LDAP server, or file.</div>
+<dl>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
+</dl>
</li>
</ul>
</div>
diff --git a/jakartaee-8.0/javadoc/javax/servlet/ServletException.html
b/jakartaee-8.0/javadoc/javax/servlet/ServletException.html
index 21b0b63..1f0e4cd 100644
--- a/jakartaee-8.0/javadoc/javax/servlet/ServletException.html
+++ b/jakartaee-8.0/javadoc/javax/servlet/ServletException.html
@@ -134,7 +134,7 @@ extends java.lang.Exception</pre>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a
href="../../serialized-form.html#javax.servlet.ServletException">Serialized
Form</a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a
href="../../../../../tomee-8.0/examples/polling-parent.html">polling-parent</a>,
<a href="../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../tomee-8.0/examples/ejb-examples.html">ejb-examples</a>, <a
href="../../../../../tomee-8.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a href="../../../../../tomee-8.0/examples/cdi-rea [...]
+<dd><a
href="../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a
href="../../../../../tomee-8.0/examples/polling-parent.html">polling-parent</a>,
<a href="../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../tomee-8.0/examples/ejb-examples.html">ejb-examples</a>, <a
href="../../../../../to [...]
<dt><span class="simpleTagLabel">Examples (es):</span></dt>
<dd><a
href="../../../../../tomee-8.0/es/examples/polling-parent.html">polling-parent</a></dd>
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
diff --git a/jakartaee-8.0/javadoc/javax/servlet/annotation/HttpConstraint.html
b/jakartaee-8.0/javadoc/javax/servlet/annotation/HttpConstraint.html
index 56b03be..8990b79 100644
--- a/jakartaee-8.0/javadoc/javax/servlet/annotation/HttpConstraint.html
+++ b/jakartaee-8.0/javadoc/javax/servlet/annotation/HttpConstraint.html
@@ -112,6 +112,8 @@ public @interface <span
class="memberNameLabel">HttpConstraint</span></pre>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>Servlet 3.0</dd>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
</dl>
</li>
</ul>
diff --git
a/jakartaee-8.0/javadoc/javax/servlet/annotation/ServletSecurity.html
b/jakartaee-8.0/javadoc/javax/servlet/annotation/ServletSecurity.html
index dc576ee..c73d10d 100644
--- a/jakartaee-8.0/javadoc/javax/servlet/annotation/ServletSecurity.html
+++ b/jakartaee-8.0/javadoc/javax/servlet/annotation/ServletSecurity.html
@@ -104,6 +104,8 @@ public @interface <span
class="memberNameLabel">ServletSecurity</span></pre>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>Servlet 3.0</dd>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
</dl>
</li>
</ul>
diff --git a/jakartaee-8.0/javadoc/javax/servlet/annotation/WebServlet.html
b/jakartaee-8.0/javadoc/javax/servlet/annotation/WebServlet.html
index a40e5ba..f2083e6 100644
--- a/jakartaee-8.0/javadoc/javax/servlet/annotation/WebServlet.html
+++ b/jakartaee-8.0/javadoc/javax/servlet/annotation/WebServlet.html
@@ -107,7 +107,7 @@ public @interface <span
class="memberNameLabel">WebServlet</span></pre>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../javax/servlet/Servlet.html" title="interface in
javax.servlet"><code>Servlet</code></a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-8.0/examples/vaadin-lts-v08-simple.html">vaadin-lts-v08-simple</a>,
<a
href="../../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-8.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a href="../../../../../../tomee-8.0/examples/cdi-realm.html">cdi-realm</a>,
<a href="../../../../../../ [...]
+<dd><a
href="../../../../../../tomee-8.0/examples/vaadin-lts-v08-simple.html">vaadin-lts-v08-simple</a>,
<a
href="../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-8.0/examples/cdi-session-scope.html">cdi-sessio
[...]
<dt><span class="simpleTagLabel">Examples (es):</span></dt>
<dd><a
href="../../../../../../tomee-8.0/es/examples/vaadin-lts-v08-simple.html">vaadin-lts-v08-simple</a></dd>
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
diff --git a/jakartaee-8.0/javadoc/javax/servlet/http/HttpServlet.html
b/jakartaee-8.0/javadoc/javax/servlet/http/HttpServlet.html
index e26bf7c..7e575d5 100644
--- a/jakartaee-8.0/javadoc/javax/servlet/http/HttpServlet.html
+++ b/jakartaee-8.0/javadoc/javax/servlet/http/HttpServlet.html
@@ -159,7 +159,7 @@ extends <a
href="../../../javax/servlet/GenericServlet.html" title="class in jav
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a
href="../../../serialized-form.html#javax.servlet.http.HttpServlet">Serialized
Form</a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-8.0/examples/ejb-examples.html">ejb-examples</a>,
<a
href="../../../../../../tomee-8.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a href="../../../../../../tomee-8.0/examples/cdi-realm.html">cdi-realm</a>,
<a href="../../../../../../tomee-8.0/examples [...]
+<dd><a
href="../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-8.0/examples/ejb-examples.html">ejb-examples</a>,
<a
href="../../../../../../tomee-8.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a hr [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../tomee-8.0/pt/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a
href="../../../../../../tomee-8.0/pt/examples/cdi-realm.html">cdi-realm</a>, <a
href="../../../../../../tomee-8.0/pt/examples/async-servlet.html">async-servlet</a></dd>
</dl>
diff --git a/jakartaee-8.0/javadoc/javax/servlet/http/HttpServletRequest.html
b/jakartaee-8.0/javadoc/javax/servlet/http/HttpServletRequest.html
index 63ea32c..3961c15 100644
--- a/jakartaee-8.0/javadoc/javax/servlet/http/HttpServletRequest.html
+++ b/jakartaee-8.0/javadoc/javax/servlet/http/HttpServletRequest.html
@@ -118,7 +118,7 @@ extends <a
href="../../../javax/servlet/ServletRequest.html" title="interface in
methods (<code>doGet</code>, <code>doPost</code>, etc).</div>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-8.0/examples/tomee-jms-portability.html">tomee-jms-portability</a>,
<a
href="../../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-8.0/examples/jaxrs-filter.html">jaxrs-filter</a>,
<a
href="../../../../../../tomee-8.0/examples/ejb-examples.html">ejb-examples</a>,
<a href="../../../../../../tome [...]
+<dd><a
href="../../../../../../tomee-8.0/examples/tomee-jms-portability.html">tomee-jms-portability</a>,
<a
href="../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-8.0/examples/jaxrs-filter.html">jaxrs-filter</a
[...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../tomee-8.0/pt/examples/tomee-jms-portability.html">tomee-jms-portability</a>,
<a
href="../../../../../../tomee-8.0/pt/examples/jaxrs-filter.html">jaxrs-filter</a>,
<a
href="../../../../../../tomee-8.0/pt/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a
href="../../../../../../tomee-8.0/pt/examples/cdi-realm.html">cdi-realm</a>, <a
href="../../../../../../tomee-8.0/pt/examples/async-servlet.html">async-servlet</a></dd>
</dl>
diff --git a/jakartaee-8.0/javadoc/javax/servlet/http/HttpServletResponse.html
b/jakartaee-8.0/javadoc/javax/servlet/http/HttpServletResponse.html
index f1c5174..964ebbc 100644
--- a/jakartaee-8.0/javadoc/javax/servlet/http/HttpServletResponse.html
+++ b/jakartaee-8.0/javadoc/javax/servlet/http/HttpServletResponse.html
@@ -121,7 +121,7 @@ extends <a
href="../../../javax/servlet/ServletResponse.html" title="interface i
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../javax/servlet/ServletResponse.html" title="interface in
javax.servlet"><code>ServletResponse</code></a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-8.0/examples/ejb-examples.html">ejb-examples</a>,
<a
href="../../../../../../tomee-8.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a href="../../../../../../tomee-8.0/examples/cdi-realm.html">cdi-realm</a>,
<a href="../../../../../../tomee-8.0/examples [...]
+<dd><a
href="../../../../../../tomee-8.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../../tomee-8.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-8.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-8.0/examples/ejb-examples.html">ejb-examples</a>,
<a
href="../../../../../../tomee-8.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a hr [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../tomee-8.0/pt/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a
href="../../../../../../tomee-8.0/pt/examples/cdi-realm.html">cdi-realm</a>, <a
href="../../../../../../tomee-8.0/pt/examples/async-servlet.html">async-servlet</a></dd>
</dl>
diff --git
a/jakartaee-9.0/javadoc/jakarta/annotation/security/DeclareRoles.html
b/jakartaee-9.0/javadoc/jakarta/annotation/security/DeclareRoles.html
index c5d76ce..851bcab 100644
--- a/jakartaee-9.0/javadoc/jakarta/annotation/security/DeclareRoles.html
+++ b/jakartaee-9.0/javadoc/jakarta/annotation/security/DeclareRoles.html
@@ -103,7 +103,7 @@ public @interface <span
class="memberNameLabel">DeclareRoles</span></pre>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>Common Annotations 1.0</dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-9.0/examples/webservice-ws-security.html">webservice-ws-security</a>,
<a
href="../../../../../../tomee-9.0/examples/webservice-ssl-client-cert.html">webservice-ssl-client-cert</a>,
<a
href="../../../../../../tomee-9.0/examples/webservice-security.html">webservice-security</a>,
<a
href="../../../../../../tomee-9.0/examples/security-tomcat-user-identitystore.html">security-tomcat-user-identitystore</a>,
<a href="../../../../../../tomee-9.0/examples/ejb- [...]
+<dd><a
href="../../../../../../tomee-9.0/examples/webservice-ws-security.html">webservice-ws-security</a>,
<a
href="../../../../../../tomee-9.0/examples/webservice-ssl-client-cert.html">webservice-ssl-client-cert</a>,
<a
href="../../../../../../tomee-9.0/examples/webservice-security.html">webservice-security</a>,
<a
href="../../../../../../tomee-9.0/examples/security-tomcat-user-identitystore.html">security-tomcat-user-identitystore</a>,
<a href="../../../../../../tomee-9.0/examples/secu [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../tomee-9.0/pt/examples/webservice-ssl-client-cert.html">webservice-ssl-client-cert</a></dd>
</dl>
diff --git
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html
index fdd68b9..b0f8c0a 100644
---
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html
+++
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html
@@ -100,7 +100,7 @@ public @interface <span
class="memberNameLabel">BasicAuthenticationMechanismDefi
and make that implementation available as an enabled CDI bean.</div>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../../../tomee-9.0/examples/security-tomcat-user-identitystore.html">security-tomcat-user-identitystore</a></dd>
+<dd><a
href="../../../../../../../../../tomee-9.0/examples/security-tomcat-user-identitystore.html">security-tomcat-user-identitystore</a>,
<a
href="../../../../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
</dl>
</li>
</ul>
diff --git
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/Credential.html
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/Credential.html
index d9e33d4..3f5c78b 100644
---
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/Credential.html
+++
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/Credential.html
@@ -106,6 +106,10 @@ var activeTableTab = "activeTableTab";
<br>
<pre>public interface <span class="typeNameLabel">Credential</span></pre>
<div class="block"><code>Credential</code> represents the credential the
caller will use to authenticate.</div>
+<dl>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
+</dl>
</li>
</ul>
</div>
diff --git
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/UsernamePasswordCredential.html
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/UsernamePasswordCredential.html
index 2e293f4..00d4948 100644
---
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/UsernamePasswordCredential.html
+++
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/UsernamePasswordCredential.html
@@ -124,6 +124,10 @@ var activeTableTab = "activeTableTab";
<pre>public class <span class="typeNameLabel">UsernamePasswordCredential</span>
extends <a
href="../../../../jakarta/security/enterprise/credential/AbstractClearableCredential.html"
title="class in
jakarta.security.enterprise.credential">AbstractClearableCredential</a></pre>
<div class="block">Represents the credentials typically used by standard
caller name/password authentication.</div>
+<dl>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
+</dl>
</li>
</ul>
</div>
diff --git
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/CredentialValidationResult.html
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/CredentialValidationResult.html
index 239e2ed..5928286 100644
---
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/CredentialValidationResult.html
+++
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/CredentialValidationResult.html
@@ -115,6 +115,8 @@ extends java.lang.Object</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a
href="../../../../jakarta/security/enterprise/identitystore/IdentityStore.html#validate-jakarta.security.enterprise.credential.Credential-"><code>IdentityStore.validate(jakarta.security.enterprise.credential.Credential)</code></a></dd>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
</dl>
</li>
</ul>
diff --git
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/IdentityStore.html
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/IdentityStore.html
index a996c84..6a6b58a 100644
---
a/jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/IdentityStore.html
+++
b/jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/IdentityStore.html
@@ -110,6 +110,10 @@ var activeTableTab = "activeTableTab";
<p>
An <code>IdentityStore</code> obtains identity data from a persistent store,
such as a database, LDAP server, or file.</div>
+<dl>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
+</dl>
</li>
</ul>
</div>
diff --git a/jakartaee-9.0/javadoc/jakarta/servlet/ServletException.html
b/jakartaee-9.0/javadoc/jakarta/servlet/ServletException.html
index 547d482..a479dd4 100644
--- a/jakartaee-9.0/javadoc/jakarta/servlet/ServletException.html
+++ b/jakartaee-9.0/javadoc/jakarta/servlet/ServletException.html
@@ -133,7 +133,7 @@ extends java.lang.Exception</pre>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a
href="../../serialized-form.html#jakarta.servlet.ServletException">Serialized
Form</a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a
href="../../../../../tomee-9.0/examples/polling-parent.html">polling-parent</a>,
<a href="../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../tomee-9.0/examples/ejb-examples.html">ejb-examples</a>, <a
href="../../../../../tomee-9.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a href="../../../../../tomee-9.0/examples/cdi-rea [...]
+<dd><a
href="../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a
href="../../../../../tomee-9.0/examples/polling-parent.html">polling-parent</a>,
<a href="../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../tomee-9.0/examples/ejb-examples.html">ejb-examples</a>, <a
href="../../../../../to [...]
<dt><span class="simpleTagLabel">Examples (es):</span></dt>
<dd><a
href="../../../../../tomee-9.0/es/examples/polling-parent.html">polling-parent</a></dd>
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
diff --git
a/jakartaee-9.0/javadoc/jakarta/servlet/annotation/HttpConstraint.html
b/jakartaee-9.0/javadoc/jakarta/servlet/annotation/HttpConstraint.html
index 86079aa..55b552d 100644
--- a/jakartaee-9.0/javadoc/jakarta/servlet/annotation/HttpConstraint.html
+++ b/jakartaee-9.0/javadoc/jakarta/servlet/annotation/HttpConstraint.html
@@ -109,6 +109,8 @@ public @interface <span
class="memberNameLabel">HttpConstraint</span></pre>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>Servlet 3.0</dd>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
</dl>
</li>
</ul>
diff --git
a/jakartaee-9.0/javadoc/jakarta/servlet/annotation/ServletSecurity.html
b/jakartaee-9.0/javadoc/jakarta/servlet/annotation/ServletSecurity.html
index 2acf666..38f8570 100644
--- a/jakartaee-9.0/javadoc/jakarta/servlet/annotation/ServletSecurity.html
+++ b/jakartaee-9.0/javadoc/jakarta/servlet/annotation/ServletSecurity.html
@@ -103,6 +103,8 @@ public @interface <span
class="memberNameLabel">ServletSecurity</span></pre>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>Servlet 3.0</dd>
+<dt><span class="simpleTagLabel">Examples (en):</span></dt>
+<dd><a
href="../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a></dd>
</dl>
</li>
</ul>
diff --git a/jakartaee-9.0/javadoc/jakarta/servlet/annotation/WebServlet.html
b/jakartaee-9.0/javadoc/jakarta/servlet/annotation/WebServlet.html
index 66eb33c..1bb5c85 100644
--- a/jakartaee-9.0/javadoc/jakarta/servlet/annotation/WebServlet.html
+++ b/jakartaee-9.0/javadoc/jakarta/servlet/annotation/WebServlet.html
@@ -107,7 +107,7 @@ public @interface <span
class="memberNameLabel">WebServlet</span></pre>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../jakarta/servlet/Servlet.html" title="interface in
jakarta.servlet"><code>Servlet</code></a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-9.0/examples/vaadin-lts-v08-simple.html">vaadin-lts-v08-simple</a>,
<a
href="../../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-9.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a href="../../../../../../tomee-9.0/examples/cdi-realm.html">cdi-realm</a>,
<a href="../../../../../../ [...]
+<dd><a
href="../../../../../../tomee-9.0/examples/vaadin-lts-v08-simple.html">vaadin-lts-v08-simple</a>,
<a
href="../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-9.0/examples/cdi-session-scope.html">cdi-sessio
[...]
<dt><span class="simpleTagLabel">Examples (es):</span></dt>
<dd><a
href="../../../../../../tomee-9.0/es/examples/vaadin-lts-v08-simple.html">vaadin-lts-v08-simple</a></dd>
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
diff --git a/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServlet.html
b/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServlet.html
index 3c7337c..297ad45 100644
--- a/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServlet.html
+++ b/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServlet.html
@@ -149,7 +149,7 @@ extends <a
href="../../../jakarta/servlet/GenericServlet.html" title="class in j
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a
href="../../../serialized-form.html#jakarta.servlet.http.HttpServlet">Serialized
Form</a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-9.0/examples/ejb-examples.html">ejb-examples</a>,
<a
href="../../../../../../tomee-9.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a href="../../../../../../tomee-9.0/examples/cdi-realm.html">cdi-realm</a>,
<a href="../../../../../../tomee-9.0/examples [...]
+<dd><a
href="../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-9.0/examples/ejb-examples.html">ejb-examples</a>,
<a
href="../../../../../../tomee-9.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a hr [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../tomee-9.0/pt/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a
href="../../../../../../tomee-9.0/pt/examples/cdi-realm.html">cdi-realm</a>, <a
href="../../../../../../tomee-9.0/pt/examples/async-servlet.html">async-servlet</a></dd>
</dl>
diff --git a/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletRequest.html
b/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletRequest.html
index af0e730..ef221fc 100644
--- a/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletRequest.html
+++ b/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletRequest.html
@@ -117,7 +117,7 @@ extends <a
href="../../../jakarta/servlet/ServletRequest.html" title="interface
service methods (<code>doGet</code>, <code>doPost</code>, etc).</div>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-9.0/examples/tomee-jms-portability.html">tomee-jms-portability</a>,
<a
href="../../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-9.0/examples/jaxrs-filter.html">jaxrs-filter</a>,
<a
href="../../../../../../tomee-9.0/examples/ejb-examples.html">ejb-examples</a>,
<a href="../../../../../../tome [...]
+<dd><a
href="../../../../../../tomee-9.0/examples/tomee-jms-portability.html">tomee-jms-portability</a>,
<a
href="../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-9.0/examples/jaxrs-filter.html">jaxrs-filter</a
[...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../tomee-9.0/pt/examples/tomee-jms-portability.html">tomee-jms-portability</a>,
<a
href="../../../../../../tomee-9.0/pt/examples/jaxrs-filter.html">jaxrs-filter</a>,
<a
href="../../../../../../tomee-9.0/pt/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a
href="../../../../../../tomee-9.0/pt/examples/cdi-realm.html">cdi-realm</a>, <a
href="../../../../../../tomee-9.0/pt/examples/async-servlet.html">async-servlet</a></dd>
</dl>
diff --git
a/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletResponse.html
b/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletResponse.html
index 798af25..49c91cf 100644
--- a/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletResponse.html
+++ b/jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletResponse.html
@@ -120,7 +120,7 @@ extends <a
href="../../../jakarta/servlet/ServletResponse.html" title="interface
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../jakarta/servlet/ServletResponse.html" title="interface
in jakarta.servlet"><code>ServletResponse</code></a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-9.0/examples/ejb-examples.html">ejb-examples</a>,
<a
href="../../../../../../tomee-9.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a href="../../../../../../tomee-9.0/examples/cdi-realm.html">cdi-realm</a>,
<a href="../../../../../../tomee-9.0/examples [...]
+<dd><a
href="../../../../../../tomee-9.0/examples/security-custom-identitystore.html">security-custom-identitystore</a>,
<a
href="../../../../../../tomee-9.0/examples/resources-declared-in-webapp.html">resources-declared-in-webapp</a>,
<a href="../../../../../../tomee-9.0/examples/moviefun.html">moviefun</a>, <a
href="../../../../../../tomee-9.0/examples/ejb-examples.html">ejb-examples</a>,
<a
href="../../../../../../tomee-9.0/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a hr [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../tomee-9.0/pt/examples/cdi-session-scope.html">cdi-session-scope</a>,
<a
href="../../../../../../tomee-9.0/pt/examples/cdi-realm.html">cdi-realm</a>, <a
href="../../../../../../tomee-9.0/pt/examples/async-servlet.html">async-servlet</a></dd>
</dl>
diff --git a/latest/examples/index.html b/latest/examples/index.html
index ac3a2ed..1630af2 100644
--- a/latest/examples/index.html
+++ b/latest/examples/index.html
@@ -294,12 +294,21 @@
</ul>
</div>
<div class="col-md-4">
+ <div class="group-title">Jakarta Security</div>
+ <ul class="group">
+ <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="security-custom-identitystore.html">Jakarta
Security with a custom identity store</a></li>
+ <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="security-tomcat-user-identitystore.html">Jakarta Security with Tomcat
tomcat-users.xml identity store</a></li>
+ </ul>
+ </div>
+ <div class="col-md-4">
<div class="group-title">JSON-B</div>
<ul class="group">
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="jsonb-configuration.html">JSON-B
Configuration</a></li>
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="jsonb-custom-serializer.html">JSON-B Custom
Serializer</a></li>
</ul>
</div>
+ </div>
+ <div class="row">
<div class="col-md-4">
<div class="group-title">EJB Legacy</div>
<ul class="group">
@@ -307,8 +316,6 @@
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="simple-cmp2.html">EJB 2.1 CMP EntityBeans
(CMP2)</a></li>
</ul>
</div>
- </div>
- <div class="row">
<div class="col-md-4">
<div class="group-title">Servlet</div>
<ul class="group">
@@ -316,12 +323,6 @@
</ul>
</div>
<div class="col-md-4">
- <div class="group-title">Jakarta Security</div>
- <ul class="group">
- <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="security-tomcat-user-identitystore.html">Jakarta Security with Tomcat
tomcat-users.xml identity store</a></li>
- </ul>
- </div>
- <div class="col-md-4">
<div class="group-title">Webservice</div>
<ul class="group">
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="webservice-ws-with-resources-config.html">Webservice JAX-WS - Resources
config</a></li>
diff --git a/latest/examples/security-custom-identitystore.html
b/latest/examples/security-custom-identitystore.html
new file mode 100644
index 0000000..562ccee
--- /dev/null
+++ b/latest/examples/security-custom-identitystore.html
@@ -0,0 +1,389 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Apache TomEE</title>
+ <meta name="description"
+ content="Apache TomEE is a lightweight, yet powerful, JavaEE
Application server with feature rich tooling." />
+ <meta name="keywords"
content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian"
/>
+ <meta name="author" content="Luka Cvetinovic for Codrops" />
+ <link rel="icon" href="../../favicon.ico">
+ <link rel="icon" type="image/png" href="../../favicon.png">
+ <meta name="msapplication-TileColor" content="#80287a">
+ <meta name="theme-color" content="#80287a">
+ <link rel="stylesheet" type="text/css" href="../../css/normalize.css">
+ <link rel="stylesheet" type="text/css" href="../../css/bootstrap.css">
+ <link rel="stylesheet" type="text/css" href="../../css/owl.css">
+ <link rel="stylesheet" type="text/css" href="../../css/animate.css">
+ <link rel="stylesheet" type="text/css"
href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
+ <link rel="stylesheet" type="text/css"
href="../../fonts/eleganticons/et-icons.css">
+ <link rel="stylesheet" type="text/css" href="../../css/jqtree.css">
+ <link rel="stylesheet" type="text/css" href="../../css/idea.css">
+ <link rel="stylesheet" type="text/css" href="../../css/cardio.css">
+
+ <script type="text/javascript">
+
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-2717626-1']);
+ _gaq.push(['_setDomainName', 'apache.org']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type =
'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+
+ </script>
+</head>
+
+<body>
+ <div class="preloader">
+ <img src="../../img/loader.gif" alt="Preloader image">
+ </div>
+ <nav class="navbar">
+ <div class="container">
+ <div class="row"> <div class="col-md-12">
+
+ <!-- Brand and toggle get grouped for better mobile
display -->
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle
collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+ <span class="sr-only">Toggle
navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="/" title="Apache
TomEE">
+ <span>
+
+
+ <img
+
src="../../img/apache_tomee-logo.svg"
+
onerror="this.src='../../img/apache_tomee-logo.jpg'"
+ height="50"
+ >
+
+
+ </span>
+ </a>
+ </div>
+ <!-- Collect the nav links, forms, and other content
for toggling -->
+ <div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
+ <ul class="nav navbar-nav navbar-right
main-nav">
+ <li><a
href="../../docs.html">Documentation</a></li>
+ <li><a
href="../../community/index.html">Community</a></li>
+ <li><a
href="../../security/security.html">Security</a></li>
+ <li><a class="btn btn-accent
accent-orange no-shadow" href="../../download.html">Downloads</a></li>
+ </ul>
+ </div>
+ <!-- /.navbar-collapse -->
+ </div></div>
+ </div>
+ <!-- /.container-fluid -->
+ </nav>
+
+
+ <div id="main-block" class="container main-block">
+ <div class="row title">
+ <div class="col-md-12">
+ <div class='page-header'>
+
+ <h1>Jakarta Security with a custom identity store</h1>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+
+ <div class="col-md-12">
+ <div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>TomEE has its own independent Jakarta Security implementation <a
href="https://eclipse-ee4j.github.io/security-api/"
class="bare">https://eclipse-ee4j.github.io/security-api/</a> .</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Jakarta Security defines a standard for creating secure Jakarta EE
applications in modern application paradigms. It defines an overarching
(end-user targeted) Security API for Jakarta EE Applications.</p>
+</div>
+<div class="paragraph">
+<p>Jakarta Security builds on the lower level Security SPIs defined by Jakarta
Authentication and Jakarta Authorization, which are both not end-end
targeted.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>As the specification requires, TomEE supports by default JDBC and JDAP
identity stores. It also has a default support for Tomcat’s
'tomcat-users.xml' (See security-tomcat-user-identitystore example).</p>
+</div>
+<div class="paragraph">
+<p>This example will show how you can leverage your own identity store to
authenticate users.
+This is very often required for integrating your systems.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_implement_a_simple_servlet">Implement a simple servlet</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This movie servlet, is a very simple example that defines a
BasicAuthenticationMechanism, some roles and security constraints.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-java"
data-lang="java">@WebServlet("/movies")
+@DeclareRoles({"foo","bar","kaz"})
+@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
+@BasicAuthenticationMechanismDefinition
+public class MovieServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void doGet(final HttpServletRequest request, final
HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String webName = null;
+ if (request.getUserPrincipal() != null) {
+ webName = request.getUserPrincipal().getName();
+ }
+
+ response.getWriter().write(
+ "<html><body> Welcome to Movie servlet
<br><br>\n" +
+
+ "web username: " + webName + "<br><br>\n" +
+
+ "web user has role \"foo\": " + request.isUserInRole("foo") +
"<br>\n" +
+ "web user has role \"bar\": " + request.isUserInRole("bar") +
"<br>\n" +
+ "web user has role \"kaz\": " + request.isUserInRole("kaz") +
"<br><br>");
+ }
+
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>IMPORTANT:</p>
+</div>
+<div class="exampleblock">
+<div class="content">
+<div class="paragraph">
+<p>In TomEE, Jakarta Security is wired in all layers, you can use</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>javax.ws.rs.core.SecurityContext#getUserPrincipal</code> and
<code>isUserInRole</code> to get the User Principal and check if the user has a
given role</p>
+</li>
+<li>
+<p><code>javax.security.enterprise.SecurityContext#getCallerPrincipal</code>
and <code>isCallerInRole</code> to get the Caller Principal (notice the
difference in terms of naming) and check if a caller has a given role</p>
+</li>
+<li>
+<p><code>javax.servlet.http.HttpServletRequest#getUserPrincipal</code> and
<code>isUserInRole</code></p>
+</li>
+<li>
+<p><code>javax.ejb.SessionContext#getCallerPrincipal</code> and
<code>isCallerInRole</code></p>
+</li>
+<li>
+<p>the <code>Subject</code> from the <code>PolicyContext</code> but this is
less used</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="paragraph">
+<p>A lot of different APIs to retrieve the principal and check whereas it has
a given role.
+It’s all wired in and consistent in TomEE. No special configuration is
needed.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_create_your_own_identitystore_implementation">Create your own
IdentityStore implementation</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>For the sake of keeping this example as simple as possible, the
<code>TestIdentityStore</code> is very simple.</p>
+</div>
+<div class="paragraph">
+<p>It recognizes only 2 users and only one of them has the right roles to call
the servlet.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-java"
data-lang="java">@ApplicationScoped
+public class TestIdentityStore implements IdentityStore {
+
+ public CredentialValidationResult validate(Credential credential) {
+
+ if (!(credential instanceof UsernamePasswordCredential)) {
+ return INVALID_RESULT;
+ }
+
+ final UsernamePasswordCredential usernamePasswordCredential =
(UsernamePasswordCredential) credential;
+ if (usernamePasswordCredential.compareTo("jon", "doe")) {
+ return new CredentialValidationResult("jon", new
HashSet<>(asList("foo", "bar")));
+ }
+
+ if (usernamePasswordCredential.compareTo("iron", "man")) {
+ return new CredentialValidationResult("iron", new
HashSet<>(Collections.singletonList("avengers")));
+ }
+
+ return INVALID_RESULT;
+ }
+
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>There is nothing else to configure or do.
+The identity store must implement the IdentityStore interface.
+It must be a CDI bean and then TomEE will pick it up automatically and
delegate user authentication.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_running">Running</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Were we to run the above Main class or Test Case we’d see output like
the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">....
+INFOS: Starting ProtocolHandler ["http-nio-54313"]
+juin 24, 2021 2:58:42 PM sun.reflect.DelegatingMethodAccessorImpl invoke
+INFOS: Server startup in [4703] milliseconds
+juin 24, 2021 2:58:42 PM sun.reflect.DelegatingMethodAccessorImpl invoke
+INFOS: Full bootstrap in [7638] milliseconds
+
+
+Calling MovieServlet without any credentials provided.
+juin 24, 2021 2:58:43 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[401] contentType=[text/html]
+juin 24, 2021 2:58:43 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 401 –
Unauthorized</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 401 – Unauthorized</h1> [...]
+
+
+Calling MovieServlet with a valid user and valid permissions.
+
+
+Calling MovieServlet with the wrong credentials.
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[401] contentType=[text/html]
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 401 –
Unauthorized</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 401 – Unauthorized</h1> [...]
+
+
+Calling MovieServlet with a valid user but without required permissions.
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[403] contentType=[text/html]
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 403 –
Forbidden</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 403 – Forbidden</h1><hr [...]
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_apis_used">APIs Used</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a
href="../../latest/javadoc/org/apache/tomee/bootstrap/Archive.html">org.apache.tomee.bootstrap.Archive</a></p>
+</li>
+<li>
+<p><a
href="../../latest/javadoc/org/apache/tomee/bootstrap/Server.html">org.apache.tomee.bootstrap.Server</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+ </div>
+
+ </div>
+ </div>
+<div style="margin-bottom: 30px;"></div>
+<footer>
+ <div class="container">
+ <div class="row">
+ <div class="col-sm-6 text-center-mobile">
+ <h3 class="white">Be simple. Be
certified. Be Tomcat.</h3>
+ <h5 class="light regular
light-white">"A good application in a good server"</h5>
+ <ul class="social-footer">
+ <li><a
href="https://www.facebook.com/ApacheTomEE/"><i class="fa
fa-facebook"></i></a></li>
+ <li><a
href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
+ </ul>
+ </div>
+ <div class="col-sm-6 text-center-mobile">
+ <div class="row opening-hours">
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../latest/docs/" class="white">Documentation</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../latest/docs/admin/configuration/index.html" class="regular
light-white">How to configure</a></li>
+ <li><a
href="../../latest/docs/admin/file-layout.html" class="regular
light-white">Dir. Structure</a></li>
+ <li><a
href="../../latest/docs/developer/testing/index.html" class="regular
light-white">Testing</a></li>
+ <li><a
href="../../latest/docs/admin/cluster/index.html" class="regular
light-white">Clustering</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../latest/examples/" class="white">Examples</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../latest/examples/simple-cdi-interceptor.html" class="regular
light-white">CDI Interceptor</a></li>
+ <li><a
href="../../latest/examples/rest-cdi.html" class="regular light-white">REST
with CDI</a></li>
+ <li><a
href="../../latest/examples/ejb-examples.html" class="regular
light-white">EJB</a></li>
+ <li><a
href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular
light-white">JSF</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../community/index.html" class="white">Community</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../community/contributors.html" class="regular
light-white">Contributors</a></li>
+ <li><a
href="../../community/social.html" class="regular light-white">Social</a></li>
+ <li><a
href="../../community/sources.html" class="regular light-white">Sources</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../security/index.html" class="white">Security</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="http://apache.org/security" target="_blank" class="regular
light-white">Apache Security</a></li>
+ <li><a
href="http://apache.org/security/projects.html" target="_blank" class="regular
light-white">Security Projects</a></li>
+ <li><a
href="http://cve.mitre.org" target="_blank" class="regular
light-white">CVE</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row bottom-footer text-center-mobile">
+ <div class="col-sm-12 light-white">
+ <p>Copyright © 1999-2021 The
Apache Software Foundation, Licensed under the Apache License, Version 2.0.
Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE
project logo are trademarks of The Apache Software Foundation. All other marks
mentioned may be trademarks or registered trademarks of their respective
owners.</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+ <!-- Holder for mobile navigation -->
+ <div class="mobile-nav">
+ <ul>
+ <li><a hef="../../latest/docs/admin/index.html">Administrators</a>
+ <li><a hef="../../latest/docs/developer/index.html">Developers</a>
+ <li><a hef="../../latest/docs/advanced/index.html">Advanced</a>
+ <li><a hef="../../community/index.html">Community</a>
+ </ul>
+ <a href="#" class="close-link"><i class="arrow_up"></i></a>
+ </div>
+ <!-- Scripts -->
+ <script src="../../js/jquery-1.11.1.min.js"></script>
+ <script src="../../js/owl.carousel.min.js"></script>
+ <script src="../../js/bootstrap.min.js"></script>
+ <script src="../../js/wow.min.js"></script>
+ <script src="../../js/typewriter.js"></script>
+ <script src="../../js/jquery.onepagenav.js"></script>
+ <script src="../../js/tree.jquery.js"></script>
+ <script src="../../js/highlight.pack.js"></script>
+ <script src="../../js/main.js"></script>
+ </body>
+
+</html>
+
diff --git a/latest/javadoc/org/apache/tomee/bootstrap/Archive.html
b/latest/javadoc/org/apache/tomee/bootstrap/Archive.html
index a527381..ac5f7c1 100644
--- a/latest/javadoc/org/apache/tomee/bootstrap/Archive.html
+++ b/latest/javadoc/org/apache/tomee/bootstrap/Archive.html
@@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
extends java.lang.Object</pre>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../latest/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../latest/examples/serverle [...]
+<dd><a
href="../../../../../../../latest/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../latest/examples/serverle [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../../latest/pt/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../latest/pt/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../latest/pt/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../latest/pt/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../latest/pt/ex [...]
</dl>
diff --git a/latest/javadoc/org/apache/tomee/bootstrap/Server.html
b/latest/javadoc/org/apache/tomee/bootstrap/Server.html
index be0e839..a5cf698 100644
--- a/latest/javadoc/org/apache/tomee/bootstrap/Server.html
+++ b/latest/javadoc/org/apache/tomee/bootstrap/Server.html
@@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
extends java.lang.Object</pre>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../latest/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../latest/examples/serverle [...]
+<dd><a
href="../../../../../../../latest/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../latest/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../latest/examples/serverle [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../../latest/pt/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../latest/pt/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../latest/pt/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../latest/pt/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../latest/pt/ex [...]
</dl>
diff --git a/master/examples/index.html b/master/examples/index.html
index ac3a2ed..1630af2 100644
--- a/master/examples/index.html
+++ b/master/examples/index.html
@@ -294,12 +294,21 @@
</ul>
</div>
<div class="col-md-4">
+ <div class="group-title">Jakarta Security</div>
+ <ul class="group">
+ <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="security-custom-identitystore.html">Jakarta
Security with a custom identity store</a></li>
+ <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="security-tomcat-user-identitystore.html">Jakarta Security with Tomcat
tomcat-users.xml identity store</a></li>
+ </ul>
+ </div>
+ <div class="col-md-4">
<div class="group-title">JSON-B</div>
<ul class="group">
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="jsonb-configuration.html">JSON-B
Configuration</a></li>
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="jsonb-custom-serializer.html">JSON-B Custom
Serializer</a></li>
</ul>
</div>
+ </div>
+ <div class="row">
<div class="col-md-4">
<div class="group-title">EJB Legacy</div>
<ul class="group">
@@ -307,8 +316,6 @@
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="simple-cmp2.html">EJB 2.1 CMP EntityBeans
(CMP2)</a></li>
</ul>
</div>
- </div>
- <div class="row">
<div class="col-md-4">
<div class="group-title">Servlet</div>
<ul class="group">
@@ -316,12 +323,6 @@
</ul>
</div>
<div class="col-md-4">
- <div class="group-title">Jakarta Security</div>
- <ul class="group">
- <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="security-tomcat-user-identitystore.html">Jakarta Security with Tomcat
tomcat-users.xml identity store</a></li>
- </ul>
- </div>
- <div class="col-md-4">
<div class="group-title">Webservice</div>
<ul class="group">
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="webservice-ws-with-resources-config.html">Webservice JAX-WS - Resources
config</a></li>
diff --git a/master/examples/security-custom-identitystore.html
b/master/examples/security-custom-identitystore.html
new file mode 100644
index 0000000..741d719
--- /dev/null
+++ b/master/examples/security-custom-identitystore.html
@@ -0,0 +1,428 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Apache TomEE</title>
+ <meta name="description"
+ content="Apache TomEE is a lightweight, yet powerful, JavaEE
Application server with feature rich tooling." />
+ <meta name="keywords"
content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian"
/>
+ <meta name="author" content="Luka Cvetinovic for Codrops" />
+ <link rel="icon" href="../../favicon.ico">
+ <link rel="icon" type="image/png" href="../../favicon.png">
+ <meta name="msapplication-TileColor" content="#80287a">
+ <meta name="theme-color" content="#80287a">
+ <link rel="stylesheet" type="text/css" href="../../css/normalize.css">
+ <link rel="stylesheet" type="text/css" href="../../css/bootstrap.css">
+ <link rel="stylesheet" type="text/css" href="../../css/owl.css">
+ <link rel="stylesheet" type="text/css" href="../../css/animate.css">
+ <link rel="stylesheet" type="text/css"
href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
+ <link rel="stylesheet" type="text/css"
href="../../fonts/eleganticons/et-icons.css">
+ <link rel="stylesheet" type="text/css" href="../../css/jqtree.css">
+ <link rel="stylesheet" type="text/css" href="../../css/idea.css">
+ <link rel="stylesheet" type="text/css" href="../../css/cardio.css">
+
+ <script type="text/javascript">
+
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-2717626-1']);
+ _gaq.push(['_setDomainName', 'apache.org']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type =
'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+
+ </script>
+</head>
+
+<body>
+ <div class="preloader">
+ <img src="../../img/loader.gif" alt="Preloader image">
+ </div>
+ <nav class="navbar">
+ <div class="container">
+ <div class="row"> <div class="col-md-12">
+
+ <!-- Brand and toggle get grouped for better mobile
display -->
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle
collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+ <span class="sr-only">Toggle
navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="/" title="Apache
TomEE">
+ <span>
+
+
+ <img
+
src="../../img/apache_tomee-logo.svg"
+
onerror="this.src='../../img/apache_tomee-logo.jpg'"
+ height="50"
+ >
+
+
+ </span>
+ </a>
+ </div>
+ <!-- Collect the nav links, forms, and other content
for toggling -->
+ <div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
+ <ul class="nav navbar-nav navbar-right
main-nav">
+ <li><a
href="../../docs.html">Documentation</a></li>
+ <li><a
href="../../community/index.html">Community</a></li>
+ <li><a
href="../../security/security.html">Security</a></li>
+ <li><a class="btn btn-accent
accent-orange no-shadow" href="../../download.html">Downloads</a></li>
+ </ul>
+ </div>
+ <!-- /.navbar-collapse -->
+ </div></div>
+ </div>
+ <!-- /.container-fluid -->
+ </nav>
+
+
+ <div id="main-block" class="container main-block">
+ <div class="row title">
+ <div class="col-md-12">
+ <div class='page-header'>
+
+ <h1>Jakarta Security with a custom identity store</h1>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+
+ <div class="col-md-12">
+ <div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>TomEE has its own independent Jakarta Security implementation <a
href="https://eclipse-ee4j.github.io/security-api/"
class="bare">https://eclipse-ee4j.github.io/security-api/</a> .</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Jakarta Security defines a standard for creating secure Jakarta EE
applications in modern application paradigms. It defines an overarching
(end-user targeted) Security API for Jakarta EE Applications.</p>
+</div>
+<div class="paragraph">
+<p>Jakarta Security builds on the lower level Security SPIs defined by Jakarta
Authentication and Jakarta Authorization, which are both not end-end
targeted.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>As the specification requires, TomEE supports by default JDBC and JDAP
identity stores. It also has a default support for Tomcat’s
'tomcat-users.xml' (See security-tomcat-user-identitystore example).</p>
+</div>
+<div class="paragraph">
+<p>This example will show how you can leverage your own identity store to
authenticate users.
+This is very often required for integrating your systems.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_implement_a_simple_servlet">Implement a simple servlet</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This movie servlet, is a very simple example that defines a
BasicAuthenticationMechanism, some roles and security constraints.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-java"
data-lang="java">@WebServlet("/movies")
+@DeclareRoles({"foo","bar","kaz"})
+@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
+@BasicAuthenticationMechanismDefinition
+public class MovieServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void doGet(final HttpServletRequest request, final
HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String webName = null;
+ if (request.getUserPrincipal() != null) {
+ webName = request.getUserPrincipal().getName();
+ }
+
+ response.getWriter().write(
+ "<html><body> Welcome to Movie servlet
<br><br>\n" +
+
+ "web username: " + webName + "<br><br>\n" +
+
+ "web user has role \"foo\": " + request.isUserInRole("foo") +
"<br>\n" +
+ "web user has role \"bar\": " + request.isUserInRole("bar") +
"<br>\n" +
+ "web user has role \"kaz\": " + request.isUserInRole("kaz") +
"<br><br>");
+ }
+
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>IMPORTANT:</p>
+</div>
+<div class="exampleblock">
+<div class="content">
+<div class="paragraph">
+<p>In TomEE, Jakarta Security is wired in all layers, you can use</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>javax.ws.rs.core.SecurityContext#getUserPrincipal</code> and
<code>isUserInRole</code> to get the User Principal and check if the user has a
given role</p>
+</li>
+<li>
+<p><code>javax.security.enterprise.SecurityContext#getCallerPrincipal</code>
and <code>isCallerInRole</code> to get the Caller Principal (notice the
difference in terms of naming) and check if a caller has a given role</p>
+</li>
+<li>
+<p><code>javax.servlet.http.HttpServletRequest#getUserPrincipal</code> and
<code>isUserInRole</code></p>
+</li>
+<li>
+<p><code>javax.ejb.SessionContext#getCallerPrincipal</code> and
<code>isCallerInRole</code></p>
+</li>
+<li>
+<p>the <code>Subject</code> from the <code>PolicyContext</code> but this is
less used</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="paragraph">
+<p>A lot of different APIs to retrieve the principal and check whereas it has
a given role.
+It’s all wired in and consistent in TomEE. No special configuration is
needed.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_create_your_own_identitystore_implementation">Create your own
IdentityStore implementation</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>For the sake of keeping this example as simple as possible, the
<code>TestIdentityStore</code> is very simple.</p>
+</div>
+<div class="paragraph">
+<p>It recognizes only 2 users and only one of them has the right roles to call
the servlet.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-java"
data-lang="java">@ApplicationScoped
+public class TestIdentityStore implements IdentityStore {
+
+ public CredentialValidationResult validate(Credential credential) {
+
+ if (!(credential instanceof UsernamePasswordCredential)) {
+ return INVALID_RESULT;
+ }
+
+ final UsernamePasswordCredential usernamePasswordCredential =
(UsernamePasswordCredential) credential;
+ if (usernamePasswordCredential.compareTo("jon", "doe")) {
+ return new CredentialValidationResult("jon", new
HashSet<>(asList("foo", "bar")));
+ }
+
+ if (usernamePasswordCredential.compareTo("iron", "man")) {
+ return new CredentialValidationResult("iron", new
HashSet<>(Collections.singletonList("avengers")));
+ }
+
+ return INVALID_RESULT;
+ }
+
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>There is nothing else to configure or do.
+The identity store must implement the IdentityStore interface.
+It must be a CDI bean and then TomEE will pick it up automatically and
delegate user authentication.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_running">Running</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Were we to run the above Main class or Test Case we’d see output like
the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">....
+INFOS: Starting ProtocolHandler ["http-nio-54313"]
+juin 24, 2021 2:58:42 PM sun.reflect.DelegatingMethodAccessorImpl invoke
+INFOS: Server startup in [4703] milliseconds
+juin 24, 2021 2:58:42 PM sun.reflect.DelegatingMethodAccessorImpl invoke
+INFOS: Full bootstrap in [7638] milliseconds
+
+
+Calling MovieServlet without any credentials provided.
+juin 24, 2021 2:58:43 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[401] contentType=[text/html]
+juin 24, 2021 2:58:43 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 401 –
Unauthorized</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 401 – Unauthorized</h1> [...]
+
+
+Calling MovieServlet with a valid user and valid permissions.
+
+
+Calling MovieServlet with the wrong credentials.
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[401] contentType=[text/html]
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 401 –
Unauthorized</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 401 – Unauthorized</h1> [...]
+
+
+Calling MovieServlet with a valid user but without required permissions.
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[403] contentType=[text/html]
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 403 –
Forbidden</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 403 – Forbidden</h1><hr [...]
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_apis_used">APIs Used</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a
href="../../master/javadoc/org/apache/tomee/bootstrap/Archive.html">org.apache.tomee.bootstrap.Archive</a></p>
+</li>
+<li>
+<p><a
href="../../master/javadoc/org/apache/tomee/bootstrap/Server.html">org.apache.tomee.bootstrap.Server</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/annotation/security/DeclareRoles.html">javax.annotation.security.DeclareRoles</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html">javax.security.enterprise.authentication.mechanism.http.BasicAuthenticationMechanismDefinition</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/credential/Credential.html">javax.security.enterprise.credential.Credential</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/credential/UsernamePasswordCredential.html">javax.security.enterprise.credential.UsernamePasswordCredential</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/CredentialValidationResult.html">javax.security.enterprise.identitystore.CredentialValidationResult</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/IdentityStore.html">javax.security.enterprise.identitystore.IdentityStore</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/ServletException.html">javax.servlet.ServletException</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/annotation/HttpConstraint.html">javax.servlet.annotation.HttpConstraint</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/annotation/ServletSecurity.html">javax.servlet.annotation.ServletSecurity</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/annotation/WebServlet.html">javax.servlet.annotation.WebServlet</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/http/HttpServlet.html">javax.servlet.http.HttpServlet</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/http/HttpServletRequest.html">javax.servlet.http.HttpServletRequest</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/http/HttpServletResponse.html">javax.servlet.http.HttpServletResponse</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+ </div>
+
+ </div>
+ </div>
+<div style="margin-bottom: 30px;"></div>
+<footer>
+ <div class="container">
+ <div class="row">
+ <div class="col-sm-6 text-center-mobile">
+ <h3 class="white">Be simple. Be
certified. Be Tomcat.</h3>
+ <h5 class="light regular
light-white">"A good application in a good server"</h5>
+ <ul class="social-footer">
+ <li><a
href="https://www.facebook.com/ApacheTomEE/"><i class="fa
fa-facebook"></i></a></li>
+ <li><a
href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
+ </ul>
+ </div>
+ <div class="col-sm-6 text-center-mobile">
+ <div class="row opening-hours">
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../latest/docs/" class="white">Documentation</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../latest/docs/admin/configuration/index.html" class="regular
light-white">How to configure</a></li>
+ <li><a
href="../../latest/docs/admin/file-layout.html" class="regular
light-white">Dir. Structure</a></li>
+ <li><a
href="../../latest/docs/developer/testing/index.html" class="regular
light-white">Testing</a></li>
+ <li><a
href="../../latest/docs/admin/cluster/index.html" class="regular
light-white">Clustering</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../latest/examples/" class="white">Examples</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../latest/examples/simple-cdi-interceptor.html" class="regular
light-white">CDI Interceptor</a></li>
+ <li><a
href="../../latest/examples/rest-cdi.html" class="regular light-white">REST
with CDI</a></li>
+ <li><a
href="../../latest/examples/ejb-examples.html" class="regular
light-white">EJB</a></li>
+ <li><a
href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular
light-white">JSF</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../community/index.html" class="white">Community</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../community/contributors.html" class="regular
light-white">Contributors</a></li>
+ <li><a
href="../../community/social.html" class="regular light-white">Social</a></li>
+ <li><a
href="../../community/sources.html" class="regular light-white">Sources</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../security/index.html" class="white">Security</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="http://apache.org/security" target="_blank" class="regular
light-white">Apache Security</a></li>
+ <li><a
href="http://apache.org/security/projects.html" target="_blank" class="regular
light-white">Security Projects</a></li>
+ <li><a
href="http://cve.mitre.org" target="_blank" class="regular
light-white">CVE</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row bottom-footer text-center-mobile">
+ <div class="col-sm-12 light-white">
+ <p>Copyright © 1999-2021 The
Apache Software Foundation, Licensed under the Apache License, Version 2.0.
Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE
project logo are trademarks of The Apache Software Foundation. All other marks
mentioned may be trademarks or registered trademarks of their respective
owners.</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+ <!-- Holder for mobile navigation -->
+ <div class="mobile-nav">
+ <ul>
+ <li><a hef="../../latest/docs/admin/index.html">Administrators</a>
+ <li><a hef="../../latest/docs/developer/index.html">Developers</a>
+ <li><a hef="../../latest/docs/advanced/index.html">Advanced</a>
+ <li><a hef="../../community/index.html">Community</a>
+ </ul>
+ <a href="#" class="close-link"><i class="arrow_up"></i></a>
+ </div>
+ <!-- Scripts -->
+ <script src="../../js/jquery-1.11.1.min.js"></script>
+ <script src="../../js/owl.carousel.min.js"></script>
+ <script src="../../js/bootstrap.min.js"></script>
+ <script src="../../js/wow.min.js"></script>
+ <script src="../../js/typewriter.js"></script>
+ <script src="../../js/jquery.onepagenav.js"></script>
+ <script src="../../js/tree.jquery.js"></script>
+ <script src="../../js/highlight.pack.js"></script>
+ <script src="../../js/main.js"></script>
+ </body>
+
+</html>
+
diff --git a/master/javadoc/org/apache/tomee/bootstrap/Archive.html
b/master/javadoc/org/apache/tomee/bootstrap/Archive.html
index c780b26..02b4f9c 100644
--- a/master/javadoc/org/apache/tomee/bootstrap/Archive.html
+++ b/master/javadoc/org/apache/tomee/bootstrap/Archive.html
@@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
extends java.lang.Object</pre>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
+<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../ [...]
</dl>
diff --git a/master/javadoc/org/apache/tomee/bootstrap/Server.html
b/master/javadoc/org/apache/tomee/bootstrap/Server.html
index f5f7eb7..acf9ac2 100644
--- a/master/javadoc/org/apache/tomee/bootstrap/Server.html
+++ b/master/javadoc/org/apache/tomee/bootstrap/Server.html
@@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
extends java.lang.Object</pre>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
+<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../ [...]
</dl>
diff --git a/tomee-8.0/examples/index.html b/tomee-8.0/examples/index.html
index ac3a2ed..1630af2 100644
--- a/tomee-8.0/examples/index.html
+++ b/tomee-8.0/examples/index.html
@@ -294,12 +294,21 @@
</ul>
</div>
<div class="col-md-4">
+ <div class="group-title">Jakarta Security</div>
+ <ul class="group">
+ <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="security-custom-identitystore.html">Jakarta
Security with a custom identity store</a></li>
+ <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="security-tomcat-user-identitystore.html">Jakarta Security with Tomcat
tomcat-users.xml identity store</a></li>
+ </ul>
+ </div>
+ <div class="col-md-4">
<div class="group-title">JSON-B</div>
<ul class="group">
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="jsonb-configuration.html">JSON-B
Configuration</a></li>
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="jsonb-custom-serializer.html">JSON-B Custom
Serializer</a></li>
</ul>
</div>
+ </div>
+ <div class="row">
<div class="col-md-4">
<div class="group-title">EJB Legacy</div>
<ul class="group">
@@ -307,8 +316,6 @@
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="simple-cmp2.html">EJB 2.1 CMP EntityBeans
(CMP2)</a></li>
</ul>
</div>
- </div>
- <div class="row">
<div class="col-md-4">
<div class="group-title">Servlet</div>
<ul class="group">
@@ -316,12 +323,6 @@
</ul>
</div>
<div class="col-md-4">
- <div class="group-title">Jakarta Security</div>
- <ul class="group">
- <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="security-tomcat-user-identitystore.html">Jakarta Security with Tomcat
tomcat-users.xml identity store</a></li>
- </ul>
- </div>
- <div class="col-md-4">
<div class="group-title">Webservice</div>
<ul class="group">
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="webservice-ws-with-resources-config.html">Webservice JAX-WS - Resources
config</a></li>
diff --git a/tomee-8.0/examples/security-custom-identitystore.html
b/tomee-8.0/examples/security-custom-identitystore.html
new file mode 100644
index 0000000..ecd10d7
--- /dev/null
+++ b/tomee-8.0/examples/security-custom-identitystore.html
@@ -0,0 +1,428 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Apache TomEE</title>
+ <meta name="description"
+ content="Apache TomEE is a lightweight, yet powerful, JavaEE
Application server with feature rich tooling." />
+ <meta name="keywords"
content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian"
/>
+ <meta name="author" content="Luka Cvetinovic for Codrops" />
+ <link rel="icon" href="../../favicon.ico">
+ <link rel="icon" type="image/png" href="../../favicon.png">
+ <meta name="msapplication-TileColor" content="#80287a">
+ <meta name="theme-color" content="#80287a">
+ <link rel="stylesheet" type="text/css" href="../../css/normalize.css">
+ <link rel="stylesheet" type="text/css" href="../../css/bootstrap.css">
+ <link rel="stylesheet" type="text/css" href="../../css/owl.css">
+ <link rel="stylesheet" type="text/css" href="../../css/animate.css">
+ <link rel="stylesheet" type="text/css"
href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
+ <link rel="stylesheet" type="text/css"
href="../../fonts/eleganticons/et-icons.css">
+ <link rel="stylesheet" type="text/css" href="../../css/jqtree.css">
+ <link rel="stylesheet" type="text/css" href="../../css/idea.css">
+ <link rel="stylesheet" type="text/css" href="../../css/cardio.css">
+
+ <script type="text/javascript">
+
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-2717626-1']);
+ _gaq.push(['_setDomainName', 'apache.org']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type =
'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+
+ </script>
+</head>
+
+<body>
+ <div class="preloader">
+ <img src="../../img/loader.gif" alt="Preloader image">
+ </div>
+ <nav class="navbar">
+ <div class="container">
+ <div class="row"> <div class="col-md-12">
+
+ <!-- Brand and toggle get grouped for better mobile
display -->
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle
collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+ <span class="sr-only">Toggle
navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="/" title="Apache
TomEE">
+ <span>
+
+
+ <img
+
src="../../img/apache_tomee-logo.svg"
+
onerror="this.src='../../img/apache_tomee-logo.jpg'"
+ height="50"
+ >
+
+
+ </span>
+ </a>
+ </div>
+ <!-- Collect the nav links, forms, and other content
for toggling -->
+ <div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
+ <ul class="nav navbar-nav navbar-right
main-nav">
+ <li><a
href="../../docs.html">Documentation</a></li>
+ <li><a
href="../../community/index.html">Community</a></li>
+ <li><a
href="../../security/security.html">Security</a></li>
+ <li><a class="btn btn-accent
accent-orange no-shadow" href="../../download.html">Downloads</a></li>
+ </ul>
+ </div>
+ <!-- /.navbar-collapse -->
+ </div></div>
+ </div>
+ <!-- /.container-fluid -->
+ </nav>
+
+
+ <div id="main-block" class="container main-block">
+ <div class="row title">
+ <div class="col-md-12">
+ <div class='page-header'>
+
+ <h1>Jakarta Security with a custom identity store</h1>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+
+ <div class="col-md-12">
+ <div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>TomEE has its own independent Jakarta Security implementation <a
href="https://eclipse-ee4j.github.io/security-api/"
class="bare">https://eclipse-ee4j.github.io/security-api/</a> .</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Jakarta Security defines a standard for creating secure Jakarta EE
applications in modern application paradigms. It defines an overarching
(end-user targeted) Security API for Jakarta EE Applications.</p>
+</div>
+<div class="paragraph">
+<p>Jakarta Security builds on the lower level Security SPIs defined by Jakarta
Authentication and Jakarta Authorization, which are both not end-end
targeted.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>As the specification requires, TomEE supports by default JDBC and JDAP
identity stores. It also has a default support for Tomcat’s
'tomcat-users.xml' (See security-tomcat-user-identitystore example).</p>
+</div>
+<div class="paragraph">
+<p>This example will show how you can leverage your own identity store to
authenticate users.
+This is very often required for integrating your systems.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_implement_a_simple_servlet">Implement a simple servlet</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This movie servlet, is a very simple example that defines a
BasicAuthenticationMechanism, some roles and security constraints.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-java"
data-lang="java">@WebServlet("/movies")
+@DeclareRoles({"foo","bar","kaz"})
+@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
+@BasicAuthenticationMechanismDefinition
+public class MovieServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void doGet(final HttpServletRequest request, final
HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String webName = null;
+ if (request.getUserPrincipal() != null) {
+ webName = request.getUserPrincipal().getName();
+ }
+
+ response.getWriter().write(
+ "<html><body> Welcome to Movie servlet
<br><br>\n" +
+
+ "web username: " + webName + "<br><br>\n" +
+
+ "web user has role \"foo\": " + request.isUserInRole("foo") +
"<br>\n" +
+ "web user has role \"bar\": " + request.isUserInRole("bar") +
"<br>\n" +
+ "web user has role \"kaz\": " + request.isUserInRole("kaz") +
"<br><br>");
+ }
+
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>IMPORTANT:</p>
+</div>
+<div class="exampleblock">
+<div class="content">
+<div class="paragraph">
+<p>In TomEE, Jakarta Security is wired in all layers, you can use</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>javax.ws.rs.core.SecurityContext#getUserPrincipal</code> and
<code>isUserInRole</code> to get the User Principal and check if the user has a
given role</p>
+</li>
+<li>
+<p><code>javax.security.enterprise.SecurityContext#getCallerPrincipal</code>
and <code>isCallerInRole</code> to get the Caller Principal (notice the
difference in terms of naming) and check if a caller has a given role</p>
+</li>
+<li>
+<p><code>javax.servlet.http.HttpServletRequest#getUserPrincipal</code> and
<code>isUserInRole</code></p>
+</li>
+<li>
+<p><code>javax.ejb.SessionContext#getCallerPrincipal</code> and
<code>isCallerInRole</code></p>
+</li>
+<li>
+<p>the <code>Subject</code> from the <code>PolicyContext</code> but this is
less used</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="paragraph">
+<p>A lot of different APIs to retrieve the principal and check whereas it has
a given role.
+It’s all wired in and consistent in TomEE. No special configuration is
needed.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_create_your_own_identitystore_implementation">Create your own
IdentityStore implementation</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>For the sake of keeping this example as simple as possible, the
<code>TestIdentityStore</code> is very simple.</p>
+</div>
+<div class="paragraph">
+<p>It recognizes only 2 users and only one of them has the right roles to call
the servlet.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-java"
data-lang="java">@ApplicationScoped
+public class TestIdentityStore implements IdentityStore {
+
+ public CredentialValidationResult validate(Credential credential) {
+
+ if (!(credential instanceof UsernamePasswordCredential)) {
+ return INVALID_RESULT;
+ }
+
+ final UsernamePasswordCredential usernamePasswordCredential =
(UsernamePasswordCredential) credential;
+ if (usernamePasswordCredential.compareTo("jon", "doe")) {
+ return new CredentialValidationResult("jon", new
HashSet<>(asList("foo", "bar")));
+ }
+
+ if (usernamePasswordCredential.compareTo("iron", "man")) {
+ return new CredentialValidationResult("iron", new
HashSet<>(Collections.singletonList("avengers")));
+ }
+
+ return INVALID_RESULT;
+ }
+
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>There is nothing else to configure or do.
+The identity store must implement the IdentityStore interface.
+It must be a CDI bean and then TomEE will pick it up automatically and
delegate user authentication.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_running">Running</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Were we to run the above Main class or Test Case we’d see output like
the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">....
+INFOS: Starting ProtocolHandler ["http-nio-54313"]
+juin 24, 2021 2:58:42 PM sun.reflect.DelegatingMethodAccessorImpl invoke
+INFOS: Server startup in [4703] milliseconds
+juin 24, 2021 2:58:42 PM sun.reflect.DelegatingMethodAccessorImpl invoke
+INFOS: Full bootstrap in [7638] milliseconds
+
+
+Calling MovieServlet without any credentials provided.
+juin 24, 2021 2:58:43 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[401] contentType=[text/html]
+juin 24, 2021 2:58:43 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 401 –
Unauthorized</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 401 – Unauthorized</h1> [...]
+
+
+Calling MovieServlet with a valid user and valid permissions.
+
+
+Calling MovieServlet with the wrong credentials.
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[401] contentType=[text/html]
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 401 –
Unauthorized</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 401 – Unauthorized</h1> [...]
+
+
+Calling MovieServlet with a valid user but without required permissions.
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[403] contentType=[text/html]
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 403 –
Forbidden</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 403 – Forbidden</h1><hr [...]
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_apis_used">APIs Used</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a
href="../../tomee-8.0/javadoc/org/apache/tomee/bootstrap/Archive.html">org.apache.tomee.bootstrap.Archive</a></p>
+</li>
+<li>
+<p><a
href="../../tomee-8.0/javadoc/org/apache/tomee/bootstrap/Server.html">org.apache.tomee.bootstrap.Server</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/annotation/security/DeclareRoles.html">javax.annotation.security.DeclareRoles</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html">javax.security.enterprise.authentication.mechanism.http.BasicAuthenticationMechanismDefinition</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/credential/Credential.html">javax.security.enterprise.credential.Credential</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/credential/UsernamePasswordCredential.html">javax.security.enterprise.credential.UsernamePasswordCredential</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/CredentialValidationResult.html">javax.security.enterprise.identitystore.CredentialValidationResult</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/security/enterprise/identitystore/IdentityStore.html">javax.security.enterprise.identitystore.IdentityStore</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/ServletException.html">javax.servlet.ServletException</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/annotation/HttpConstraint.html">javax.servlet.annotation.HttpConstraint</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/annotation/ServletSecurity.html">javax.servlet.annotation.ServletSecurity</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/annotation/WebServlet.html">javax.servlet.annotation.WebServlet</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/http/HttpServlet.html">javax.servlet.http.HttpServlet</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/http/HttpServletRequest.html">javax.servlet.http.HttpServletRequest</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-8.0/javadoc/javax/servlet/http/HttpServletResponse.html">javax.servlet.http.HttpServletResponse</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+ </div>
+
+ </div>
+ </div>
+<div style="margin-bottom: 30px;"></div>
+<footer>
+ <div class="container">
+ <div class="row">
+ <div class="col-sm-6 text-center-mobile">
+ <h3 class="white">Be simple. Be
certified. Be Tomcat.</h3>
+ <h5 class="light regular
light-white">"A good application in a good server"</h5>
+ <ul class="social-footer">
+ <li><a
href="https://www.facebook.com/ApacheTomEE/"><i class="fa
fa-facebook"></i></a></li>
+ <li><a
href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
+ </ul>
+ </div>
+ <div class="col-sm-6 text-center-mobile">
+ <div class="row opening-hours">
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../latest/docs/" class="white">Documentation</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../latest/docs/admin/configuration/index.html" class="regular
light-white">How to configure</a></li>
+ <li><a
href="../../latest/docs/admin/file-layout.html" class="regular
light-white">Dir. Structure</a></li>
+ <li><a
href="../../latest/docs/developer/testing/index.html" class="regular
light-white">Testing</a></li>
+ <li><a
href="../../latest/docs/admin/cluster/index.html" class="regular
light-white">Clustering</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../latest/examples/" class="white">Examples</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../latest/examples/simple-cdi-interceptor.html" class="regular
light-white">CDI Interceptor</a></li>
+ <li><a
href="../../latest/examples/rest-cdi.html" class="regular light-white">REST
with CDI</a></li>
+ <li><a
href="../../latest/examples/ejb-examples.html" class="regular
light-white">EJB</a></li>
+ <li><a
href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular
light-white">JSF</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../community/index.html" class="white">Community</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../community/contributors.html" class="regular
light-white">Contributors</a></li>
+ <li><a
href="../../community/social.html" class="regular light-white">Social</a></li>
+ <li><a
href="../../community/sources.html" class="regular light-white">Sources</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../security/index.html" class="white">Security</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="http://apache.org/security" target="_blank" class="regular
light-white">Apache Security</a></li>
+ <li><a
href="http://apache.org/security/projects.html" target="_blank" class="regular
light-white">Security Projects</a></li>
+ <li><a
href="http://cve.mitre.org" target="_blank" class="regular
light-white">CVE</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row bottom-footer text-center-mobile">
+ <div class="col-sm-12 light-white">
+ <p>Copyright © 1999-2021 The
Apache Software Foundation, Licensed under the Apache License, Version 2.0.
Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE
project logo are trademarks of The Apache Software Foundation. All other marks
mentioned may be trademarks or registered trademarks of their respective
owners.</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+ <!-- Holder for mobile navigation -->
+ <div class="mobile-nav">
+ <ul>
+ <li><a hef="../../latest/docs/admin/index.html">Administrators</a>
+ <li><a hef="../../latest/docs/developer/index.html">Developers</a>
+ <li><a hef="../../latest/docs/advanced/index.html">Advanced</a>
+ <li><a hef="../../community/index.html">Community</a>
+ </ul>
+ <a href="#" class="close-link"><i class="arrow_up"></i></a>
+ </div>
+ <!-- Scripts -->
+ <script src="../../js/jquery-1.11.1.min.js"></script>
+ <script src="../../js/owl.carousel.min.js"></script>
+ <script src="../../js/bootstrap.min.js"></script>
+ <script src="../../js/wow.min.js"></script>
+ <script src="../../js/typewriter.js"></script>
+ <script src="../../js/jquery.onepagenav.js"></script>
+ <script src="../../js/tree.jquery.js"></script>
+ <script src="../../js/highlight.pack.js"></script>
+ <script src="../../js/main.js"></script>
+ </body>
+
+</html>
+
diff --git a/tomee-8.0/javadoc/org/apache/tomee/bootstrap/Archive.html
b/tomee-8.0/javadoc/org/apache/tomee/bootstrap/Archive.html
index c780b26..02b4f9c 100644
--- a/tomee-8.0/javadoc/org/apache/tomee/bootstrap/Archive.html
+++ b/tomee-8.0/javadoc/org/apache/tomee/bootstrap/Archive.html
@@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
extends java.lang.Object</pre>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
+<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../ [...]
</dl>
diff --git a/tomee-8.0/javadoc/org/apache/tomee/bootstrap/Server.html
b/tomee-8.0/javadoc/org/apache/tomee/bootstrap/Server.html
index f5f7eb7..acf9ac2 100644
--- a/tomee-8.0/javadoc/org/apache/tomee/bootstrap/Server.html
+++ b/tomee-8.0/javadoc/org/apache/tomee/bootstrap/Server.html
@@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
extends java.lang.Object</pre>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
+<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../ [...]
</dl>
diff --git a/tomee-9.0/examples/index.html b/tomee-9.0/examples/index.html
index ac3a2ed..1630af2 100644
--- a/tomee-9.0/examples/index.html
+++ b/tomee-9.0/examples/index.html
@@ -294,12 +294,21 @@
</ul>
</div>
<div class="col-md-4">
+ <div class="group-title">Jakarta Security</div>
+ <ul class="group">
+ <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="security-custom-identitystore.html">Jakarta
Security with a custom identity store</a></li>
+ <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="security-tomcat-user-identitystore.html">Jakarta Security with Tomcat
tomcat-users.xml identity store</a></li>
+ </ul>
+ </div>
+ <div class="col-md-4">
<div class="group-title">JSON-B</div>
<ul class="group">
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="jsonb-configuration.html">JSON-B
Configuration</a></li>
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="jsonb-custom-serializer.html">JSON-B Custom
Serializer</a></li>
</ul>
</div>
+ </div>
+ <div class="row">
<div class="col-md-4">
<div class="group-title">EJB Legacy</div>
<ul class="group">
@@ -307,8 +316,6 @@
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a href="simple-cmp2.html">EJB 2.1 CMP EntityBeans
(CMP2)</a></li>
</ul>
</div>
- </div>
- <div class="row">
<div class="col-md-4">
<div class="group-title">Servlet</div>
<ul class="group">
@@ -316,12 +323,6 @@
</ul>
</div>
<div class="col-md-4">
- <div class="group-title">Jakarta Security</div>
- <ul class="group">
- <li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="security-tomcat-user-identitystore.html">Jakarta Security with Tomcat
tomcat-users.xml identity store</a></li>
- </ul>
- </div>
- <div class="col-md-4">
<div class="group-title">Webservice</div>
<ul class="group">
<li class="group-item"><span class="group-item-i" ><i class="fa
fa-angle-right"></i></span><a
href="webservice-ws-with-resources-config.html">Webservice JAX-WS - Resources
config</a></li>
diff --git a/tomee-9.0/examples/security-custom-identitystore.html
b/tomee-9.0/examples/security-custom-identitystore.html
new file mode 100644
index 0000000..644912e
--- /dev/null
+++ b/tomee-9.0/examples/security-custom-identitystore.html
@@ -0,0 +1,428 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Apache TomEE</title>
+ <meta name="description"
+ content="Apache TomEE is a lightweight, yet powerful, JavaEE
Application server with feature rich tooling." />
+ <meta name="keywords"
content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian"
/>
+ <meta name="author" content="Luka Cvetinovic for Codrops" />
+ <link rel="icon" href="../../favicon.ico">
+ <link rel="icon" type="image/png" href="../../favicon.png">
+ <meta name="msapplication-TileColor" content="#80287a">
+ <meta name="theme-color" content="#80287a">
+ <link rel="stylesheet" type="text/css" href="../../css/normalize.css">
+ <link rel="stylesheet" type="text/css" href="../../css/bootstrap.css">
+ <link rel="stylesheet" type="text/css" href="../../css/owl.css">
+ <link rel="stylesheet" type="text/css" href="../../css/animate.css">
+ <link rel="stylesheet" type="text/css"
href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
+ <link rel="stylesheet" type="text/css"
href="../../fonts/eleganticons/et-icons.css">
+ <link rel="stylesheet" type="text/css" href="../../css/jqtree.css">
+ <link rel="stylesheet" type="text/css" href="../../css/idea.css">
+ <link rel="stylesheet" type="text/css" href="../../css/cardio.css">
+
+ <script type="text/javascript">
+
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-2717626-1']);
+ _gaq.push(['_setDomainName', 'apache.org']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type =
'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+
+ </script>
+</head>
+
+<body>
+ <div class="preloader">
+ <img src="../../img/loader.gif" alt="Preloader image">
+ </div>
+ <nav class="navbar">
+ <div class="container">
+ <div class="row"> <div class="col-md-12">
+
+ <!-- Brand and toggle get grouped for better mobile
display -->
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle
collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+ <span class="sr-only">Toggle
navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="/" title="Apache
TomEE">
+ <span>
+
+
+ <img
+
src="../../img/apache_tomee-logo.svg"
+
onerror="this.src='../../img/apache_tomee-logo.jpg'"
+ height="50"
+ >
+
+
+ </span>
+ </a>
+ </div>
+ <!-- Collect the nav links, forms, and other content
for toggling -->
+ <div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
+ <ul class="nav navbar-nav navbar-right
main-nav">
+ <li><a
href="../../docs.html">Documentation</a></li>
+ <li><a
href="../../community/index.html">Community</a></li>
+ <li><a
href="../../security/security.html">Security</a></li>
+ <li><a class="btn btn-accent
accent-orange no-shadow" href="../../download.html">Downloads</a></li>
+ </ul>
+ </div>
+ <!-- /.navbar-collapse -->
+ </div></div>
+ </div>
+ <!-- /.container-fluid -->
+ </nav>
+
+
+ <div id="main-block" class="container main-block">
+ <div class="row title">
+ <div class="col-md-12">
+ <div class='page-header'>
+
+ <h1>Jakarta Security with a custom identity store</h1>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+
+ <div class="col-md-12">
+ <div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>TomEE has its own independent Jakarta Security implementation <a
href="https://eclipse-ee4j.github.io/security-api/"
class="bare">https://eclipse-ee4j.github.io/security-api/</a> .</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Jakarta Security defines a standard for creating secure Jakarta EE
applications in modern application paradigms. It defines an overarching
(end-user targeted) Security API for Jakarta EE Applications.</p>
+</div>
+<div class="paragraph">
+<p>Jakarta Security builds on the lower level Security SPIs defined by Jakarta
Authentication and Jakarta Authorization, which are both not end-end
targeted.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>As the specification requires, TomEE supports by default JDBC and JDAP
identity stores. It also has a default support for Tomcat’s
'tomcat-users.xml' (See security-tomcat-user-identitystore example).</p>
+</div>
+<div class="paragraph">
+<p>This example will show how you can leverage your own identity store to
authenticate users.
+This is very often required for integrating your systems.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_implement_a_simple_servlet">Implement a simple servlet</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This movie servlet, is a very simple example that defines a
BasicAuthenticationMechanism, some roles and security constraints.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-java"
data-lang="java">@WebServlet("/movies")
+@DeclareRoles({"foo","bar","kaz"})
+@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
+@BasicAuthenticationMechanismDefinition
+public class MovieServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void doGet(final HttpServletRequest request, final
HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String webName = null;
+ if (request.getUserPrincipal() != null) {
+ webName = request.getUserPrincipal().getName();
+ }
+
+ response.getWriter().write(
+ "<html><body> Welcome to Movie servlet
<br><br>\n" +
+
+ "web username: " + webName + "<br><br>\n" +
+
+ "web user has role \"foo\": " + request.isUserInRole("foo") +
"<br>\n" +
+ "web user has role \"bar\": " + request.isUserInRole("bar") +
"<br>\n" +
+ "web user has role \"kaz\": " + request.isUserInRole("kaz") +
"<br><br>");
+ }
+
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>IMPORTANT:</p>
+</div>
+<div class="exampleblock">
+<div class="content">
+<div class="paragraph">
+<p>In TomEE, Jakarta Security is wired in all layers, you can use</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>jakarta.ws.rs.core.SecurityContext#getUserPrincipal</code> and
<code>isUserInRole</code> to get the User Principal and check if the user has a
given role</p>
+</li>
+<li>
+<p><code>jakarta.security.enterprise.SecurityContext#getCallerPrincipal</code>
and <code>isCallerInRole</code> to get the Caller Principal (notice the
difference in terms of naming) and check if a caller has a given role</p>
+</li>
+<li>
+<p><code>jakarta.servlet.http.HttpServletRequest#getUserPrincipal</code> and
<code>isUserInRole</code></p>
+</li>
+<li>
+<p><code>jakarta.ejb.SessionContext#getCallerPrincipal</code> and
<code>isCallerInRole</code></p>
+</li>
+<li>
+<p>the <code>Subject</code> from the <code>PolicyContext</code> but this is
less used</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="paragraph">
+<p>A lot of different APIs to retrieve the principal and check whereas it has
a given role.
+It’s all wired in and consistent in TomEE. No special configuration is
needed.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_create_your_own_identitystore_implementation">Create your own
IdentityStore implementation</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>For the sake of keeping this example as simple as possible, the
<code>TestIdentityStore</code> is very simple.</p>
+</div>
+<div class="paragraph">
+<p>It recognizes only 2 users and only one of them has the right roles to call
the servlet.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-java"
data-lang="java">@ApplicationScoped
+public class TestIdentityStore implements IdentityStore {
+
+ public CredentialValidationResult validate(Credential credential) {
+
+ if (!(credential instanceof UsernamePasswordCredential)) {
+ return INVALID_RESULT;
+ }
+
+ final UsernamePasswordCredential usernamePasswordCredential =
(UsernamePasswordCredential) credential;
+ if (usernamePasswordCredential.compareTo("jon", "doe")) {
+ return new CredentialValidationResult("jon", new
HashSet<>(asList("foo", "bar")));
+ }
+
+ if (usernamePasswordCredential.compareTo("iron", "man")) {
+ return new CredentialValidationResult("iron", new
HashSet<>(Collections.singletonList("avengers")));
+ }
+
+ return INVALID_RESULT;
+ }
+
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>There is nothing else to configure or do.
+The identity store must implement the IdentityStore interface.
+It must be a CDI bean and then TomEE will pick it up automatically and
delegate user authentication.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_running">Running</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Were we to run the above Main class or Test Case we’d see output like
the following:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">....
+INFOS: Starting ProtocolHandler ["http-nio-54313"]
+juin 24, 2021 2:58:42 PM sun.reflect.DelegatingMethodAccessorImpl invoke
+INFOS: Server startup in [4703] milliseconds
+juin 24, 2021 2:58:42 PM sun.reflect.DelegatingMethodAccessorImpl invoke
+INFOS: Full bootstrap in [7638] milliseconds
+
+
+Calling MovieServlet without any credentials provided.
+juin 24, 2021 2:58:43 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[401] contentType=[text/html]
+juin 24, 2021 2:58:43 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 401 –
Unauthorized</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 401 – Unauthorized</h1> [...]
+
+
+Calling MovieServlet with a valid user and valid permissions.
+
+
+Calling MovieServlet with the wrong credentials.
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[401] contentType=[text/html]
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 401 –
Unauthorized</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 401 – Unauthorized</h1> [...]
+
+
+Calling MovieServlet with a valid user but without required permissions.
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: statusCode=[403] contentType=[text/html]
+juin 24, 2021 2:58:44 PM com.gargoylesoftware.htmlunit.WebClient
printContentIfNecessary
+INFOS: <!doctype html><html
lang="en"><head><title>HTTP Status 403 –
Forbidden</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 403 – Forbidden</h1><hr [...]
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_apis_used">APIs Used</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a
href="../../tomee-9.0/javadoc/org/apache/tomee/bootstrap/Archive.html">org.apache.tomee.bootstrap.Archive</a></p>
+</li>
+<li>
+<p><a
href="../../tomee-9.0/javadoc/org/apache/tomee/bootstrap/Server.html">org.apache.tomee.bootstrap.Server</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/annotation/security/DeclareRoles.html">jakarta.annotation.security.DeclareRoles</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/security/enterprise/authentication/mechanism/http/BasicAuthenticationMechanismDefinition.html">jakarta.security.enterprise.authentication.mechanism.http.BasicAuthenticationMechanismDefinition</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/Credential.html">jakarta.security.enterprise.credential.Credential</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/security/enterprise/credential/UsernamePasswordCredential.html">jakarta.security.enterprise.credential.UsernamePasswordCredential</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/CredentialValidationResult.html">jakarta.security.enterprise.identitystore.CredentialValidationResult</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/security/enterprise/identitystore/IdentityStore.html">jakarta.security.enterprise.identitystore.IdentityStore</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/servlet/ServletException.html">jakarta.servlet.ServletException</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/servlet/annotation/HttpConstraint.html">jakarta.servlet.annotation.HttpConstraint</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/servlet/annotation/ServletSecurity.html">jakarta.servlet.annotation.ServletSecurity</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/servlet/annotation/WebServlet.html">jakarta.servlet.annotation.WebServlet</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServlet.html">jakarta.servlet.http.HttpServlet</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletRequest.html">jakarta.servlet.http.HttpServletRequest</a></p>
+</li>
+<li>
+<p><a
href="../../jakartaee-9.0/javadoc/jakarta/servlet/http/HttpServletResponse.html">jakarta.servlet.http.HttpServletResponse</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+ </div>
+
+ </div>
+ </div>
+<div style="margin-bottom: 30px;"></div>
+<footer>
+ <div class="container">
+ <div class="row">
+ <div class="col-sm-6 text-center-mobile">
+ <h3 class="white">Be simple. Be
certified. Be Tomcat.</h3>
+ <h5 class="light regular
light-white">"A good application in a good server"</h5>
+ <ul class="social-footer">
+ <li><a
href="https://www.facebook.com/ApacheTomEE/"><i class="fa
fa-facebook"></i></a></li>
+ <li><a
href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
+ </ul>
+ </div>
+ <div class="col-sm-6 text-center-mobile">
+ <div class="row opening-hours">
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../latest/docs/" class="white">Documentation</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../latest/docs/admin/configuration/index.html" class="regular
light-white">How to configure</a></li>
+ <li><a
href="../../latest/docs/admin/file-layout.html" class="regular
light-white">Dir. Structure</a></li>
+ <li><a
href="../../latest/docs/developer/testing/index.html" class="regular
light-white">Testing</a></li>
+ <li><a
href="../../latest/docs/admin/cluster/index.html" class="regular
light-white">Clustering</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../latest/examples/" class="white">Examples</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../latest/examples/simple-cdi-interceptor.html" class="regular
light-white">CDI Interceptor</a></li>
+ <li><a
href="../../latest/examples/rest-cdi.html" class="regular light-white">REST
with CDI</a></li>
+ <li><a
href="../../latest/examples/ejb-examples.html" class="regular
light-white">EJB</a></li>
+ <li><a
href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular
light-white">JSF</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../community/index.html" class="white">Community</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="../../community/contributors.html" class="regular
light-white">Contributors</a></li>
+ <li><a
href="../../community/social.html" class="regular light-white">Social</a></li>
+ <li><a
href="../../community/sources.html" class="regular light-white">Sources</a></li>
+ </ul>
+ </div>
+ <div class="col-sm-3
text-center-mobile">
+ <h5><a
href="../../security/index.html" class="white">Security</a></h5>
+ <ul
class="list-unstyled">
+ <li><a
href="http://apache.org/security" target="_blank" class="regular
light-white">Apache Security</a></li>
+ <li><a
href="http://apache.org/security/projects.html" target="_blank" class="regular
light-white">Security Projects</a></li>
+ <li><a
href="http://cve.mitre.org" target="_blank" class="regular
light-white">CVE</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row bottom-footer text-center-mobile">
+ <div class="col-sm-12 light-white">
+ <p>Copyright © 1999-2021 The
Apache Software Foundation, Licensed under the Apache License, Version 2.0.
Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE
project logo are trademarks of The Apache Software Foundation. All other marks
mentioned may be trademarks or registered trademarks of their respective
owners.</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+ <!-- Holder for mobile navigation -->
+ <div class="mobile-nav">
+ <ul>
+ <li><a hef="../../latest/docs/admin/index.html">Administrators</a>
+ <li><a hef="../../latest/docs/developer/index.html">Developers</a>
+ <li><a hef="../../latest/docs/advanced/index.html">Advanced</a>
+ <li><a hef="../../community/index.html">Community</a>
+ </ul>
+ <a href="#" class="close-link"><i class="arrow_up"></i></a>
+ </div>
+ <!-- Scripts -->
+ <script src="../../js/jquery-1.11.1.min.js"></script>
+ <script src="../../js/owl.carousel.min.js"></script>
+ <script src="../../js/bootstrap.min.js"></script>
+ <script src="../../js/wow.min.js"></script>
+ <script src="../../js/typewriter.js"></script>
+ <script src="../../js/jquery.onepagenav.js"></script>
+ <script src="../../js/tree.jquery.js"></script>
+ <script src="../../js/highlight.pack.js"></script>
+ <script src="../../js/main.js"></script>
+ </body>
+
+</html>
+
diff --git a/tomee-9.0/javadoc/org/apache/tomee/bootstrap/Archive.html
b/tomee-9.0/javadoc/org/apache/tomee/bootstrap/Archive.html
index c780b26..02b4f9c 100644
--- a/tomee-9.0/javadoc/org/apache/tomee/bootstrap/Archive.html
+++ b/tomee-9.0/javadoc/org/apache/tomee/bootstrap/Archive.html
@@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
extends java.lang.Object</pre>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
+<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../ [...]
</dl>
diff --git a/tomee-9.0/javadoc/org/apache/tomee/bootstrap/Server.html
b/tomee-9.0/javadoc/org/apache/tomee/bootstrap/Server.html
index f5f7eb7..acf9ac2 100644
--- a/tomee-9.0/javadoc/org/apache/tomee/bootstrap/Server.html
+++ b/tomee-9.0/javadoc/org/apache/tomee/bootstrap/Server.html
@@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
extends java.lang.Object</pre>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
-<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
+<dd><a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../tomee-9.0/ex [...]
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-webprofile.html">serverless-tomee-webprofile</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plus.html">serverless-tomee-plus</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-plume.html">serverless-tomee-plume</a>,
<a
href="../../../../../../../tomee-9.0/pt/examples/serverless-tomee-microprofile.html">serverless-tomee-microprofile</a>,
<a href="../../../../../../../ [...]
</dl>