From 04a2e829d8d0cb44d80c4a07ee0d82435007648c Mon Sep 17 00:00:00 2001 From: michaelcgood <31810784+michaelcgood@users.noreply.github.com> Date: Mon, 18 Sep 2017 14:22:22 -0400 Subject: [PATCH 1/4] michael.good703@gmail.com michael.good703@gmail.com --- .../com/baeldung/constructorditwo/Config.java | 23 +++++++++++ .../constructorditwo/SpringRunner.java | 32 +++++++++++++++ .../constructorditwo/domain/Artist.java | 18 +++++++++ .../constructorditwo/domain/Music.java | 24 +++++++++++ .../constructorditwo/domain/Song.java | 15 +++++++ .../java/com/baeldung/setterditwo/Config.java | 28 +++++++++++++ .../baeldung/setterditwo/SpringRunner.java | 33 +++++++++++++++ .../baeldung/setterditwo/domain/Artist.java | 38 ++++++++++++++++++ .../baeldung/setterditwo/domain/Music.java | 40 +++++++++++++++++++ .../com/baeldung/setterditwo/domain/Song.java | 27 +++++++++++++ .../src/main/resources/constructorditwo.xml | 20 ++++++++++ .../src/main/resources/setterditwo.xml | 20 ++++++++++ .../src/main/webapp/META-INF/MANIFEST.MF | 3 ++ 13 files changed, 321 insertions(+) create mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/Config.java create mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java create mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/domain/Artist.java create mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/domain/Music.java create mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/domain/Song.java create mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/Config.java create mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java create mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/domain/Artist.java create mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/domain/Music.java create mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/domain/Song.java create mode 100644 spring-core/src/main/resources/constructorditwo.xml create mode 100644 spring-core/src/main/resources/setterditwo.xml create mode 100644 spring-jms/src/main/webapp/META-INF/MANIFEST.MF diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java b/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java new file mode 100644 index 000000000000..bb5a31f1fdc4 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java @@ -0,0 +1,23 @@ +package com.baeldung.constructorditwo; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.constructorditwo.domain.Artist; +import com.baeldung.constructorditwo.domain.Song; + +@Configuration +@ComponentScan("com.baeldung.constructorditwo") +public class Config { + + @Bean + public Artist artist() { + return new Artist("Yo-Ya Ma", 61); + } + + @Bean + public Song song() { + return new Song("Joy to the World"); + } +} diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java b/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java new file mode 100644 index 000000000000..f2199e0ca35c --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java @@ -0,0 +1,32 @@ +package com.baeldung.constructorditwo; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.constructorditwo.Config; +import com.baeldung.constructorditwo.domain.Music; + +public class SpringRunner { + public static void main(String[] args) { + Music OnTheRadio = getMusicFromXml(); + + System.out.println(OnTheRadio); + + OnTheRadio = getMusicFromJavaConfig(); + + System.out.println(OnTheRadio); + } + + private static Music getMusicFromJavaConfig() { + ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); + + return context.getBean(Music.class); + } + + private static Music getMusicFromXml() { + ApplicationContext context = new ClassPathXmlApplicationContext("constructorditwo.xml"); + + return context.getBean(Music.class); + } +} diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Artist.java b/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Artist.java new file mode 100644 index 000000000000..2baba3f1e63a --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Artist.java @@ -0,0 +1,18 @@ +package com.baeldung.constructorditwo.domain; + +public class Artist { + + private String name; + private int age; + + public Artist (String name, int age){ + this.name= name; + this.age= age; + } + + @Override + public String toString() { + return String.format("%s %d", name, age); + } + +} diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Music.java b/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Music.java new file mode 100644 index 000000000000..8a1d94da3885 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Music.java @@ -0,0 +1,24 @@ +package com.baeldung.constructorditwo.domain; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Music { + + private Artist artist; + private Song song; + + @Autowired + public Music(Artist artist, Song song){ + this.artist = artist; + this.song = song; + } + + @Override + public String toString() { + return String.format("Artist: %s Song: %s", artist, song); + } + + +} diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Song.java b/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Song.java new file mode 100644 index 000000000000..e1e8c8b964b0 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Song.java @@ -0,0 +1,15 @@ +package com.baeldung.constructorditwo.domain; + +public class Song { + + private String name; + + public Song (String name){ + this.name = name; + } + + @Override + public String toString() { + return String.format("%s", name); + } +} diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/Config.java b/spring-core/src/main/java/com/baeldung/setterditwo/Config.java new file mode 100644 index 000000000000..f0a11c6a2894 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterditwo/Config.java @@ -0,0 +1,28 @@ +package com.baeldung.setterditwo; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.setterditwo.domain.Artist; +import com.baeldung.setterditwo.domain.Song; + +@Configuration +@ComponentScan("com.baeldung.setterditwo") +public class Config { + + @Bean + public Artist artist() { + Artist artist = new Artist(); + artist.setName("Yo-Yo Ma"); + artist.setAge(61); + return artist; + } + + @Bean + public Song song() { + Song song = new Song(); + song.setName("Joy to the World"); + return song; + } +} \ No newline at end of file diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java b/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java new file mode 100644 index 000000000000..9dd17b49adaf --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java @@ -0,0 +1,33 @@ +package com.baeldung.setterditwo; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.setterditwo.Config; +import com.baeldung.setterditwo.domain.Music; + +public class SpringRunner { + public static void main(String[] args) { + Music OnTheRadio = getMusicFromXml(); + + System.out.println(OnTheRadio); + + OnTheRadio = getMusicFromJavaConfig(); + + System.out.println(OnTheRadio); + + } + + private static Music getMusicFromJavaConfig() { + ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); + + return context.getBean(Music.class); + } + + private static Music getMusicFromXml() { + ApplicationContext context = new ClassPathXmlApplicationContext("setterditwo.xml"); + + return context.getBean(Music.class); + } +} diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/domain/Artist.java b/spring-core/src/main/java/com/baeldung/setterditwo/domain/Artist.java new file mode 100644 index 000000000000..52b7104d4973 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterditwo/domain/Artist.java @@ -0,0 +1,38 @@ +package com.baeldung.setterditwo.domain; + +public class Artist { + + private String name; + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + private int age; + + public Artist (String name, int age){ + this.name= name; + this.age= age; + } + + @Override + public String toString() { + return String.format("%s %d", name, age); + } + + public Artist(){ + + }; + +} diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/domain/Music.java b/spring-core/src/main/java/com/baeldung/setterditwo/domain/Music.java new file mode 100644 index 000000000000..9ecfb3b7b282 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterditwo/domain/Music.java @@ -0,0 +1,40 @@ +package com.baeldung.setterditwo.domain; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Music { + private Artist artist; + private Song song; + + + @Autowired + public void setArtist(Artist artist) { + this.artist = artist; + } + + @Autowired + public void setSong(Song song) { + this.song = song; + } + + public Artist getArtist() { + return artist; + } + + public Song getSong() { + return song; + } + + public Music() { + + } + + @Override + public String toString() { + return String.format("Artist: %s Song: %s", artist, song); + } + + +} diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/domain/Song.java b/spring-core/src/main/java/com/baeldung/setterditwo/domain/Song.java new file mode 100644 index 000000000000..dbad1b50304b --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterditwo/domain/Song.java @@ -0,0 +1,27 @@ +package com.baeldung.setterditwo.domain; + +public class Song { + + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Song (String name){ + this.name = name; + } + + public Song(){ + + }; + + @Override + public String toString() { + return String.format("%s", name); + } +} \ No newline at end of file diff --git a/spring-core/src/main/resources/constructorditwo.xml b/spring-core/src/main/resources/constructorditwo.xml new file mode 100644 index 000000000000..418827d91875 --- /dev/null +++ b/spring-core/src/main/resources/constructorditwo.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-core/src/main/resources/setterditwo.xml b/spring-core/src/main/resources/setterditwo.xml new file mode 100644 index 000000000000..805c55db1d27 --- /dev/null +++ b/spring-core/src/main/resources/setterditwo.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-jms/src/main/webapp/META-INF/MANIFEST.MF b/spring-jms/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 000000000000..5e9495128c03 --- /dev/null +++ b/spring-jms/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + From c16a06aea4017fe58387b99d495fc5aa6282fd46 Mon Sep 17 00:00:00 2001 From: michaelcgood <31810784+michaelcgood@users.noreply.github.com> Date: Tue, 17 Oct 2017 18:44:31 -0400 Subject: [PATCH 2/4] michael.good703@gmail.com michael.good703@gmail.com --- .../com/baeldung/constructorditwo/Config.java | 2 +- .../constructorditwo/SpringRunner.java | 4 +-- .../baeldung/setterditwo/SpringRunner.java | 4 +-- .../ConstructorInjectionTest.java | 29 +++++++++++++++++++ .../setterditwo/SetterInjectionTest.java | 29 +++++++++++++++++++ 5 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 spring-core/src/test/java/com/baeldung/constructorditwo/ConstructorInjectionTest.java create mode 100644 spring-core/src/test/java/com/baeldung/setterditwo/SetterInjectionTest.java diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java b/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java index bb5a31f1fdc4..0717bc570962 100644 --- a/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java +++ b/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java @@ -13,7 +13,7 @@ public class Config { @Bean public Artist artist() { - return new Artist("Yo-Ya Ma", 61); + return new Artist("Yo-Yo Ma", 61); } @Bean diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java b/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java index f2199e0ca35c..c13fa46149d0 100644 --- a/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java +++ b/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java @@ -18,13 +18,13 @@ public static void main(String[] args) { System.out.println(OnTheRadio); } - private static Music getMusicFromJavaConfig() { + public static Music getMusicFromJavaConfig() { ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); return context.getBean(Music.class); } - private static Music getMusicFromXml() { + public static Music getMusicFromXml() { ApplicationContext context = new ClassPathXmlApplicationContext("constructorditwo.xml"); return context.getBean(Music.class); diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java b/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java index 9dd17b49adaf..7e7266c6337a 100644 --- a/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java +++ b/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java @@ -19,13 +19,13 @@ public static void main(String[] args) { } - private static Music getMusicFromJavaConfig() { + public static Music getMusicFromJavaConfig() { ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); return context.getBean(Music.class); } - private static Music getMusicFromXml() { + public static Music getMusicFromXml() { ApplicationContext context = new ClassPathXmlApplicationContext("setterditwo.xml"); return context.getBean(Music.class); diff --git a/spring-core/src/test/java/com/baeldung/constructorditwo/ConstructorInjectionTest.java b/spring-core/src/test/java/com/baeldung/constructorditwo/ConstructorInjectionTest.java new file mode 100644 index 000000000000..8a27f8b68249 --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/constructorditwo/ConstructorInjectionTest.java @@ -0,0 +1,29 @@ +package com.baeldung.constructorditwo; + +import static com.baeldung.constructorditwo.SpringRunner.getMusicFromJavaConfig; +import static com.baeldung.constructorditwo.SpringRunner.getMusicFromXml; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import com.baeldung.constructorditwo.domain.Music; + +@RunWith(SpringJUnit4ClassRunner.class) +public class ConstructorInjectionTest { + + @Test + public void givenConstructorInjection_ThenValidDependency() { + Music OnTheRadio = getMusicFromXml(); + + assertNotNull(OnTheRadio); + assertEquals("Artist: Yo-Yo Ma 61 Song: Joy to the World", OnTheRadio.toString()); + + OnTheRadio = getMusicFromJavaConfig(); + + assertNotNull(OnTheRadio); + assertEquals("Artist: Yo-Yo Ma 61 Song: Joy to the World", OnTheRadio.toString()); + } + +} diff --git a/spring-core/src/test/java/com/baeldung/setterditwo/SetterInjectionTest.java b/spring-core/src/test/java/com/baeldung/setterditwo/SetterInjectionTest.java new file mode 100644 index 000000000000..df3fa9e779e9 --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/setterditwo/SetterInjectionTest.java @@ -0,0 +1,29 @@ +package com.baeldung.setterditwo; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import com.baeldung.setterditwo.domain.Music; +import static com.baeldung.setterditwo.SpringRunner.getMusicFromJavaConfig; +import static com.baeldung.setterditwo.SpringRunner.getMusicFromXml; + +@RunWith(SpringJUnit4ClassRunner.class) +public class SetterInjectionTest { + + @Test + public void givenInjectAnnotation_WhenOnField_ThenValidDependency() { + Music OnTheRadio = getMusicFromXml(); + + assertNotNull(OnTheRadio); + assertEquals("Artist: Yo-Yo Ma 61 Song: Joy to the World", OnTheRadio.toString()); + + OnTheRadio = getMusicFromJavaConfig(); + + assertNotNull(OnTheRadio); + assertEquals("Artist: Yo-Yo Ma 61 Song: Joy to the World", OnTheRadio.toString()); + } + +} From b22e29cf3a75f77ee0d31f993230ad92cbbefdff Mon Sep 17 00:00:00 2001 From: michaelcgood <31810784+michaelcgood@users.noreply.github.com> Date: Thu, 26 Oct 2017 14:56:19 -0400 Subject: [PATCH 3/4] michael.good703@gmail.com michael.good703@gmail.com --- spring-boot/.factorypath | 149 ++++++++++++++++++ spring-boot/.gitignore | 1 + spring-boot/pom.xml | 16 +- .../java/com/baeldung/keycloak/Customer.java | 42 +++++ .../com/baeldung/keycloak/CustomerDAO.java | 7 + .../com/baeldung/keycloak/SecurityConfig.java | 52 ++++++ .../com/baeldung/keycloak/SpringBoot.java | 13 ++ .../com/baeldung/keycloak/WebController.java | 52 ++++++ .../src/main/resources/application.properties | 7 + .../main/resources/templates/customers.html | 33 ++++ .../main/resources/templates/external.html | 31 ++++ .../src/main/resources/templates/layout.html | 18 +++ .../keycloak/KeycloakConfigurationTest.java | 53 +++++++ 13 files changed, 473 insertions(+), 1 deletion(-) create mode 100644 spring-boot/.factorypath create mode 100644 spring-boot/src/main/java/com/baeldung/keycloak/Customer.java create mode 100644 spring-boot/src/main/java/com/baeldung/keycloak/CustomerDAO.java create mode 100644 spring-boot/src/main/java/com/baeldung/keycloak/SecurityConfig.java create mode 100644 spring-boot/src/main/java/com/baeldung/keycloak/SpringBoot.java create mode 100644 spring-boot/src/main/java/com/baeldung/keycloak/WebController.java create mode 100644 spring-boot/src/main/resources/templates/customers.html create mode 100644 spring-boot/src/main/resources/templates/external.html create mode 100644 spring-boot/src/main/resources/templates/layout.html create mode 100644 spring-boot/src/test/java/com/baeldung/keycloak/KeycloakConfigurationTest.java diff --git a/spring-boot/.factorypath b/spring-boot/.factorypath new file mode 100644 index 000000000000..aa15485f5ca7 --- /dev/null +++ b/spring-boot/.factorypath @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-boot/.gitignore b/spring-boot/.gitignore index e26d6af43896..a64317df5e34 100644 --- a/spring-boot/.gitignore +++ b/spring-boot/.gitignore @@ -2,3 +2,4 @@ .settings/ .classpath .project +/.apt_generated/ diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index 9d44de64a3cb..583aaf2984c0 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -24,7 +24,10 @@ org.springframework.boot spring-boot-starter-web - + + org.keycloak + keycloak-spring-boot-starter + org.springframework.boot spring-boot-starter-data-jpa @@ -170,6 +173,17 @@ artemis-server + + + + org.keycloak.bom + keycloak-adapter-bom + 3.3.0.CR2 + pom + import + + + spring-boot diff --git a/spring-boot/src/main/java/com/baeldung/keycloak/Customer.java b/spring-boot/src/main/java/com/baeldung/keycloak/Customer.java new file mode 100644 index 000000000000..c35eebf4c551 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/keycloak/Customer.java @@ -0,0 +1,42 @@ +package com.baeldung.keycloak; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Customer { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + private String name; + private String serviceRendered; + private String address; + + public long getId() { + return id; + } + public void setId(long id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getServiceRendered() { + return serviceRendered; + } + public void setServiceRendered(String serviceRendered) { + this.serviceRendered = serviceRendered; + } + public String getAddress() { + return address; + } + public void setAddress(String address) { + this.address = address; + } + +} diff --git a/spring-boot/src/main/java/com/baeldung/keycloak/CustomerDAO.java b/spring-boot/src/main/java/com/baeldung/keycloak/CustomerDAO.java new file mode 100644 index 000000000000..20d992d33562 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/keycloak/CustomerDAO.java @@ -0,0 +1,7 @@ +package com.baeldung.keycloak; + +import org.springframework.data.repository.CrudRepository; + +public interface CustomerDAO extends CrudRepository { + +} diff --git a/spring-boot/src/main/java/com/baeldung/keycloak/SecurityConfig.java b/spring-boot/src/main/java/com/baeldung/keycloak/SecurityConfig.java new file mode 100644 index 000000000000..4ecb62b6d479 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/keycloak/SecurityConfig.java @@ -0,0 +1,52 @@ +package com.baeldung.keycloak; + +import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver; +import org.keycloak.adapters.springsecurity.KeycloakSecurityComponents; +import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider; +import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper; +import org.springframework.security.core.session.SessionRegistryImpl; +import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy; +import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy; + +@Configuration +@EnableWebSecurity +@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class) +class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { + // Submits the KeycloakAuthenticationProvider to the AuthenticationManager + @Autowired + public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { + KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider(); + keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper()); + auth.authenticationProvider(keycloakAuthenticationProvider); + } + + @Bean + public KeycloakSpringBootConfigResolver KeycloakConfigResolver() { + return new KeycloakSpringBootConfigResolver(); + } + + // Specifies the session authentication strategy + @Bean + @Override + protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { + return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + super.configure(http); + http.authorizeRequests() + .antMatchers("/customers*") + .hasRole("user") + .anyRequest() + .permitAll(); + } +} diff --git a/spring-boot/src/main/java/com/baeldung/keycloak/SpringBoot.java b/spring-boot/src/main/java/com/baeldung/keycloak/SpringBoot.java new file mode 100644 index 000000000000..87b22cf50a54 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/keycloak/SpringBoot.java @@ -0,0 +1,13 @@ +package com.baeldung.keycloak; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBoot { + + public static void main(String[] args) { + SpringApplication.run(SpringBoot.class, args); +} + +} diff --git a/spring-boot/src/main/java/com/baeldung/keycloak/WebController.java b/spring-boot/src/main/java/com/baeldung/keycloak/WebController.java new file mode 100644 index 000000000000..3bafe1f195ac --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/keycloak/WebController.java @@ -0,0 +1,52 @@ +package com.baeldung.keycloak; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; + +import java.security.Principal; + +import org.springframework.beans.factory.annotation.Autowired; + +@Controller +public class WebController { + + @Autowired + private CustomerDAO customerDAO; + + @GetMapping(path = "/") + public String index() { + return "external"; + } + + @GetMapping(path = "/customers") + public String customers(Principal principal, Model model) { + addCustomers(); + Iterable customers = customerDAO.findAll(); + model.addAttribute("customers", customers); + model.addAttribute("username", principal.getName()); + return "customers"; + } + + // add customers for demonstration + public void addCustomers() { + + Customer customer1 = new Customer(); + customer1.setAddress("1111 foo blvd"); + customer1.setName("Foo Industries"); + customer1.setServiceRendered("Important services"); + customerDAO.save(customer1); + + Customer customer2 = new Customer(); + customer2.setAddress("2222 bar street"); + customer2.setName("Bar LLP"); + customer2.setServiceRendered("Important services"); + customerDAO.save(customer2); + + Customer customer3 = new Customer(); + customer3.setAddress("33 main street"); + customer3.setName("Big LLC"); + customer3.setServiceRendered("Important services"); + customerDAO.save(customer3); + } +} diff --git a/spring-boot/src/main/resources/application.properties b/spring-boot/src/main/resources/application.properties index 458b4e0d469c..18d1223d438d 100644 --- a/spring-boot/src/main/resources/application.properties +++ b/spring-boot/src/main/resources/application.properties @@ -49,3 +49,10 @@ contactInfoType=email endpoints.beans.id=springbeans endpoints.beans.sensitive=false + +#Keycloak Configuration +keycloak.auth-server-url=http://localhost:8180/auth +keycloak.realm=SpringBootKeycloak +keycloak.resource=login-app +keycloak.public-client=true +keycloak.principal-attribute=preferred_username diff --git a/spring-boot/src/main/resources/templates/customers.html b/spring-boot/src/main/resources/templates/customers.html new file mode 100644 index 000000000000..5a060d31da63 --- /dev/null +++ b/spring-boot/src/main/resources/templates/customers.html @@ -0,0 +1,33 @@ + + + + + +
+

+ Hello, --name--. +

+ + + + + + + + + + + + + + + + + +
IDNameAddressService Rendered
Text ...Text ...Text ...Text...
+ +
+ + + diff --git a/spring-boot/src/main/resources/templates/external.html b/spring-boot/src/main/resources/templates/external.html new file mode 100644 index 000000000000..2f9cc7696146 --- /dev/null +++ b/spring-boot/src/main/resources/templates/external.html @@ -0,0 +1,31 @@ + + + + + +
+
+

Customer Portal

+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam + erat lectus, vehicula feugiat ultricies at, tempus sed ante. Cras + arcu erat, lobortis vitae quam et, mollis pharetra odio. Nullam sit + amet congue ipsum. Nunc dapibus odio ut ligula venenatis porta non + id dui. Duis nec tempor tellus. Suspendisse id blandit ligula, sit + amet varius mauris. Nulla eu eros pharetra, tristique dui quis, + vehicula libero. Aenean a neque sit amet tellus porttitor rutrum nec + at leo.

+ +

Existing Customers

+
+ Enter the intranet: customers +
+
+ +
+ + + + diff --git a/spring-boot/src/main/resources/templates/layout.html b/spring-boot/src/main/resources/templates/layout.html new file mode 100644 index 000000000000..bab0c2982b46 --- /dev/null +++ b/spring-boot/src/main/resources/templates/layout.html @@ -0,0 +1,18 @@ + + + +Customer Portal + + + + + \ No newline at end of file diff --git a/spring-boot/src/test/java/com/baeldung/keycloak/KeycloakConfigurationTest.java b/spring-boot/src/test/java/com/baeldung/keycloak/KeycloakConfigurationTest.java new file mode 100644 index 000000000000..8e3436a8ef8c --- /dev/null +++ b/spring-boot/src/test/java/com/baeldung/keycloak/KeycloakConfigurationTest.java @@ -0,0 +1,53 @@ +package com.baeldung.keycloak; + + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.keycloak.KeycloakPrincipal; +import org.keycloak.KeycloakSecurityContext; +import org.keycloak.adapters.springboot.client.KeycloakSecurityContextClientRequestInterceptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.when; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = SpringBoot.class) +public class KeycloakConfigurationTest { + + @Spy + private KeycloakSecurityContextClientRequestInterceptor factory; + + private MockHttpServletRequest servletRequest; + + @Mock + public KeycloakSecurityContext keycloakSecurityContext; + + @Mock + private KeycloakPrincipal keycloakPrincipal; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + servletRequest = new MockHttpServletRequest(); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(servletRequest)); + servletRequest.setUserPrincipal(keycloakPrincipal); + when(keycloakPrincipal.getKeycloakSecurityContext()).thenReturn(keycloakSecurityContext); + } + + @Test + public void testGetKeycloakSecurityContext() throws Exception { + assertNotNull(keycloakPrincipal.getKeycloakSecurityContext()); + } + + + +} From ba7bfec50f95a2eccc210c89475976e1d0cab3e2 Mon Sep 17 00:00:00 2001 From: michaelcgood <31810784+michaelcgood@users.noreply.github.com> Date: Thu, 26 Oct 2017 15:00:04 -0400 Subject: [PATCH 4/4] update --- .../com/baeldung/constructorditwo/Config.java | 23 ----------- .../constructorditwo/SpringRunner.java | 32 --------------- .../constructorditwo/domain/Artist.java | 18 --------- .../constructorditwo/domain/Music.java | 24 ----------- .../constructorditwo/domain/Song.java | 15 ------- .../java/com/baeldung/setterditwo/Config.java | 28 ------------- .../baeldung/setterditwo/SpringRunner.java | 33 --------------- .../baeldung/setterditwo/domain/Artist.java | 38 ------------------ .../baeldung/setterditwo/domain/Music.java | 40 ------------------- .../com/baeldung/setterditwo/domain/Song.java | 27 ------------- .../src/main/resources/constructorditwo.xml | 20 ---------- .../src/main/resources/setterditwo.xml | 20 ---------- .../ConstructorInjectionTest.java | 29 -------------- .../setterditwo/SetterInjectionTest.java | 29 -------------- 14 files changed, 376 deletions(-) delete mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/Config.java delete mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java delete mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/domain/Artist.java delete mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/domain/Music.java delete mode 100644 spring-core/src/main/java/com/baeldung/constructorditwo/domain/Song.java delete mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/Config.java delete mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java delete mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/domain/Artist.java delete mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/domain/Music.java delete mode 100644 spring-core/src/main/java/com/baeldung/setterditwo/domain/Song.java delete mode 100644 spring-core/src/main/resources/constructorditwo.xml delete mode 100644 spring-core/src/main/resources/setterditwo.xml delete mode 100644 spring-core/src/test/java/com/baeldung/constructorditwo/ConstructorInjectionTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/setterditwo/SetterInjectionTest.java diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java b/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java deleted file mode 100644 index 0717bc570962..000000000000 --- a/spring-core/src/main/java/com/baeldung/constructorditwo/Config.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.constructorditwo; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -import com.baeldung.constructorditwo.domain.Artist; -import com.baeldung.constructorditwo.domain.Song; - -@Configuration -@ComponentScan("com.baeldung.constructorditwo") -public class Config { - - @Bean - public Artist artist() { - return new Artist("Yo-Yo Ma", 61); - } - - @Bean - public Song song() { - return new Song("Joy to the World"); - } -} diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java b/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java deleted file mode 100644 index c13fa46149d0..000000000000 --- a/spring-core/src/main/java/com/baeldung/constructorditwo/SpringRunner.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.constructorditwo; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.constructorditwo.Config; -import com.baeldung.constructorditwo.domain.Music; - -public class SpringRunner { - public static void main(String[] args) { - Music OnTheRadio = getMusicFromXml(); - - System.out.println(OnTheRadio); - - OnTheRadio = getMusicFromJavaConfig(); - - System.out.println(OnTheRadio); - } - - public static Music getMusicFromJavaConfig() { - ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); - - return context.getBean(Music.class); - } - - public static Music getMusicFromXml() { - ApplicationContext context = new ClassPathXmlApplicationContext("constructorditwo.xml"); - - return context.getBean(Music.class); - } -} diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Artist.java b/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Artist.java deleted file mode 100644 index 2baba3f1e63a..000000000000 --- a/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Artist.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.constructorditwo.domain; - -public class Artist { - - private String name; - private int age; - - public Artist (String name, int age){ - this.name= name; - this.age= age; - } - - @Override - public String toString() { - return String.format("%s %d", name, age); - } - -} diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Music.java b/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Music.java deleted file mode 100644 index 8a1d94da3885..000000000000 --- a/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Music.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.constructorditwo.domain; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class Music { - - private Artist artist; - private Song song; - - @Autowired - public Music(Artist artist, Song song){ - this.artist = artist; - this.song = song; - } - - @Override - public String toString() { - return String.format("Artist: %s Song: %s", artist, song); - } - - -} diff --git a/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Song.java b/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Song.java deleted file mode 100644 index e1e8c8b964b0..000000000000 --- a/spring-core/src/main/java/com/baeldung/constructorditwo/domain/Song.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.constructorditwo.domain; - -public class Song { - - private String name; - - public Song (String name){ - this.name = name; - } - - @Override - public String toString() { - return String.format("%s", name); - } -} diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/Config.java b/spring-core/src/main/java/com/baeldung/setterditwo/Config.java deleted file mode 100644 index f0a11c6a2894..000000000000 --- a/spring-core/src/main/java/com/baeldung/setterditwo/Config.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.setterditwo; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -import com.baeldung.setterditwo.domain.Artist; -import com.baeldung.setterditwo.domain.Song; - -@Configuration -@ComponentScan("com.baeldung.setterditwo") -public class Config { - - @Bean - public Artist artist() { - Artist artist = new Artist(); - artist.setName("Yo-Yo Ma"); - artist.setAge(61); - return artist; - } - - @Bean - public Song song() { - Song song = new Song(); - song.setName("Joy to the World"); - return song; - } -} \ No newline at end of file diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java b/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java deleted file mode 100644 index 7e7266c6337a..000000000000 --- a/spring-core/src/main/java/com/baeldung/setterditwo/SpringRunner.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.setterditwo; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.setterditwo.Config; -import com.baeldung.setterditwo.domain.Music; - -public class SpringRunner { - public static void main(String[] args) { - Music OnTheRadio = getMusicFromXml(); - - System.out.println(OnTheRadio); - - OnTheRadio = getMusicFromJavaConfig(); - - System.out.println(OnTheRadio); - - } - - public static Music getMusicFromJavaConfig() { - ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); - - return context.getBean(Music.class); - } - - public static Music getMusicFromXml() { - ApplicationContext context = new ClassPathXmlApplicationContext("setterditwo.xml"); - - return context.getBean(Music.class); - } -} diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/domain/Artist.java b/spring-core/src/main/java/com/baeldung/setterditwo/domain/Artist.java deleted file mode 100644 index 52b7104d4973..000000000000 --- a/spring-core/src/main/java/com/baeldung/setterditwo/domain/Artist.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung.setterditwo.domain; - -public class Artist { - - private String name; - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - private int age; - - public Artist (String name, int age){ - this.name= name; - this.age= age; - } - - @Override - public String toString() { - return String.format("%s %d", name, age); - } - - public Artist(){ - - }; - -} diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/domain/Music.java b/spring-core/src/main/java/com/baeldung/setterditwo/domain/Music.java deleted file mode 100644 index 9ecfb3b7b282..000000000000 --- a/spring-core/src/main/java/com/baeldung/setterditwo/domain/Music.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.setterditwo.domain; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class Music { - private Artist artist; - private Song song; - - - @Autowired - public void setArtist(Artist artist) { - this.artist = artist; - } - - @Autowired - public void setSong(Song song) { - this.song = song; - } - - public Artist getArtist() { - return artist; - } - - public Song getSong() { - return song; - } - - public Music() { - - } - - @Override - public String toString() { - return String.format("Artist: %s Song: %s", artist, song); - } - - -} diff --git a/spring-core/src/main/java/com/baeldung/setterditwo/domain/Song.java b/spring-core/src/main/java/com/baeldung/setterditwo/domain/Song.java deleted file mode 100644 index dbad1b50304b..000000000000 --- a/spring-core/src/main/java/com/baeldung/setterditwo/domain/Song.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.setterditwo.domain; - -public class Song { - - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Song (String name){ - this.name = name; - } - - public Song(){ - - }; - - @Override - public String toString() { - return String.format("%s", name); - } -} \ No newline at end of file diff --git a/spring-core/src/main/resources/constructorditwo.xml b/spring-core/src/main/resources/constructorditwo.xml deleted file mode 100644 index 418827d91875..000000000000 --- a/spring-core/src/main/resources/constructorditwo.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/spring-core/src/main/resources/setterditwo.xml b/spring-core/src/main/resources/setterditwo.xml deleted file mode 100644 index 805c55db1d27..000000000000 --- a/spring-core/src/main/resources/setterditwo.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/spring-core/src/test/java/com/baeldung/constructorditwo/ConstructorInjectionTest.java b/spring-core/src/test/java/com/baeldung/constructorditwo/ConstructorInjectionTest.java deleted file mode 100644 index 8a27f8b68249..000000000000 --- a/spring-core/src/test/java/com/baeldung/constructorditwo/ConstructorInjectionTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.constructorditwo; - -import static com.baeldung.constructorditwo.SpringRunner.getMusicFromJavaConfig; -import static com.baeldung.constructorditwo.SpringRunner.getMusicFromXml; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import com.baeldung.constructorditwo.domain.Music; - -@RunWith(SpringJUnit4ClassRunner.class) -public class ConstructorInjectionTest { - - @Test - public void givenConstructorInjection_ThenValidDependency() { - Music OnTheRadio = getMusicFromXml(); - - assertNotNull(OnTheRadio); - assertEquals("Artist: Yo-Yo Ma 61 Song: Joy to the World", OnTheRadio.toString()); - - OnTheRadio = getMusicFromJavaConfig(); - - assertNotNull(OnTheRadio); - assertEquals("Artist: Yo-Yo Ma 61 Song: Joy to the World", OnTheRadio.toString()); - } - -} diff --git a/spring-core/src/test/java/com/baeldung/setterditwo/SetterInjectionTest.java b/spring-core/src/test/java/com/baeldung/setterditwo/SetterInjectionTest.java deleted file mode 100644 index df3fa9e779e9..000000000000 --- a/spring-core/src/test/java/com/baeldung/setterditwo/SetterInjectionTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.setterditwo; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import com.baeldung.setterditwo.domain.Music; -import static com.baeldung.setterditwo.SpringRunner.getMusicFromJavaConfig; -import static com.baeldung.setterditwo.SpringRunner.getMusicFromXml; - -@RunWith(SpringJUnit4ClassRunner.class) -public class SetterInjectionTest { - - @Test - public void givenInjectAnnotation_WhenOnField_ThenValidDependency() { - Music OnTheRadio = getMusicFromXml(); - - assertNotNull(OnTheRadio); - assertEquals("Artist: Yo-Yo Ma 61 Song: Joy to the World", OnTheRadio.toString()); - - OnTheRadio = getMusicFromJavaConfig(); - - assertNotNull(OnTheRadio); - assertEquals("Artist: Yo-Yo Ma 61 Song: Joy to the World", OnTheRadio.toString()); - } - -}