From 220a0bffe06107362ff6aa7aeb978bea5b91d624 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 19 Feb 2019 20:18:13 +0200 Subject: [PATCH 1/4] add user-info endpoint live test --- .../org/baeldung/config/AuthServerConfig.java | 2 +- .../org/baeldung/config/SecurityConfig.java | 3 +- .../baeldung/UserInfoEndpointLiveTest.java | 51 +++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 spring-security-sso/spring-security-sso-auth-server/src/test/java/org/baeldung/UserInfoEndpointLiveTest.java diff --git a/spring-security-sso/spring-security-sso-auth-server/src/main/java/org/baeldung/config/AuthServerConfig.java b/spring-security-sso/spring-security-sso-auth-server/src/main/java/org/baeldung/config/AuthServerConfig.java index 07057c3875..0835f3d721 100644 --- a/spring-security-sso/spring-security-sso-auth-server/src/main/java/org/baeldung/config/AuthServerConfig.java +++ b/spring-security-sso/spring-security-sso-auth-server/src/main/java/org/baeldung/config/AuthServerConfig.java @@ -30,7 +30,7 @@ public class AuthServerConfig extends AuthorizationServerConfigurerAdapter { .authorizedGrantTypes("authorization_code") .scopes("user_info") .autoApprove(true) - .redirectUris("http://localhost:8082/ui/login","http://localhost:8083/ui2/login","http://localhost:8082/login") + .redirectUris("http://localhost:8082/ui/login","http://localhost:8083/ui2/login","http://localhost:8082/login","http://www.example.com/") // .accessTokenValiditySeconds(3600) ; // 1 hour } diff --git a/spring-security-sso/spring-security-sso-auth-server/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-sso/spring-security-sso-auth-server/src/main/java/org/baeldung/config/SecurityConfig.java index 5cebf4f4d2..2254de8e39 100644 --- a/spring-security-sso/spring-security-sso-auth-server/src/main/java/org/baeldung/config/SecurityConfig.java +++ b/spring-security-sso/spring-security-sso-auth-server/src/main/java/org/baeldung/config/SecurityConfig.java @@ -22,7 +22,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .authenticated() .and() .formLogin() - .permitAll(); + .permitAll() + .and().csrf().disable(); } // @formatter:on @Override diff --git a/spring-security-sso/spring-security-sso-auth-server/src/test/java/org/baeldung/UserInfoEndpointLiveTest.java b/spring-security-sso/spring-security-sso-auth-server/src/test/java/org/baeldung/UserInfoEndpointLiveTest.java new file mode 100644 index 0000000000..ffdb1df8fe --- /dev/null +++ b/spring-security-sso/spring-security-sso-auth-server/src/test/java/org/baeldung/UserInfoEndpointLiveTest.java @@ -0,0 +1,51 @@ +package org.baeldung; +import static org.junit.Assert.assertEquals; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; + +import io.restassured.RestAssured; +import io.restassured.response.Response; + +public class UserInfoEndpointLiveTest { + + @Test + public void givenAccessToken_whenAccessUserInfoEndpoint_thenSuccess() { + String accessToken = obtainAccessTokenUsingAuthorizationCodeFlow("john","123"); + Response response = RestAssured.given().header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken).get("http://localhost:8081/auth/user/me"); + + assertEquals(HttpStatus.OK.value(), response.getStatusCode()); + assertEquals("john", response.jsonPath().get("name")); + } + + private String obtainAccessTokenUsingAuthorizationCodeFlow(String username, String password) { + final String authServerUri = "http://localhost:8081/auth"; + final String redirectUrl = "http://www.example.com/"; + final String authorizeUrl = authServerUri + "/oauth/authorize?response_type=code&client_id=SampleClientId&redirect_uri=" + redirectUrl; + final String tokenUrl = authServerUri + "/oauth/token"; + + // user login + Response response = RestAssured.given().formParams("username", username, "password", password).post(authServerUri + "/login"); + final String cookieValue = response.getCookie("JSESSIONID"); + + // get authorization code + RestAssured.given().cookie("JSESSIONID", cookieValue).get(authorizeUrl); + response = RestAssured.given().cookie("JSESSIONID", cookieValue).post(authorizeUrl); + assertEquals(HttpStatus.FOUND.value(), response.getStatusCode()); + final String location = response.getHeader(HttpHeaders.LOCATION); + final String code = location.substring(location.indexOf("code=") + 5); + + // get access token + Map params = new HashMap(); + params.put("grant_type", "authorization_code"); + params.put("code", code); + params.put("client_id", "SampleClientId"); + params.put("redirect_uri", redirectUrl); + response = RestAssured.given().auth().basic("SampleClientId", "secret").formParams(params).post(tokenUrl); + return response.jsonPath().getString("access_token"); + } +} From 3cfedd04944c92af8d2f1b463670d0c3d0171320 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sun, 24 Feb 2019 13:44:34 +0200 Subject: [PATCH 2/4] keycloak - change server port --- spring-boot-keycloak/src/main/resources/application.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-boot-keycloak/src/main/resources/application.properties b/spring-boot-keycloak/src/main/resources/application.properties index f667d3b27e..6e7da2cb90 100644 --- a/spring-boot-keycloak/src/main/resources/application.properties +++ b/spring-boot-keycloak/src/main/resources/application.properties @@ -1,3 +1,6 @@ +### server port +server.port=8081 + #Keycloak Configuration keycloak.auth-server-url=http://localhost:8180/auth keycloak.realm=SpringBootKeycloak From 00d6406ef9b343c3f64868b657e0350b77194f73 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 12 Apr 2019 16:31:22 +0200 Subject: [PATCH 3/4] add generic constructor examples --- .../java/com/baeldung/generics/Entry.java | 38 ++++++++++ .../com/baeldung/generics/GenericEntry.java | 53 +++++++++++++ .../java/com/baeldung/generics/MapEntry.java | 34 +++++++++ .../java/com/baeldung/generics/Product.java | 50 ++++++++++++ .../java/com/baeldung/generics/Rankable.java | 5 ++ .../generics/GenericConstructorUnitTest.java | 76 +++++++++++++++++++ 6 files changed, 256 insertions(+) create mode 100644 core-java-lang-syntax/src/main/java/com/baeldung/generics/Entry.java create mode 100644 core-java-lang-syntax/src/main/java/com/baeldung/generics/GenericEntry.java create mode 100644 core-java-lang-syntax/src/main/java/com/baeldung/generics/MapEntry.java create mode 100644 core-java-lang-syntax/src/main/java/com/baeldung/generics/Product.java create mode 100644 core-java-lang-syntax/src/main/java/com/baeldung/generics/Rankable.java create mode 100644 core-java-lang-syntax/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/Entry.java b/core-java-lang-syntax/src/main/java/com/baeldung/generics/Entry.java new file mode 100644 index 0000000000..07759ca9ba --- /dev/null +++ b/core-java-lang-syntax/src/main/java/com/baeldung/generics/Entry.java @@ -0,0 +1,38 @@ +package com.baeldung.generics; + +import java.io.Serializable; + +public class Entry { + private String data; + private int rank; + + // non-generic constructor + public Entry(String data, int rank) { + this.data = data; + this.rank = rank; + } + + // generic constructor + public Entry(E element) { + this.data = element.toString(); + this.rank = element.getRank(); + } + + // getters and setters + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public int getRank() { + return rank; + } + + public void setRank(int rank) { + this.rank = rank; + } + +} diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/GenericEntry.java b/core-java-lang-syntax/src/main/java/com/baeldung/generics/GenericEntry.java new file mode 100644 index 0000000000..27d3a44069 --- /dev/null +++ b/core-java-lang-syntax/src/main/java/com/baeldung/generics/GenericEntry.java @@ -0,0 +1,53 @@ +package com.baeldung.generics; + +import java.io.Serializable; +import java.util.Optional; + +public class GenericEntry { + private T data; + private int rank; + + // non-generic constructor + public GenericEntry(int rank) { + this.rank = rank; + } + + // generic constructor + public GenericEntry(T data, int rank) { + this.data = data; + this.rank = rank; + } + + // generic constructor with different type + public GenericEntry(E element) { + this.data = (T) element; + this.rank = element.getRank(); + } + + // generic constructor with different type and wild card + public GenericEntry(Optional optional) { + if (optional.isPresent()) { + this.data = (T) optional.get(); + this.rank = optional.get() + .getRank(); + } + } + + // getters and setters + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + public int getRank() { + return rank; + } + + public void setRank(int rank) { + this.rank = rank; + } + +} diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/MapEntry.java b/core-java-lang-syntax/src/main/java/com/baeldung/generics/MapEntry.java new file mode 100644 index 0000000000..3d626b2fa5 --- /dev/null +++ b/core-java-lang-syntax/src/main/java/com/baeldung/generics/MapEntry.java @@ -0,0 +1,34 @@ +package com.baeldung.generics; + +public class MapEntry { + private K key; + private V value; + + public MapEntry() { + super(); + } + + // generic constructor with two parameters + public MapEntry(K key, V value) { + this.key = key; + this.value = value; + } + + // getters and setters + public K getKey() { + return key; + } + + public void setKey(K key) { + this.key = key; + } + + public V getValue() { + return value; + } + + public void setValue(V value) { + this.value = value; + } + +} diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/Product.java b/core-java-lang-syntax/src/main/java/com/baeldung/generics/Product.java new file mode 100644 index 0000000000..bfc9f63071 --- /dev/null +++ b/core-java-lang-syntax/src/main/java/com/baeldung/generics/Product.java @@ -0,0 +1,50 @@ +package com.baeldung.generics; + +import java.io.Serializable; + +public class Product implements Rankable, Serializable { + private String name; + private double price; + private int sales; + + public Product(String name, double price) { + this.name = name; + this.price = price; + } + + @Override + public int getRank() { + return sales; + } + + @Override + public String toString() { + return "Product [name=" + name + ", price=" + price + ", sales=" + sales + "]"; + } + + // getters and setters + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public int getSales() { + return sales; + } + + public void setSales(int sales) { + this.sales = sales; + } + +} diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/Rankable.java b/core-java-lang-syntax/src/main/java/com/baeldung/generics/Rankable.java new file mode 100644 index 0000000000..72bda67d9d --- /dev/null +++ b/core-java-lang-syntax/src/main/java/com/baeldung/generics/Rankable.java @@ -0,0 +1,5 @@ +package com.baeldung.generics; + +public interface Rankable { + public int getRank(); +} diff --git a/core-java-lang-syntax/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java new file mode 100644 index 0000000000..60907bbfd3 --- /dev/null +++ b/core-java-lang-syntax/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java @@ -0,0 +1,76 @@ +package com.baeldung.generics; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import java.io.Serializable; +import java.util.Optional; + +import org.junit.Test; + +public class GenericConstructorUnitTest { + + @Test + public void givenNonGenericConstructor_whenCreateNonGenericEntry_thenOK() { + Entry entry = new Entry("sample", 1); + + assertEquals("sample", entry.getData()); + assertEquals(1, entry.getRank()); + } + + @Test + public void givenGenericConstructor_whenCreateNonGenericEntry_thenOK() { + Product product = new Product("milk", 2.5); + product.setSales(30); + Entry entry = new Entry(product); + + assertEquals(product.toString(), entry.getData()); + assertEquals(30, entry.getRank()); + } + + @Test + public void givenNonGenericConstructor_whenCreateGenericEntry_thenOK() { + GenericEntry entry = new GenericEntry(1); + + assertNull(entry.getData()); + assertEquals(1, entry.getRank()); + } + + @Test + public void givenGenericConstructor_whenCreateGenericEntry_thenOK() { + GenericEntry entry = new GenericEntry("sample", 1); + + assertEquals("sample", entry.getData()); + assertEquals(1, entry.getRank()); + } + + @Test + public void givenGenericConstructorWithDifferentType_whenCreateGenericEntry_thenOK() { + Product product = new Product("milk", 2.5); + product.setSales(30); + GenericEntry entry = new GenericEntry(product); + + assertEquals(product, entry.getData()); + assertEquals(30, entry.getRank()); + } + + @Test + public void givenGenericConstructorWithWildCard_whenCreateGenericEntry_thenOK() { + Product product = new Product("milk", 2.5); + product.setSales(30); + Optional optional = Optional.of(product); + GenericEntry entry = new GenericEntry(optional); + + assertEquals(product, entry.getData()); + assertEquals(30, entry.getRank()); + } + + @Test + public void givenGenericConstructor_whenCreateGenericEntryWithTwoTypes_thenOK() { + MapEntry entry = new MapEntry("sample", 1); + + assertEquals("sample", entry.getKey()); + assertEquals(1, entry.getValue() + .intValue()); + } +} From 532c5f28a3bdb3bc0a90fa59b1f8060fa293a5cd Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 15 Apr 2019 00:39:36 +0200 Subject: [PATCH 4/4] move generic constructor code --- .../src/main/java/com/baeldung/generics/Entry.java | 0 .../src/main/java/com/baeldung/generics/GenericEntry.java | 0 .../src/main/java/com/baeldung/generics/MapEntry.java | 0 .../src/main/java/com/baeldung/generics/Product.java | 0 .../src/main/java/com/baeldung/generics/Rankable.java | 0 .../java/com/baeldung/generics/GenericConstructorUnitTest.java | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename {core-java-lang-syntax => core-java-lang-oop-2}/src/main/java/com/baeldung/generics/Entry.java (100%) rename {core-java-lang-syntax => core-java-lang-oop-2}/src/main/java/com/baeldung/generics/GenericEntry.java (100%) rename {core-java-lang-syntax => core-java-lang-oop-2}/src/main/java/com/baeldung/generics/MapEntry.java (100%) rename {core-java-lang-syntax => core-java-lang-oop-2}/src/main/java/com/baeldung/generics/Product.java (100%) rename {core-java-lang-syntax => core-java-lang-oop-2}/src/main/java/com/baeldung/generics/Rankable.java (100%) rename {core-java-lang-syntax => core-java-lang-oop-2}/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java (100%) diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/Entry.java b/core-java-lang-oop-2/src/main/java/com/baeldung/generics/Entry.java similarity index 100% rename from core-java-lang-syntax/src/main/java/com/baeldung/generics/Entry.java rename to core-java-lang-oop-2/src/main/java/com/baeldung/generics/Entry.java diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/GenericEntry.java b/core-java-lang-oop-2/src/main/java/com/baeldung/generics/GenericEntry.java similarity index 100% rename from core-java-lang-syntax/src/main/java/com/baeldung/generics/GenericEntry.java rename to core-java-lang-oop-2/src/main/java/com/baeldung/generics/GenericEntry.java diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/MapEntry.java b/core-java-lang-oop-2/src/main/java/com/baeldung/generics/MapEntry.java similarity index 100% rename from core-java-lang-syntax/src/main/java/com/baeldung/generics/MapEntry.java rename to core-java-lang-oop-2/src/main/java/com/baeldung/generics/MapEntry.java diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/Product.java b/core-java-lang-oop-2/src/main/java/com/baeldung/generics/Product.java similarity index 100% rename from core-java-lang-syntax/src/main/java/com/baeldung/generics/Product.java rename to core-java-lang-oop-2/src/main/java/com/baeldung/generics/Product.java diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/generics/Rankable.java b/core-java-lang-oop-2/src/main/java/com/baeldung/generics/Rankable.java similarity index 100% rename from core-java-lang-syntax/src/main/java/com/baeldung/generics/Rankable.java rename to core-java-lang-oop-2/src/main/java/com/baeldung/generics/Rankable.java diff --git a/core-java-lang-syntax/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java b/core-java-lang-oop-2/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java similarity index 100% rename from core-java-lang-syntax/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java rename to core-java-lang-oop-2/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java