diff --git a/livelessons-bootstrap/livelessons-bootstrap-gradle/build.gradle b/livelessons-bootstrap/livelessons-bootstrap-gradle/build.gradle
index c3feede..6a7d49c 100644
--- a/livelessons-bootstrap/livelessons-bootstrap-gradle/build.gradle
+++ b/livelessons-bootstrap/livelessons-bootstrap-gradle/build.gradle
@@ -1,5 +1,5 @@
buildscript {
- ext { springBootVersion = '1.2.1.RELEASE' }
+ ext { springBootVersion = '1.4.1.RELEASE' }
repositories { mavenCentral() }
dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") }
}
diff --git a/livelessons-choreography/livelessons-choreography-bookmark-service/pom.xml b/livelessons-choreography/livelessons-choreography-bookmark-service/pom.xml
index 506ad7c..ea2acaa 100644
--- a/livelessons-choreography/livelessons-choreography-bookmark-service/pom.xml
+++ b/livelessons-choreography/livelessons-choreography-bookmark-service/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-choreography/livelessons-choreography-bookmark-service/src/main/java/demo/BookmarkRestController.java b/livelessons-choreography/livelessons-choreography-bookmark-service/src/main/java/demo/BookmarkRestController.java
index c040c4c..9596a25 100644
--- a/livelessons-choreography/livelessons-choreography-bookmark-service/src/main/java/demo/BookmarkRestController.java
+++ b/livelessons-choreography/livelessons-choreography-bookmark-service/src/main/java/demo/BookmarkRestController.java
@@ -2,7 +2,6 @@
import java.util.Collection;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -13,8 +12,11 @@
@RequestMapping("/{userId}/bookmarks")
public class BookmarkRestController {
- @Autowired
- private BookmarkRepository bookmarkRepository;
+ private final BookmarkRepository bookmarkRepository;
+
+ public BookmarkRestController(BookmarkRepository bookmarkRepository) {
+ this.bookmarkRepository = bookmarkRepository;
+ }
@RequestMapping(method = RequestMethod.GET)
public Collection getBookmarks(@PathVariable String userId) {
diff --git a/livelessons-choreography/livelessons-choreography-contact-service/pom.xml b/livelessons-choreography/livelessons-choreography-contact-service/pom.xml
index fab7985..4eb51cd 100644
--- a/livelessons-choreography/livelessons-choreography-contact-service/pom.xml
+++ b/livelessons-choreography/livelessons-choreography-contact-service/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-choreography/livelessons-choreography-contact-service/src/main/java/demo/ContactRestController.java b/livelessons-choreography/livelessons-choreography-contact-service/src/main/java/demo/ContactRestController.java
index 98f8f2f..3dc2e6c 100644
--- a/livelessons-choreography/livelessons-choreography-contact-service/src/main/java/demo/ContactRestController.java
+++ b/livelessons-choreography/livelessons-choreography-contact-service/src/main/java/demo/ContactRestController.java
@@ -2,7 +2,6 @@
import java.util.Collection;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -13,8 +12,11 @@
@RequestMapping("/{userId}/contacts")
public class ContactRestController {
- @Autowired
- private ContactRepository contactRepository;
+ private final ContactRepository contactRepository;
+
+ public ContactRestController(ContactRepository contactRepository) {
+ this.contactRepository = contactRepository;
+ }
@RequestMapping(method = RequestMethod.GET)
public Collection getContacts(@PathVariable String userId) {
diff --git a/livelessons-choreography/livelessons-choreography-eureka-service/pom.xml b/livelessons-choreography/livelessons-choreography-eureka-service/pom.xml
index e119668..ec4fa02 100644
--- a/livelessons-choreography/livelessons-choreography-eureka-service/pom.xml
+++ b/livelessons-choreography/livelessons-choreography-eureka-service/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-choreography/livelessons-choreography-gateway/pom.xml b/livelessons-choreography/livelessons-choreography-gateway/pom.xml
index 24ba979..e0fc439 100644
--- a/livelessons-choreography/livelessons-choreography-gateway/pom.xml
+++ b/livelessons-choreography/livelessons-choreography-gateway/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
@@ -31,7 +42,10 @@
io.projectreactor
reactor-core
- 2.0.0.RC1
+
+
+ io.projectreactor
+ reactor-stream
diff --git a/livelessons-choreography/livelessons-choreography-gateway/src/main/java/demo/PassportRestController.java b/livelessons-choreography/livelessons-choreography-gateway/src/main/java/demo/PassportRestController.java
index 5160fb3..139eede 100644
--- a/livelessons-choreography/livelessons-choreography-gateway/src/main/java/demo/PassportRestController.java
+++ b/livelessons-choreography/livelessons-choreography-gateway/src/main/java/demo/PassportRestController.java
@@ -2,7 +2,6 @@
import reactor.rx.Stream;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -11,8 +10,11 @@
@RestController
public class PassportRestController {
- @Autowired
- private PassportService passportService;
+ private final PassportService passportService;
+
+ public PassportRestController(PassportService passportService) {
+ this.passportService = passportService;
+ }
@RequestMapping("/{userId}/passport")
public DeferredResult passport(@PathVariable String userId) {
diff --git a/livelessons-choreography/livelessons-choreography-gateway/src/main/java/demo/PassportService.java b/livelessons-choreography/livelessons-choreography-gateway/src/main/java/demo/PassportService.java
index c0dfec8..372f207 100644
--- a/livelessons-choreography/livelessons-choreography-gateway/src/main/java/demo/PassportService.java
+++ b/livelessons-choreography/livelessons-choreography-gateway/src/main/java/demo/PassportService.java
@@ -4,20 +4,23 @@
import reactor.rx.Stream;
import reactor.rx.Streams;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class PassportService {
- @Autowired
- private Environment environment;
+ private final Environment environment;
- @Autowired
- private ContactClient contactClient;
+ private final ContactClient contactClient;
- @Autowired
- private BookmarkClient bookmarkClient;
+ private final BookmarkClient bookmarkClient;
+
+ public PassportService(Environment environment, ContactClient contactClient,
+ BookmarkClient bookmarkClient) {
+ this.environment = environment;
+ this.contactClient = contactClient;
+ this.bookmarkClient = bookmarkClient;
+ }
public Stream getBookmarks(String userId) {
return Streams.create(subscriber -> {
diff --git a/livelessons-choreography/livelessons-choreography-hystrix-dashboard-service/pom.xml b/livelessons-choreography/livelessons-choreography-hystrix-dashboard-service/pom.xml
index 08f40b4..5e0aba3 100644
--- a/livelessons-choreography/livelessons-choreography-hystrix-dashboard-service/pom.xml
+++ b/livelessons-choreography/livelessons-choreography-hystrix-dashboard-service/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-choreography/livelessons-choreography-hystrix/pom.xml b/livelessons-choreography/livelessons-choreography-hystrix/pom.xml
index 441fe6d..5a54df7 100644
--- a/livelessons-choreography/livelessons-choreography-hystrix/pom.xml
+++ b/livelessons-choreography/livelessons-choreography-hystrix/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-choreography/livelessons-choreography-hystrix/src/main/java/demo/IntegrationClient.java b/livelessons-choreography/livelessons-choreography-hystrix/src/main/java/demo/IntegrationClient.java
index 9e0bd70..226a8f0 100644
--- a/livelessons-choreography/livelessons-choreography-hystrix/src/main/java/demo/IntegrationClient.java
+++ b/livelessons-choreography/livelessons-choreography-hystrix/src/main/java/demo/IntegrationClient.java
@@ -5,17 +5,19 @@
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
class IntegrationClient {
- @Autowired
- private ContactClient contactClient;
+ private final ContactClient contactClient;
- @Autowired
- private BookmarkClient bookmarkClient;
+ private final BookmarkClient bookmarkClient;
+
+ public IntegrationClient(ContactClient contactClient, BookmarkClient bookmarkClient) {
+ this.contactClient = contactClient;
+ this.bookmarkClient = bookmarkClient;
+ }
public Collection getBookmarksFallback(String userId) {
System.out.println("getBookmarksFallback");
@@ -37,4 +39,4 @@ public Collection getContacts(String userId) {
return this.contactClient.getContacts(userId);
}
-}
\ No newline at end of file
+}
diff --git a/livelessons-choreography/livelessons-choreography-hystrix/src/main/java/demo/PassportRestController.java b/livelessons-choreography/livelessons-choreography-hystrix/src/main/java/demo/PassportRestController.java
index ec11f5c..021f3de 100644
--- a/livelessons-choreography/livelessons-choreography-hystrix/src/main/java/demo/PassportRestController.java
+++ b/livelessons-choreography/livelessons-choreography-hystrix/src/main/java/demo/PassportRestController.java
@@ -1,6 +1,5 @@
package demo;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -8,8 +7,11 @@
@RestController
class PassportRestController {
- @Autowired
- private IntegrationClient integrationClient;
+ private final IntegrationClient integrationClient;
+
+ public PassportRestController(IntegrationClient integrationClient) {
+ this.integrationClient = integrationClient;
+ }
@RequestMapping("/{userId}/passport")
Passport passport(@PathVariable String userId) {
@@ -17,4 +19,4 @@ Passport passport(@PathVariable String userId) {
this.integrationClient.getBookmarks(userId));
}
-}
\ No newline at end of file
+}
diff --git a/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/pom.xml b/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/pom.xml
index 1db5cff..61b309e 100644
--- a/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/pom.xml
+++ b/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/DiscoveryClientExample.java b/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/DiscoveryClientExample.java
index cd0f8f7..4b11db3 100644
--- a/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/DiscoveryClientExample.java
+++ b/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/DiscoveryClientExample.java
@@ -2,7 +2,6 @@
import org.apache.commons.lang.builder.ToStringBuilder;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
@@ -13,8 +12,11 @@
@Component
public class DiscoveryClientExample implements CommandLineRunner {
- @Autowired
- private DiscoveryClient discoveryClient;
+ private final DiscoveryClient discoveryClient;
+
+ public DiscoveryClientExample(DiscoveryClient discoveryClient) {
+ this.discoveryClient = discoveryClient;
+ }
@Override
public void run(String... strings) throws Exception {
diff --git a/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/FeignExample.java b/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/FeignExample.java
index ab4c569..e556137 100644
--- a/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/FeignExample.java
+++ b/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/FeignExample.java
@@ -1,6 +1,5 @@
package demo;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@@ -9,11 +8,14 @@
@Component
public class FeignExample implements CommandLineRunner {
- @Autowired
- private ContactClient contactClient;
+ private final ContactClient contactClient;
- @Autowired
- private BookmarkClient bookmarkClient;
+ private final BookmarkClient bookmarkClient;
+
+ public FeignExample(ContactClient contactClient, BookmarkClient bookmarkClient) {
+ this.contactClient = contactClient;
+ this.bookmarkClient = bookmarkClient;
+ }
@Override
public void run(String... strings) throws Exception {
diff --git a/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/RestTemplateExample.java b/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/RestTemplateExample.java
index fc94120..856facb 100644
--- a/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/RestTemplateExample.java
+++ b/livelessons-choreography/livelessons-choreography-ribbon-and-eureka/src/main/java/demo/RestTemplateExample.java
@@ -2,7 +2,6 @@
import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.core.annotation.Order;
@@ -15,8 +14,11 @@
@Component
public class RestTemplateExample implements CommandLineRunner {
- @Autowired
- private RestTemplate restTemplate;
+ private final RestTemplate restTemplate;
+
+ public RestTemplateExample(RestTemplate restTemplate) {
+ this.restTemplate = restTemplate;
+ }
@Override
public void run(String... strings) throws Exception {
diff --git a/livelessons-cloud/livelessons-cloud-connectors/src/main/java/demo/ExampleController.java b/livelessons-cloud/livelessons-cloud-connectors/src/main/java/demo/ExampleController.java
index fee31e9..9e6ea3c 100644
--- a/livelessons-cloud/livelessons-cloud-connectors/src/main/java/demo/ExampleController.java
+++ b/livelessons-cloud/livelessons-cloud-connectors/src/main/java/demo/ExampleController.java
@@ -1,6 +1,5 @@
package demo;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.app.ApplicationInstanceInfo;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -13,7 +12,6 @@ public class ExampleController {
private final ApplicationInstanceInfo info;
- @Autowired
public ExampleController(JdbcTemplate jdbc, ApplicationInstanceInfo info) {
this.jdbc = jdbc;
this.info = info;
@@ -21,12 +19,13 @@ public ExampleController(JdbcTemplate jdbc, ApplicationInstanceInfo info) {
@RequestMapping("/")
public String hello() {
- return jdbc.queryForObject("select model from car where id = 1", String.class);
+ return this.jdbc.queryForObject("select model from car where id = 1",
+ String.class);
}
@RequestMapping("/cloudinfo")
public ApplicationInstanceInfo info() {
- return info;
+ return this.info;
}
}
diff --git a/livelessons-cloud/livelessons-cloud-s3/pom.xml b/livelessons-cloud/livelessons-cloud-s3/pom.xml
index fb3d203..7fa49a7 100644
--- a/livelessons-cloud/livelessons-cloud-s3/pom.xml
+++ b/livelessons-cloud/livelessons-cloud-s3/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.boot
diff --git a/livelessons-cloud/livelessons-cloud-s3/src/main/java/demo/CloudS3Application.java b/livelessons-cloud/livelessons-cloud-s3/src/main/java/demo/CloudS3Application.java
index bde8399..d772890 100644
--- a/livelessons-cloud/livelessons-cloud-s3/src/main/java/demo/CloudS3Application.java
+++ b/livelessons-cloud/livelessons-cloud-s3/src/main/java/demo/CloudS3Application.java
@@ -6,7 +6,6 @@
import javax.annotation.PostConstruct;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -23,12 +22,15 @@ public class CloudS3Application {
@Value("${livelessons.s3.bucket}")
private String bucket;
- @Autowired
- public ResourceLoader resourceLoader;
+ private final ResourceLoader resourceLoader;
+
+ public CloudS3Application(ResourceLoader resourceLoader) {
+ this.resourceLoader = resourceLoader;
+ }
@PostConstruct
public void resourceAccess() throws IOException {
- String location = "s3://" + bucket + "/file.txt";
+ String location = "s3://" + this.bucket + "/file.txt";
WritableResource writeableResource = (WritableResource) this.resourceLoader
.getResource(location);
FileCopyUtils.copy("Hello World!",
diff --git a/livelessons-cloud/livelessons-cloud-services/src/main/java/demo/ExampleController.java b/livelessons-cloud/livelessons-cloud-services/src/main/java/demo/ExampleController.java
index f82de30..d3c2e5d 100644
--- a/livelessons-cloud/livelessons-cloud-services/src/main/java/demo/ExampleController.java
+++ b/livelessons-cloud/livelessons-cloud-services/src/main/java/demo/ExampleController.java
@@ -1,6 +1,5 @@
package demo;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -10,7 +9,6 @@ public class ExampleController {
private final JdbcTemplate jdbc;
- @Autowired
public ExampleController(JdbcTemplate jdbc) {
this.jdbc = jdbc;
}
diff --git a/livelessons-cloud/livelessons-cloud-session/pom.xml b/livelessons-cloud/livelessons-cloud-session/pom.xml
index 8d9b509..94f0015 100644
--- a/livelessons-cloud/livelessons-cloud-session/pom.xml
+++ b/livelessons-cloud/livelessons-cloud-session/pom.xml
@@ -31,7 +31,6 @@
org.springframework.session
spring-session-data-redis
- 1.0.0.RELEASE
diff --git a/livelessons-configuration/livelessons-configuration-basic/pom.xml b/livelessons-configuration/livelessons-configuration-basic/pom.xml
index cd4e4b0..c49ba4a 100644
--- a/livelessons-configuration/livelessons-configuration-basic/pom.xml
+++ b/livelessons-configuration/livelessons-configuration-basic/pom.xml
@@ -20,5 +20,10 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
diff --git a/livelessons-configuration/livelessons-configuration-cloudclient/pom.xml b/livelessons-configuration/livelessons-configuration-cloudclient/pom.xml
index fb73c07..2fff35b 100644
--- a/livelessons-configuration/livelessons-configuration-cloudclient/pom.xml
+++ b/livelessons-configuration/livelessons-configuration-cloudclient/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-configuration/livelessons-configuration-cloudserver/pom.xml b/livelessons-configuration/livelessons-configuration-cloudserver/pom.xml
index 9d5a56d..38228ae 100644
--- a/livelessons-configuration/livelessons-configuration-cloudserver/pom.xml
+++ b/livelessons-configuration/livelessons-configuration-cloudserver/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-data/livelessons-data-elasticsearch/src/main/java/demo/DataElasticsearchApplication.java b/livelessons-data/livelessons-data-elasticsearch/src/main/java/demo/DataElasticsearchApplication.java
index 3bbbc0c..3d4ef59 100644
--- a/livelessons-data/livelessons-data-elasticsearch/src/main/java/demo/DataElasticsearchApplication.java
+++ b/livelessons-data/livelessons-data-elasticsearch/src/main/java/demo/DataElasticsearchApplication.java
@@ -9,7 +9,7 @@
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
-import static org.elasticsearch.index.query.QueryBuilders.fuzzyLikeThisFieldQuery;
+import static org.elasticsearch.index.query.QueryBuilders.fuzzyQuery;
@SpringBootApplication
public class DataElasticsearchApplication {
@@ -33,7 +33,7 @@ public CommandLineRunner example(CarRepository repository,
System.err.println("\nFrom the template...");
SearchQuery query = new NativeSearchQueryBuilder()
- .withQuery(fuzzyLikeThisFieldQuery("make").likeText("Ronda")).build();
+ .withQuery(fuzzyQuery("make", "Ronda")).build();
template.queryForList(query, Car.class).forEach(System.err::println);
};
}
diff --git a/livelessons-data/livelessons-data-jdbc/src/main/java/demo/CarRepository.java b/livelessons-data/livelessons-data-jdbc/src/main/java/demo/CarRepository.java
index d538ac3..d8ddbf8 100644
--- a/livelessons-data/livelessons-data-jdbc/src/main/java/demo/CarRepository.java
+++ b/livelessons-data/livelessons-data-jdbc/src/main/java/demo/CarRepository.java
@@ -2,7 +2,6 @@
import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@@ -11,13 +10,12 @@ public class CarRepository {
private final JdbcTemplate jdbc;
- @Autowired
public CarRepository(JdbcTemplate jdbc) {
this.jdbc = jdbc;
}
public List findByMakeIgnoringCase(String make) {
- return jdbc.query(
+ return this.jdbc.query(
"select * from car " + "where UPPER(car.make) = UPPER(?) order by id",
(rs, i) -> new Car(rs.getInt("id"), rs.getString("make"),
rs.getString("model"), rs.getInt("year")),
diff --git a/livelessons-data/livelessons-data-redis/src/main/java/demo/Demo.java b/livelessons-data/livelessons-data-redis/src/main/java/demo/Demo.java
index 2c95132..908d33f 100644
--- a/livelessons-data/livelessons-data-redis/src/main/java/demo/Demo.java
+++ b/livelessons-data/livelessons-data-redis/src/main/java/demo/Demo.java
@@ -6,7 +6,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
@@ -22,7 +21,6 @@ public class Demo implements CommandLineRunner {
private final SlowService service;
- @Autowired
public Demo(StringRedisTemplate template, SlowService service) {
this.template = template;
this.service = service;
diff --git a/livelessons-data/livelessons-data-rest/src/test/java/demo/DataRestApplicationTests.java b/livelessons-data/livelessons-data-rest/src/test/java/demo/DataRestApplicationTests.java
index a40a1cb..d023f7f 100644
--- a/livelessons-data/livelessons-data-rest/src/test/java/demo/DataRestApplicationTests.java
+++ b/livelessons-data/livelessons-data-rest/src/test/java/demo/DataRestApplicationTests.java
@@ -3,45 +3,38 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.SpringApplicationConfiguration;
-import org.springframework.boot.test.TestRestTemplate;
-import org.springframework.boot.test.WebIntegrationTest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.not;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringJUnit4ClassRunner.class)
-@SpringApplicationConfiguration(classes = DataRestApplication.class)
-@WebIntegrationTest(randomPort = true)
+@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class DataRestApplicationTests {
- @Value("${local.server.port}")
- private int port;
+ @Autowired
+ private TestRestTemplate restTemplate;
@Test
public void getCar() throws Exception {
- String url = "http://localhost:" + this.port + "/cars/1";
- ResponseEntity entity = new TestRestTemplate().getForEntity(url,
+ ResponseEntity entity = this.restTemplate.getForEntity("/cars/1",
String.class);
- assertThat(entity.getStatusCode(), equalTo(HttpStatus.OK));
- assertThat(entity.getBody(), containsString("Civic"));
+ assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
+ assertThat(entity.getBody()).contains("Civic");
}
@Test
public void findCars() throws Exception {
- String url = "http://localhost:" + this.port + "/cars/search/find?make=honda";
- ResponseEntity entity = new TestRestTemplate().getForEntity(url,
- String.class);
- assertThat(entity.getStatusCode(), equalTo(HttpStatus.OK));
- assertThat(entity.getBody(), containsString("cars/1"));
- assertThat(entity.getBody(), containsString("cars/2"));
- assertThat(entity.getBody(), not(containsString("cars/3")));
+ ResponseEntity entity = this.restTemplate
+ .getForEntity("/cars/search/find?make=honda", String.class);
+ assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
+ assertThat(entity.getBody()).contains("cars/1", "cars/2")
+ .doesNotContain("cars/3");
}
}
diff --git a/livelessons-integration/livelessons-integration-basic-messaging/src/main/java/demo/Producer.java b/livelessons-integration/livelessons-integration-basic-messaging/src/main/java/demo/Producer.java
index 87cdcde..408d01b 100644
--- a/livelessons-integration/livelessons-integration-basic-messaging/src/main/java/demo/Producer.java
+++ b/livelessons-integration/livelessons-integration-basic-messaging/src/main/java/demo/Producer.java
@@ -6,15 +6,17 @@
import java.util.UUID;
import org.springframework.amqp.rabbit.core.RabbitMessagingTemplate;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class Producer implements CommandLineRunner {
- @Autowired
- private RabbitMessagingTemplate messagingTemplate;
+ private final RabbitMessagingTemplate messagingTemplate;
+
+ public Producer(RabbitMessagingTemplate messagingTemplate) {
+ this.messagingTemplate = messagingTemplate;
+ }
@Override
public void run(String... args) throws Exception {
diff --git a/livelessons-integration/livelessons-integration-batch/src/main/java/demo/ContactBatchJobConfiguration.java b/livelessons-integration/livelessons-integration-batch/src/main/java/demo/ContactBatchJobConfiguration.java
index 2d7149b..2670309 100644
--- a/livelessons-integration/livelessons-integration-batch/src/main/java/demo/ContactBatchJobConfiguration.java
+++ b/livelessons-integration/livelessons-integration-batch/src/main/java/demo/ContactBatchJobConfiguration.java
@@ -16,7 +16,6 @@
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.batch.JobExecutionEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
@@ -88,13 +87,16 @@ public JdbcTemplate jdbcTemplate(DataSource dataSource) {
public static class BatchJobFinishedListener
implements ApplicationListener {
- @Autowired
- private JdbcTemplate jdbcTemplate;
+ private final JdbcTemplate jdbcTemplate;
+
+ public BatchJobFinishedListener(JdbcTemplate jdbcTemplate) {
+ this.jdbcTemplate = jdbcTemplate;
+ }
@Override
public void onApplicationEvent(JobExecutionEvent event) {
System.out.println("finished " + event.getJobExecution().toString());
- jdbcTemplate
+ this.jdbcTemplate
.query("SELECT first_name, last_name, email FROM contact",
(rs, i) -> new Contact(rs.getString("first_name"),
rs.getString("last_name"), rs.getString("email")))
diff --git a/livelessons-operations/livelessons-operations-cloud-monitoring/src/main/java/demo/ExampleController.java b/livelessons-operations/livelessons-operations-cloud-monitoring/src/main/java/demo/ExampleController.java
index 87ce004..da7314b 100644
--- a/livelessons-operations/livelessons-operations-cloud-monitoring/src/main/java/demo/ExampleController.java
+++ b/livelessons-operations/livelessons-operations-cloud-monitoring/src/main/java/demo/ExampleController.java
@@ -1,6 +1,5 @@
package demo;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -9,7 +8,6 @@ public class ExampleController {
private final ExampleHealthIndicator indicator;
- @Autowired
public ExampleController(ExampleHealthIndicator indicator) {
this.indicator = indicator;
}
diff --git a/livelessons-operations/livelessons-operations-metrics/src/main/java/demo/ExampleController.java b/livelessons-operations/livelessons-operations-metrics/src/main/java/demo/ExampleController.java
index 919a03c..37a260a 100644
--- a/livelessons-operations/livelessons-operations-metrics/src/main/java/demo/ExampleController.java
+++ b/livelessons-operations/livelessons-operations-metrics/src/main/java/demo/ExampleController.java
@@ -1,6 +1,5 @@
package demo;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -9,7 +8,6 @@ public class ExampleController {
private final ExampleService service;
- @Autowired
public ExampleController(ExampleService service) {
this.service = service;
}
diff --git a/livelessons-operations/livelessons-operations-metrics/src/main/java/demo/ExampleService.java b/livelessons-operations/livelessons-operations-metrics/src/main/java/demo/ExampleService.java
index bb5da2a..0a9de5f 100644
--- a/livelessons-operations/livelessons-operations-metrics/src/main/java/demo/ExampleService.java
+++ b/livelessons-operations/livelessons-operations-metrics/src/main/java/demo/ExampleService.java
@@ -2,7 +2,6 @@
import java.util.Random;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.metrics.CounterService;
import org.springframework.boot.actuate.metrics.GaugeService;
import org.springframework.stereotype.Service;
@@ -16,7 +15,6 @@ public class ExampleService {
private final GaugeService gaugeService;
- @Autowired
public ExampleService(CounterService counterService, GaugeService gaugeService) {
this.counterService = counterService;
this.gaugeService = gaugeService;
@@ -24,7 +22,7 @@ public ExampleService(CounterService counterService, GaugeService gaugeService)
public void call() {
this.counterService.increment("example.counter");
- this.gaugeService.submit("example.gauge", random.nextDouble());
+ this.gaugeService.submit("example.gauge", this.random.nextDouble());
}
}
diff --git a/livelessons-parent/pom.xml b/livelessons-parent/pom.xml
index 8e157b2..5e4cb4f 100644
--- a/livelessons-parent/pom.xml
+++ b/livelessons-parent/pom.xml
@@ -7,15 +7,14 @@
1.0.0-SNAPSHOT
pom
- org.springframework.cloud
- spring-cloud-starter-parent
- 1.0.2.RELEASE
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.4.1.RELEASE
../..
1.8
- 2.0.6.RELEASE
diff --git a/livelessons-rest/livelessons-rest-errors/src/main/java/demo/PersonPhotoRestController.java b/livelessons-rest/livelessons-rest-errors/src/main/java/demo/PersonPhotoRestController.java
index b571b83..6d96e40 100644
--- a/livelessons-rest/livelessons-rest-errors/src/main/java/demo/PersonPhotoRestController.java
+++ b/livelessons-rest/livelessons-rest-errors/src/main/java/demo/PersonPhotoRestController.java
@@ -5,7 +5,6 @@
import java.io.FileOutputStream;
import java.net.URI;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
@@ -29,8 +28,11 @@ public class PersonPhotoRestController {
private File root;
- @Autowired
- private PersonRepository personRepository;
+ private final PersonRepository personRepository;
+
+ public PersonPhotoRestController(PersonRepository personRepository) {
+ this.personRepository = personRepository;
+ }
@Value("${user.home}")
void setUserHome(String home) {
diff --git a/livelessons-security/livelessons-security-basic/src/main/java/basic/CustomGlobalAuthenticationManagerConfiguration.java b/livelessons-security/livelessons-security-basic/src/main/java/basic/CustomGlobalAuthenticationManagerConfiguration.java
index e34dee2..d814f66 100644
--- a/livelessons-security/livelessons-security-basic/src/main/java/basic/CustomGlobalAuthenticationManagerConfiguration.java
+++ b/livelessons-security/livelessons-security-basic/src/main/java/basic/CustomGlobalAuthenticationManagerConfiguration.java
@@ -1,6 +1,5 @@
package basic;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.authentication.configuration.EnableGlobalAuthentication;
@@ -12,8 +11,12 @@
public class CustomGlobalAuthenticationManagerConfiguration
extends GlobalAuthenticationConfigurerAdapter {
- @Autowired
- private UserDetailsService userDetailsService;
+ private final UserDetailsService userDetailsService;
+
+ public CustomGlobalAuthenticationManagerConfiguration(
+ UserDetailsService userDetailsService) {
+ this.userDetailsService = userDetailsService;
+ }
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
diff --git a/livelessons-security/livelessons-security-basic/src/test/java/basic/BasicSecurityApplicationTests.java b/livelessons-security/livelessons-security-basic/src/test/java/basic/BasicSecurityApplicationTests.java
index b042a1d..ba17cfb 100644
--- a/livelessons-security/livelessons-security-basic/src/test/java/basic/BasicSecurityApplicationTests.java
+++ b/livelessons-security/livelessons-security-basic/src/test/java/basic/BasicSecurityApplicationTests.java
@@ -1,74 +1,37 @@
package basic;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.SpringApplicationConfiguration;
-import org.springframework.boot.test.WebIntegrationTest;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
+import org.springframework.boot.context.embedded.LocalServerPort;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.ResponseEntity;
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.client.RestTemplate;
+import static org.assertj.core.api.Assertions.assertThat;
+
@RunWith(SpringJUnit4ClassRunner.class)
-@SpringApplicationConfiguration(classes = BasicSecurityApplication.class)
-@WebIntegrationTest(randomPort = true)
+@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class BasicSecurityApplicationTests {
- @Value("${local.server.port}")
- private int port;
-
@Autowired
- private RestTemplate restTemplate;
+ private RestTemplateBuilder restTemplateBuilder;
+
+ @LocalServerPort
+ private int port;
@Test
public void contextLoaded() throws Throwable {
- ResponseEntity re = restTemplate
- .getForEntity("http://localhost:" + port + "/hi", String.class);
- String actual = re.getBody().trim().toLowerCase();
- Assert.assertTrue(actual.contains("hello"));
- System.out.println("received: " + actual);
- }
-
- @Configuration
- public static class BasicAuthRestTemplateConfig {
-
- private String user = "pwebb", password = "boot";
-
- @Bean
- RestTemplate auth() {
- // credentials
- UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(
- this.user, this.password);
-
- CredentialsProvider credsProvider = new BasicCredentialsProvider();
- credsProvider.setCredentials(AuthScope.ANY, credentials);
-
- // set credentialsProvider on httpClient
- HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
-
- httpClientBuilder.setDefaultCredentialsProvider(credsProvider);
- CloseableHttpClient httpClient = httpClientBuilder.build();
-
- HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(
- httpClient);
-
- RestTemplate restTemplate = new RestTemplate();
- restTemplate.setRequestFactory(factory);
-
- return restTemplate;
- }
+ RestTemplate restTemplate = this.restTemplateBuilder
+ .basicAuthorization("pwebb", "boot").build();
+ ResponseEntity response = restTemplate
+ .getForEntity("http://localhost:" + this.port + "/hi", String.class);
+ assertThat(response.getBody()).containsIgnoringCase("hello");
+ System.out.println("received: " + response.getBody());
}
}
diff --git a/livelessons-security/livelessons-security-https/src/main/java/demo/SecurityConfig.java b/livelessons-security/livelessons-security-https/src/main/java/demo/SecurityConfig.java
index bc5cd55..34b02ca 100644
--- a/livelessons-security/livelessons-security-https/src/main/java/demo/SecurityConfig.java
+++ b/livelessons-security/livelessons-security-https/src/main/java/demo/SecurityConfig.java
@@ -18,8 +18,11 @@
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
- @Autowired
- private JdbcTemplate jdbcTemplate;
+ private final JdbcTemplate jdbcTemplate;
+
+ public SecurityConfig(JdbcTemplate jdbcTemplate) {
+ this.jdbcTemplate = jdbcTemplate;
+ }
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth,
diff --git a/livelessons-security/livelessons-security-https/src/test/java/demo/BasicHttpsSecurityApplicationTest.java b/livelessons-security/livelessons-security-https/src/test/java/demo/BasicHttpsSecurityApplicationTest.java
deleted file mode 100644
index 570559b..0000000
--- a/livelessons-security/livelessons-security-https/src/test/java/demo/BasicHttpsSecurityApplicationTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package demo;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.KeyStore;
-
-import javax.net.ssl.SSLContext;
-
-import org.apache.http.client.HttpClient;
-import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.conn.ssl.SSLContextBuilder;
-import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
-import org.apache.http.impl.client.HttpClients;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.SpringApplicationConfiguration;
-import org.springframework.boot.test.WebIntegrationTest;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.web.client.ResourceAccessException;
-import org.springframework.web.client.RestTemplate;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@SpringApplicationConfiguration(classes = BasicHttpsSecurityApplication.class)
-@WebIntegrationTest(randomPort = true)
-public class BasicHttpsSecurityApplicationTest {
-
- @Autowired
- private RestTemplate template;
-
- @Value("${local.server.port}")
- private String port;
-
- @Configuration
- public static class RestClientConfiguration {
-
- HttpClient httpClient() throws Exception {
- return HttpClients.custom().setSSLSocketFactory(socketFactory()).build();
- }
-
- SSLConnectionSocketFactory socketFactory() throws Exception {
- char[] password = "password".toCharArray();
- KeyStore truststore = KeyStore.getInstance("PKCS12");
- truststore.load(getKeyStoreFile(), password);
- SSLContextBuilder builder = new SSLContextBuilder();
- builder.loadKeyMaterial(truststore, password);
- builder.loadTrustMaterial(truststore, new TrustSelfSignedStrategy());
- return new SSLConnectionSocketFactory(builder.build(),
- new AllowAllHostnameVerifier());
- }
-
- InputStream getKeyStoreFile() throws IOException {
- ClassPathResource resource = new ClassPathResource("rod.p12");
- return resource.getInputStream();
- }
-
- @Bean
- RestTemplate authenticatedRestTemplate() throws Exception {
- HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(
- httpClient());
- return new RestTemplate(factory);
- }
- }
-
- private SSLContext defaultContext;
-
- @Before
- public void setUp() throws Exception {
- this.defaultContext = SSLContext.getDefault();
- }
-
- @After
- public void reset() throws Exception {
- SSLContext.setDefault(this.defaultContext);
- }
-
- @Test(expected = ResourceAccessException.class)
- public void testUnauthenticatedHello() throws Exception {
- RestTemplate template = new RestTemplate();
- ResponseEntity httpsEntity = template
- .getForEntity("https://localhost:" + this.port + "/hi", String.class);
- Assert.assertEquals(HttpStatus.OK, httpsEntity.getStatusCode());
- Assert.assertTrue(httpsEntity.getBody().toLowerCase().contains("hello, world"));
- }
-
- @Test
- public void testAuthenticatedHello() throws Exception {
- ResponseEntity httpsEntity = this.template
- .getForEntity("https://localhost:" + this.port + "/hi", String.class);
- Assert.assertEquals(HttpStatus.OK, httpsEntity.getStatusCode());
- Assert.assertTrue(httpsEntity.getBody().toLowerCase().contains("hello, world"));
- }
-
-}
diff --git a/livelessons-security/livelessons-security-https/src/test/java/demo/BasicHttpsSecurityApplicationTests.java b/livelessons-security/livelessons-security-https/src/test/java/demo/BasicHttpsSecurityApplicationTests.java
new file mode 100644
index 0000000..1fe9a1e
--- /dev/null
+++ b/livelessons-security/livelessons-security-https/src/test/java/demo/BasicHttpsSecurityApplicationTests.java
@@ -0,0 +1,91 @@
+package demo;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.KeyStore;
+
+import javax.net.ssl.SSLContext;
+
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.embedded.LocalServerPort;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.web.client.ResourceAccessException;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+public class BasicHttpsSecurityApplicationTests {
+
+ private SSLContext defaultContext;
+
+ @Autowired
+ private TestRestTemplate restTemplate;
+
+ @LocalServerPort
+ private int port;
+
+ @Before
+ public void setUp() throws Exception {
+ this.defaultContext = SSLContext.getDefault();
+ }
+
+ @After
+ public void reset() throws Exception {
+ SSLContext.setDefault(this.defaultContext);
+ }
+
+ @Test(expected = ResourceAccessException.class)
+ public void testUnauthenticatedHello() throws Exception {
+ ResponseEntity httpsEntity = this.restTemplate.getForEntity("/hi",
+ String.class);
+ assertThat(httpsEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
+ assertThat(httpsEntity.getBody()).containsIgnoringCase("hello, world");
+ }
+
+ @Test
+ public void testAuthenticatedHello() throws Exception {
+ TestRestTemplate restTemplate = new TestRestTemplate();
+ restTemplate.getRestTemplate()
+ .setRequestFactory(new HttpComponentsClientHttpRequestFactory(HttpClients
+ .custom().setSSLSocketFactory(socketFactory()).build()));
+ ResponseEntity httpsEntity = restTemplate
+ .getForEntity("https://localhost:" + this.port + "/hi", String.class);
+ assertThat(httpsEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
+ assertThat(httpsEntity.getBody()).containsIgnoringCase("hello, world");
+ }
+
+ private SSLConnectionSocketFactory socketFactory() throws Exception {
+ char[] password = "password".toCharArray();
+ KeyStore truststore = KeyStore.getInstance("PKCS12");
+ truststore.load(getKeyStoreFile(), password);
+ SSLContextBuilder builder = new SSLContextBuilder();
+ builder.loadKeyMaterial(truststore, password);
+ builder.loadTrustMaterial(truststore, new TrustSelfSignedStrategy());
+ return new SSLConnectionSocketFactory(builder.build(),
+ new NoopHostnameVerifier());
+ }
+
+ private InputStream getKeyStoreFile() throws IOException {
+ ClassPathResource resource = new ClassPathResource("rod.p12");
+ return resource.getInputStream();
+ }
+
+}
diff --git a/livelessons-security/livelessons-security-sso-auth-server/src/main/java/demo/OAuth2Config.java b/livelessons-security/livelessons-security-sso-auth-server/src/main/java/demo/OAuth2Config.java
index e5ae7c3..9fca614 100644
--- a/livelessons-security/livelessons-security-sso-auth-server/src/main/java/demo/OAuth2Config.java
+++ b/livelessons-security/livelessons-security-sso-auth-server/src/main/java/demo/OAuth2Config.java
@@ -1,6 +1,5 @@
package demo;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
@@ -12,13 +11,16 @@
@EnableAuthorizationServer
class OAuth2Config extends AuthorizationServerConfigurerAdapter {
- @Autowired
- private AuthenticationManager authenticationManager;
+ private final AuthenticationManager authenticationManager;
+
+ public OAuth2Config(AuthenticationManager authenticationManager) {
+ this.authenticationManager = authenticationManager;
+ }
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints)
throws Exception {
- endpoints.authenticationManager(authenticationManager);
+ endpoints.authenticationManager(this.authenticationManager);
}
@Override
diff --git a/livelessons-security/livelessons-security-sso-auth-server/src/main/java/demo/SecurityConfig.java b/livelessons-security/livelessons-security-sso-auth-server/src/main/java/demo/SecurityConfig.java
index 3602fc3..38ded78 100644
--- a/livelessons-security/livelessons-security-sso-auth-server/src/main/java/demo/SecurityConfig.java
+++ b/livelessons-security/livelessons-security-sso-auth-server/src/main/java/demo/SecurityConfig.java
@@ -1,6 +1,5 @@
package demo;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.authentication.configuration.EnableGlobalAuthentication;
@@ -11,8 +10,11 @@
@EnableGlobalAuthentication
public class SecurityConfig extends GlobalAuthenticationConfigurerAdapter {
- @Autowired
- private UserDetailsService userDetailsService;
+ private final UserDetailsService userDetailsService;
+
+ public SecurityConfig(UserDetailsService userDetailsService) {
+ this.userDetailsService = userDetailsService;
+ }
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
diff --git a/livelessons-security/livelessons-security-sso-resource/pom.xml b/livelessons-security/livelessons-security-sso-resource/pom.xml
index 944b9ab..03cbec4 100644
--- a/livelessons-security/livelessons-security-sso-resource/pom.xml
+++ b/livelessons-security/livelessons-security-sso-resource/pom.xml
@@ -11,6 +11,17 @@
../..
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-security/livelessons-security-sso-resource/src/main/java/demo/SsoResourceApplication.java b/livelessons-security/livelessons-security-sso-resource/src/main/java/demo/SsoResourceApplication.java
index e8050ca..a1037f1 100644
--- a/livelessons-security/livelessons-security-sso-resource/src/main/java/demo/SsoResourceApplication.java
+++ b/livelessons-security/livelessons-security-sso-resource/src/main/java/demo/SsoResourceApplication.java
@@ -7,7 +7,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.security.oauth2.resource.EnableOAuth2Resource;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -16,7 +16,7 @@
* @author Dave Syer (THANK YOU DAVE!)
*/
@SpringBootApplication
-@EnableOAuth2Resource
+@EnableResourceServer
@RestController
public class SsoResourceApplication {
diff --git a/livelessons-security/livelessons-security-sso-resource/src/main/resources/application.properties b/livelessons-security/livelessons-security-sso-resource/src/main/resources/application.properties
index c8684b4..2d353d1 100644
--- a/livelessons-security/livelessons-security-sso-resource/src/main/resources/application.properties
+++ b/livelessons-security/livelessons-security-sso-resource/src/main/resources/application.properties
@@ -1,3 +1,3 @@
server.port: 9000
server.address: 127.0.0.1
-spring.oauth2.resource.userInfoUri: http://localhost:9999/uaa/user
+security.oauth2.resource.userInfoUri: http://localhost:9999/uaa/user
diff --git a/livelessons-security/livelessons-security-sso-ui/pom.xml b/livelessons-security/livelessons-security-sso-ui/pom.xml
index c152938..7b5a921 100644
--- a/livelessons-security/livelessons-security-sso-ui/pom.xml
+++ b/livelessons-security/livelessons-security-sso-ui/pom.xml
@@ -12,6 +12,17 @@
../..
1.7.6
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.SR4
+ pom
+ import
+
+
+
org.springframework.cloud
diff --git a/livelessons-security/livelessons-security-sso-ui/src/main/java/demo/SecurityConfiguration.java b/livelessons-security/livelessons-security-sso-ui/src/main/java/demo/SecurityConfiguration.java
deleted file mode 100644
index 506809c..0000000
--- a/livelessons-security/livelessons-security-sso-ui/src/main/java/demo/SecurityConfiguration.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package demo;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.cloud.security.oauth2.sso.OAuth2SsoConfigurerAdapter;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.web.csrf.CsrfFilter;
-import org.springframework.security.web.csrf.CsrfToken;
-import org.springframework.security.web.csrf.CsrfTokenRepository;
-import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
-import org.springframework.web.filter.OncePerRequestFilter;
-import org.springframework.web.util.WebUtils;
-
-@Configuration
-class SecurityConfiguration extends OAuth2SsoConfigurerAdapter {
-
- @Override
- public void match(RequestMatchers matchers) {
- matchers.anyRequest();
- }
-
- @Override
- public void configure(HttpSecurity http) throws Exception {
- // @formatter:off
- http
- .authorizeRequests()
- .antMatchers("/index.html", "/home.html", "/")
- .permitAll()
- .anyRequest()
- .authenticated()
- .and()
- .csrf()
- .csrfTokenRepository(csrfTokenRepository())
- .and()
- .addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
- // @formatter:on
- }
-
- private Filter csrfHeaderFilter() {
- return new OncePerRequestFilter() {
-
- @Override
- protected void doFilterInternal(HttpServletRequest request,
- HttpServletResponse response, FilterChain filterChain)
- throws ServletException, IOException {
- CsrfToken csrf = (CsrfToken) request
- .getAttribute(CsrfToken.class.getName());
- if (csrf != null) {
- Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
- String token = csrf.getToken();
- if (cookie == null
- || token != null && !token.equals(cookie.getValue())) {
- cookie = new Cookie("XSRF-TOKEN", token);
- cookie.setPath("/");
- response.addCookie(cookie);
- }
- }
- filterChain.doFilter(request, response);
- }
- };
- }
-
- private CsrfTokenRepository csrfTokenRepository() {
- HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
- repository.setHeaderName("X-XSRF-TOKEN");
- return repository;
- }
-
-}
diff --git a/livelessons-security/livelessons-security-sso-ui/src/main/java/demo/SsoUiApplication.java b/livelessons-security/livelessons-security-sso-ui/src/main/java/demo/SsoUiApplication.java
index da58f04..0616d57 100644
--- a/livelessons-security/livelessons-security-sso-ui/src/main/java/demo/SsoUiApplication.java
+++ b/livelessons-security/livelessons-security-sso-ui/src/main/java/demo/SsoUiApplication.java
@@ -1,9 +1,26 @@
package demo;
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
-import org.springframework.cloud.security.oauth2.sso.EnableOAuth2Sso;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.web.csrf.CsrfFilter;
+import org.springframework.security.web.csrf.CsrfToken;
+import org.springframework.security.web.csrf.CsrfTokenRepository;
+import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
+import org.springframework.web.filter.OncePerRequestFilter;
+import org.springframework.web.util.WebUtils;
/**
* @author Josh Long
@@ -12,7 +29,55 @@
@SpringBootApplication
@EnableZuulProxy
@EnableOAuth2Sso
-public class SsoUiApplication {
+public class SsoUiApplication extends WebSecurityConfigurerAdapter {
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ // @formatter:off
+ http
+ .authorizeRequests()
+ .antMatchers("/index.html", "/home.html", "/")
+ .permitAll()
+ .anyRequest()
+ .authenticated()
+ .and()
+ .csrf()
+ .csrfTokenRepository(csrfTokenRepository())
+ .and()
+ .addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
+ // @formatter:on
+ }
+
+ private Filter csrfHeaderFilter() {
+ return new OncePerRequestFilter() {
+
+ @Override
+ protected void doFilterInternal(HttpServletRequest request,
+ HttpServletResponse response, FilterChain filterChain)
+ throws ServletException, IOException {
+ CsrfToken csrf = (CsrfToken) request
+ .getAttribute(CsrfToken.class.getName());
+ if (csrf != null) {
+ Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
+ String token = csrf.getToken();
+ if (cookie == null
+ || token != null && !token.equals(cookie.getValue())) {
+ cookie = new Cookie("XSRF-TOKEN", token);
+ cookie.setPath("/");
+ response.addCookie(cookie);
+ }
+ }
+ filterChain.doFilter(request, response);
+ }
+
+ };
+ }
+
+ private CsrfTokenRepository csrfTokenRepository() {
+ HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
+ repository.setHeaderName("X-XSRF-TOKEN");
+ return repository;
+ }
public static void main(String[] args) {
SpringApplication.run(SsoUiApplication.class, args);
diff --git a/livelessons-security/livelessons-security-sso-ui/src/main/resources/application.yml b/livelessons-security/livelessons-security-sso-ui/src/main/resources/application.yml
index 1d64c43..136e4fc 100644
--- a/livelessons-security/livelessons-security-sso-ui/src/main/resources/application.yml
+++ b/livelessons-security/livelessons-security-sso-ui/src/main/resources/application.yml
@@ -10,7 +10,7 @@ zuul:
user:
path: /user/**
url: http://localhost:9999/uaa/user
-spring:
+security:
oauth2:
sso:
home:
@@ -27,4 +27,4 @@ spring:
logging:
level:
org.springframework.security: DEBUG
- org.springframework.web: DEBUG
\ No newline at end of file
+ org.springframework.web: DEBUG
diff --git a/livelessons-web/livelessons-web-resources/pom.xml b/livelessons-web/livelessons-web-resources/pom.xml
index 871f4f7..839eeeb 100644
--- a/livelessons-web/livelessons-web-resources/pom.xml
+++ b/livelessons-web/livelessons-web-resources/pom.xml
@@ -19,6 +19,7 @@
org.webjars
jquery
+ 2.1.1