keycloak-developers

Details

diff --git a/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfiguration.java b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfiguration.java
index e9056e2..f48929d 100755
--- a/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfiguration.java
+++ b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfiguration.java
@@ -17,6 +17,9 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import java.util.HashSet;
+import java.util.Set;
+
 /**
  * Keycloak authentication integration for Spring Boot
  *
@@ -65,16 +68,52 @@ public class KeycloakSpringBootConfiguration {
                 loginConfig.setAuthMethod("KEYCLOAK");
                 context.setLoginConfig(loginConfig);
 
-                context.addSecurityRole("jimmiapprole");
+                Set<String> authRoles = new HashSet<String>();
+                for (KeycloakSpringBootProperties.SecurityConstraint constraint : keycloakProperties.getSecurityConstraints()) {
+                    for (KeycloakSpringBootProperties.SecurityCollection collection : constraint.getSecurityCollections()) {
+                        for (String authRole : collection.getAuthRoles()) {
+                            if (!authRoles.contains(authRole)) {
+                                context.addSecurityRole(authRole);
+                                authRoles.add(authRole);
+                            }
+                        }
+                    }
+                }
+
+                for (KeycloakSpringBootProperties.SecurityConstraint constraint : keycloakProperties.getSecurityConstraints()) {
+                    SecurityConstraint tomcatConstraint = new SecurityConstraint();
+
+                    for (KeycloakSpringBootProperties.SecurityCollection collection : constraint.getSecurityCollections()) {
+                        SecurityCollection tomcatSecCollection = new SecurityCollection();
+
+                        if (collection.getName() != null) {
+                            tomcatSecCollection.setName(collection.getName());
+                        }
+                        if (collection.getDescription() != null) {
+                            tomcatSecCollection.setDescription(collection.getDescription());
+                        }
 
-                SecurityConstraint constraint = new SecurityConstraint();
-                constraint.addAuthRole("jimmiapprole");
+                        for (String authRole : collection.getAuthRoles()) {
+                            tomcatConstraint.addAuthRole(authRole);
+                        }
 
-                SecurityCollection collection = new SecurityCollection();
-                collection.addPattern("/*");
-                constraint.addCollection(collection);
+                        for (String pattern : collection.getPatterns()) {
+                            tomcatSecCollection.addPattern(pattern);
+                        }
 
-                context.addConstraint(constraint);
+                        for (String method : collection.getMethods()) {
+                            tomcatSecCollection.addMethod(method);
+                        }
+
+                        for (String method : collection.getOmittedMethods()) {
+                            tomcatSecCollection.addOmittedMethod(method);
+                        }
+
+                        tomcatConstraint.addCollection(tomcatSecCollection);
+                    }
+
+                    context.addConstraint(tomcatConstraint);
+                }
 
                 context.addParameter("keycloak.config.resolver", KeycloakSpringBootConfigResolver.class.getName());
             }
diff --git a/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootProperties.java b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootProperties.java
index ee922d1..18ec791 100644
--- a/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootProperties.java
+++ b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootProperties.java
@@ -3,7 +3,88 @@ package org.keycloak.adapters.springboot;
 import org.keycloak.representations.adapters.config.AdapterConfig;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @ConfigurationProperties(prefix = "keycloak", ignoreUnknownFields = false)
 public class KeycloakSpringBootProperties extends AdapterConfig {
 
+    private List<SecurityConstraint> securityConstraints = new ArrayList<SecurityConstraint>();
+
+    public static class SecurityConstraint {
+        private List<SecurityCollection> securityCollections = new ArrayList<SecurityCollection>();
+
+        public List<SecurityCollection> getSecurityCollections() {
+            return securityCollections;
+        }
+
+        public void setSecurityCollections(List<SecurityCollection> securityCollections) {
+            this.securityCollections = securityCollections;
+        }
+    }
+
+    public static class SecurityCollection {
+        private String name;
+        private String description;
+        private List<String> authRoles = new ArrayList<String>();
+        private List<String> patterns = new ArrayList<String>();
+        private List<String> methods = new ArrayList<String>();
+        private List<String> omittedMethods = new ArrayList<String>();
+
+        public List<String> getAuthRoles() {
+            return authRoles;
+        }
+
+        public List<String> getPatterns() {
+            return patterns;
+        }
+
+        public List<String> getMethods() {
+            return methods;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public List<String> getOmittedMethods() {
+            return omittedMethods;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public void setDescription(String description) {
+            this.description = description;
+        }
+
+        public void setAuthRoles(List<String> authRoles) {
+            this.authRoles = authRoles;
+        }
+
+        public void setPatterns(List<String> patterns) {
+            this.patterns = patterns;
+        }
+
+        public void setMethods(List<String> methods) {
+            this.methods = methods;
+        }
+
+        public void setOmittedMethods(List<String> omittedMethods) {
+            this.omittedMethods = omittedMethods;
+        }
+    }
+
+    public List<SecurityConstraint> getSecurityConstraints() {
+        return securityConstraints;
+    }
+
+    public void setSecurityConstraints(List<SecurityConstraint> securityConstraints) {
+        this.securityConstraints = securityConstraints;
+    }
 }