getRoles() {
+ return roles;
+ }
+
+ public void addRole(String role) {
+ roles.add(role);
+ }
+}
\ No newline at end of file
diff --git a/java-ee-8-security-api/app-auth-custom-no-store/src/main/liberty/config/server.xml b/java-ee-8-security-api/app-auth-custom-no-store/src/main/liberty/config/server.xml
new file mode 100644
index 0000000000..c49adff459
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-custom-no-store/src/main/liberty/config/server.xml
@@ -0,0 +1,9 @@
+
+
+
+ webProfile-8.0
+
+
+
+
diff --git a/java-ee-8-security-api/app-auth-custom-no-store/src/main/webapp/login-error.html b/java-ee-8-security-api/app-auth-custom-no-store/src/main/webapp/login-error.html
new file mode 100644
index 0000000000..bd7263e0fb
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-custom-no-store/src/main/webapp/login-error.html
@@ -0,0 +1,10 @@
+
+
+
+
+ Title
+
+
+Authentication Error
+
+
\ No newline at end of file
diff --git a/java-ee-8-security-api/app-auth-custom-no-store/src/main/webapp/login.html b/java-ee-8-security-api/app-auth-custom-no-store/src/main/webapp/login.html
new file mode 100644
index 0000000000..3336eb5513
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-custom-no-store/src/main/webapp/login.html
@@ -0,0 +1,25 @@
+
+
+
+
+ Title
+
+
+
+ Form-based Authentication
+
+
+
+
\ No newline at end of file
diff --git a/java-ee-8-security-api/app-auth-form-store-ldap/pom.xml b/java-ee-8-security-api/app-auth-form-store-ldap/pom.xml
new file mode 100644
index 0000000000..570b36add5
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-form-store-ldap/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+ app-auth-form-store-ldap
+ war
+
+
+ com.baeldung
+ java-ee-8-security-api
+ 1.0-SNAPSHOT
+
+
+
+
+ com.unboundid
+ unboundid-ldapsdk
+ 4.0.4
+
+
+
+
+
+
+ net.wasdev.wlp.maven.plugins
+ liberty-maven-plugin
+
+
+ install-server
+ prepare-package
+
+ install-server
+ create-server
+ install-feature
+
+
+
+ install-apps
+ package
+
+ install-apps
+
+
+
+
+
+
+
diff --git a/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/AdminServlet.java b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/AdminServlet.java
new file mode 100644
index 0000000000..32adbf1abb
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/AdminServlet.java
@@ -0,0 +1,22 @@
+package com.baeldung.javaee.security;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.HttpConstraint;
+import javax.servlet.annotation.ServletSecurity;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@WebServlet("/admin")
+@ServletSecurity(value = @HttpConstraint(rolesAllowed = {"admin_role"}))
+public class AdminServlet extends HttpServlet {
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ response.getWriter().append("User :" + request.getUserPrincipal().getName() + "\n");
+ response.getWriter().append("User in Role user_role :" + request.isUserInRole("user_role") + "\n");
+ response.getWriter().append("User in Role admin_role :" + request.isUserInRole("admin_role"));
+ }
+}
\ No newline at end of file
diff --git a/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/AppConfig.java b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/AppConfig.java
new file mode 100644
index 0000000000..6fd9672e8a
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/AppConfig.java
@@ -0,0 +1,22 @@
+package com.baeldung.javaee.security;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.security.enterprise.authentication.mechanism.http.FormAuthenticationMechanismDefinition;
+import javax.security.enterprise.authentication.mechanism.http.LoginToContinue;
+import javax.security.enterprise.identitystore.LdapIdentityStoreDefinition;
+
+@FormAuthenticationMechanismDefinition(
+ loginToContinue = @LoginToContinue(
+ loginPage = "/login.html",
+ errorPage = "/login-error.html"
+ )
+)
+@LdapIdentityStoreDefinition(
+ url = "ldap://localhost:10389",
+ callerBaseDn = "ou=caller,dc=baeldung,dc=com",
+ groupSearchBase = "ou=group,dc=baeldung,dc=com",
+ groupSearchFilter = "(&(member=%s)(objectClass=groupOfNames))"
+)
+@ApplicationScoped
+public class AppConfig {
+}
diff --git a/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/LdapSetupServlet.java b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/LdapSetupServlet.java
new file mode 100644
index 0000000000..e55fe0d2a7
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/LdapSetupServlet.java
@@ -0,0 +1,45 @@
+package com.baeldung.javaee.security;
+
+import com.unboundid.ldap.listener.InMemoryDirectoryServer;
+import com.unboundid.ldap.listener.InMemoryDirectoryServerConfig;
+import com.unboundid.ldap.listener.InMemoryListenerConfig;
+import com.unboundid.ldap.sdk.LDAPException;
+import com.unboundid.ldif.LDIFReader;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+
+@WebServlet(value = "/init-ldap", loadOnStartup = 1)
+public class LdapSetupServlet extends HttpServlet {
+
+ private InMemoryDirectoryServer inMemoryDirectoryServer;
+
+ @Override
+ public void init() throws ServletException {
+ super.init();
+ initLdap();
+ System.out.println("@@@START_");
+ }
+
+ private void initLdap() {
+ try {
+ InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig("dc=baeldung,dc=com");
+ config.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig("default", 10389));
+ config.setSchema(null);
+ inMemoryDirectoryServer = new InMemoryDirectoryServer(config);
+ inMemoryDirectoryServer.importFromLDIF(true,
+ new LDIFReader(this.getClass().getResourceAsStream("/users.ldif")));
+ inMemoryDirectoryServer.startListening();
+ } catch (LDAPException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void destroy() {
+ super.destroy();
+ inMemoryDirectoryServer.shutDown(true);
+ System.out.println("@@@END");
+ }
+}
diff --git a/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/UserServlet.java b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/UserServlet.java
new file mode 100644
index 0000000000..9f14cd8817
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/java/com/baeldung/javaee/security/UserServlet.java
@@ -0,0 +1,22 @@
+package com.baeldung.javaee.security;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.HttpConstraint;
+import javax.servlet.annotation.ServletSecurity;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+
+@WebServlet("/user")
+@ServletSecurity(value = @HttpConstraint(rolesAllowed = {"user_role"}))
+public class UserServlet extends HttpServlet {
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ response.getWriter().append("User :" + request.getUserPrincipal().getName() + "\n");
+ response.getWriter().append("User in Role user_role :" + request.isUserInRole("user_role") + "\n");
+ response.getWriter().append("User in Role admin_role :" + request.isUserInRole("admin_role"));
+ }
+}
diff --git a/java-ee-8-security-api/app-auth-form-store-ldap/src/main/liberty/config/server.xml b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/liberty/config/server.xml
new file mode 100644
index 0000000000..c49adff459
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/liberty/config/server.xml
@@ -0,0 +1,9 @@
+
+
+
+ webProfile-8.0
+
+
+
+
diff --git a/java-ee-8-security-api/app-auth-form-store-ldap/src/main/resources/users.ldif b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/resources/users.ldif
new file mode 100644
index 0000000000..538249aab7
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/resources/users.ldif
@@ -0,0 +1,47 @@
+dn: dc=baeldung,dc=com
+objectclass: top
+objectclass: dcObject
+objectclass: organization
+dc: baeldung
+o: baeldung
+
+dn: ou=caller,dc=baeldung,dc=com
+objectclass: top
+objectclass: organizationalUnit
+ou: caller
+
+dn: ou=group,dc=baeldung,dc=com
+objectclass: top
+objectclass: organizationalUnit
+ou: group
+
+dn: uid=admin,ou=caller,dc=baeldung,dc=com
+objectclass: top
+objectclass: uidObject
+objectclass: person
+uid: admin
+cn: Administrator
+sn: Admin
+userPassword: passadmin
+
+dn: uid=user,ou=caller,dc=baeldung,dc=com
+objectclass: top
+objectclass: uidObject
+objectclass: person
+uid: user
+cn: User
+sn: User
+userPassword: passuser
+
+dn: cn=admin_role,ou=group,dc=baeldung,dc=com
+objectclass: top
+objectclass: groupOfNames
+cn: admin_role
+member: uid=admin,ou=caller,dc=baeldung,dc=com
+
+dn: cn=user_role,ou=group,dc=baeldung,dc=com
+objectclass: top
+objectclass: groupOfNames
+cn: user_role
+member: uid=admin,ou=caller,dc=baeldung,dc=com
+member: uid=user,ou=caller,dc=baeldung,dc=com
diff --git a/java-ee-8-security-api/app-auth-form-store-ldap/src/main/webapp/login-error.html b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/webapp/login-error.html
new file mode 100644
index 0000000000..bd7263e0fb
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/webapp/login-error.html
@@ -0,0 +1,10 @@
+
+
+
+
+ Title
+
+
+Authentication Error
+
+
\ No newline at end of file
diff --git a/java-ee-8-security-api/app-auth-form-store-ldap/src/main/webapp/login.html b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/webapp/login.html
new file mode 100644
index 0000000000..3336eb5513
--- /dev/null
+++ b/java-ee-8-security-api/app-auth-form-store-ldap/src/main/webapp/login.html
@@ -0,0 +1,25 @@
+
+
+
+
+ Title
+
+
+
+ Form-based Authentication
+
+
+
+
\ No newline at end of file
diff --git a/java-ee-8-security-api/pom.xml b/java-ee-8-security-api/pom.xml
new file mode 100644
index 0000000000..cdc288f469
--- /dev/null
+++ b/java-ee-8-security-api/pom.xml
@@ -0,0 +1,73 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ java-ee-8-security-api
+ 1.0-SNAPSHOT
+ pom
+
+
+ 1.8
+ 1.8
+ UTF-8
+
+ 9080
+ 9443
+
+ 8.0
+ 2.3
+ 18.0.0.1
+ 1.4.197
+
+
+
+ app-auth-basic-store-db
+ app-auth-form-store-ldap
+ app-auth-custom-form-store-custom
+ app-auth-custom-no-store
+
+
+
+
+ javax
+ javaee-web-api
+ ${javaee-version}
+ provided
+
+
+
+
+
+
+ maven-war-plugin
+
+ false
+ pom.xml
+
+
+
+ net.wasdev.wlp.maven.plugins
+ liberty-maven-plugin
+ ${liberty-maven-plugin.version}
+
+
+
+ https://public.dhe.ibm.com/ibmdl/export/pub/software/openliberty/runtime/nightly/2018-05-25_1422/openliberty-all-20180525-1300.zip
+
+
+ true
+ project
+ src/main/liberty/config/server.xml
+ true
+
+ ${defaultHttpPort}
+ ${defaultHttpsPort}
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 71f2a846fb..f3ef55e8cf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -260,6 +260,7 @@
java-spi
performance-tests
twilio
+ java-ee-8-security-api