From 2892e9347673c2e47b0930f0f6c89558c806c833 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Wed, 19 Oct 2016 11:01:40 +0200 Subject: [PATCH 01/24] Code improvement --- .../baeldung/okhttp/OkHttpGetLiveTest.java | 3 ++ .../baeldung/okhttp/OkHttpMiscLiveTest.java | 28 +++++++------------ 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java index 9a49c8d9a2..dc80ce7cf5 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java @@ -14,6 +14,9 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; +//@RunWith(SpringJUnit4ClassRunner.class) +//@WebAppConfiguration +//@ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/api-servlet.xml") public class OkHttpGetLiveTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscLiveTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscLiveTest.java index c44500f4be..dcdb4e328c 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscLiveTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscLiveTest.java @@ -37,7 +37,7 @@ public class OkHttpMiscLiveTest { response.close(); } - @Test + @Test(expected = IOException.class) public void whenCancelRequest_thenCorrect() throws IOException { ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); @@ -49,30 +49,22 @@ public class OkHttpMiscLiveTest { .build(); final int seconds = 1; - final long startNanos = System.nanoTime(); + final Call call = client.newCall(request); // Schedule a job to cancel the call in 1 second. - executor.schedule(new Runnable() { - public void run() { + executor.schedule(() -> { + + logger.debug("Canceling call: " + (System.nanoTime() - startNanos) / 1e9f); + call.cancel(); + logger.debug("Canceled call: " + (System.nanoTime() - startNanos) / 1e9f); - logger.debug("Canceling call: " + (System.nanoTime() - startNanos) / 1e9f); - call.cancel(); - logger.debug("Canceled call: " + (System.nanoTime() - startNanos) / 1e9f); - } }, seconds, TimeUnit.SECONDS); - try { - - logger.debug("Executing call: " + (System.nanoTime() - startNanos) / 1e9f); - Response response = call.execute(); - logger.debug("Call was expected to fail, but completed: " + (System.nanoTime() - startNanos) / 1e9f, response); - - } catch (IOException e) { - - logger.debug("Call failed as expected: " + (System.nanoTime() - startNanos) / 1e9f, e); - } + logger.debug("Executing call: " + (System.nanoTime() - startNanos) / 1e9f); + Response response = call.execute(); + logger.debug("Call completed: " + (System.nanoTime() - startNanos) / 1e9f, response); } @Test From 35dbb1cfb0206f2c518597b52a77c13c2ba3b6ea Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Wed, 19 Oct 2016 12:18:03 +0200 Subject: [PATCH 02/24] Code improvement --- .../java/org/baeldung/okhttp/OkHttpGetLiveTest.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java index dc80ce7cf5..8049e23784 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java @@ -2,6 +2,7 @@ package org.baeldung.okhttp; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; import java.io.IOException; @@ -21,7 +22,7 @@ public class OkHttpGetLiveTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; - @Test + //@Test public void whenGetRequest_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -36,7 +37,7 @@ public class OkHttpGetLiveTest { assertThat(response.code(), equalTo(200)); } - @Test + //@Test public void whenGetRequestWithQueryParameter_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -57,7 +58,7 @@ public class OkHttpGetLiveTest { } @Test - public void whenAsynchronousGetRequest_thenCorrect() { + public void whenAsynchronousGetRequest_thenCorrect() throws InterruptedException { OkHttpClient client = new OkHttpClient(); @@ -70,12 +71,16 @@ public class OkHttpGetLiveTest { call.enqueue(new Callback() { public void onResponse(Call call, Response response) throws IOException { + assertThat(response.code(), equalTo(200)); } public void onFailure(Call call, IOException e) { + fail(); } }); + + Thread.sleep(3000); } } From 91faa251d51a76cff2451c19ec6404166446bae4 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Wed, 19 Oct 2016 12:23:03 +0200 Subject: [PATCH 03/24] Code improvement --- .../test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java index 8049e23784..632d7577a4 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java @@ -22,7 +22,7 @@ public class OkHttpGetLiveTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; - //@Test + @Test public void whenGetRequest_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -37,7 +37,7 @@ public class OkHttpGetLiveTest { assertThat(response.code(), equalTo(200)); } - //@Test + @Test public void whenGetRequestWithQueryParameter_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -71,12 +71,10 @@ public class OkHttpGetLiveTest { call.enqueue(new Callback() { public void onResponse(Call call, Response response) throws IOException { - assertThat(response.code(), equalTo(200)); } public void onFailure(Call call, IOException e) { - fail(); } }); From 0930c78ff7bc270b13276c254e5ba9ac4494a875 Mon Sep 17 00:00:00 2001 From: Nikhil Khatwani Date: Tue, 25 Oct 2016 21:13:32 +0530 Subject: [PATCH 04/24] BAEL-29-String Conversion changes --- .../java/conversion/StringConversion.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/java/conversion/StringConversion.java diff --git a/core-java/src/main/java/com/baeldung/java/conversion/StringConversion.java b/core-java/src/main/java/com/baeldung/java/conversion/StringConversion.java new file mode 100644 index 0000000000..c83ea6a20c --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/conversion/StringConversion.java @@ -0,0 +1,60 @@ +package com.baeldung.java.conversion; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalTime; +import java.util.Date; + +import com.baeldung.datetime.UseLocalTime; + +public class StringConversion { + + public static int getInt(String str) { + return Integer.parseInt(str); + } + + public static int getInteger(String str) { + return Integer.valueOf(str); + } + + public static long getLongPrimitive(String str) { + return Long.parseLong(str); + } + + public static Long getLong(String str) { + return Long.valueOf(str); + } + + public static double getDouble(String str) { + return Double.parseDouble(str); + } + + public static double getDoublePrimitive(String str) { + return Double.valueOf(str); + } + + public static byte[] getByteArray(String str) { + return str.getBytes(); + } + + public static char[] getCharArray(String str) { + return str.toCharArray(); + } + + public static boolean getBooleanPrimitive(String str) { + return Boolean.parseBoolean(str); + } + + public static boolean getBoolean(String str) { + return Boolean.valueOf(str); + } + + public static Date getJava6Date(String str, String format) throws ParseException { + SimpleDateFormat formatter = new SimpleDateFormat(format); + return formatter.parse(str); + } + + public static LocalTime getJava8Date(String str) throws ParseException { + return new UseLocalTime().getLocalTimeUsingParseMethod(str); + } +} From 6989041dc2afc899a349545e72a0653d5b0b5354 Mon Sep 17 00:00:00 2001 From: Nikhil Khatwani Date: Tue, 25 Oct 2016 22:34:25 +0530 Subject: [PATCH 05/24] Changes for String Conversions --- core-java/0.12457740242410742 | 0 .../com/baeldung/java/conversion/StringConversion.java | 8 ++++---- core-java/src/main/resources/targetFile.tmp | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 core-java/0.12457740242410742 create mode 100644 core-java/src/main/resources/targetFile.tmp diff --git a/core-java/0.12457740242410742 b/core-java/0.12457740242410742 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/core-java/src/main/java/com/baeldung/java/conversion/StringConversion.java b/core-java/src/main/java/com/baeldung/java/conversion/StringConversion.java index c83ea6a20c..0a0f79566e 100644 --- a/core-java/src/main/java/com/baeldung/java/conversion/StringConversion.java +++ b/core-java/src/main/java/com/baeldung/java/conversion/StringConversion.java @@ -2,10 +2,10 @@ package com.baeldung.java.conversion; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.time.LocalTime; +import java.time.LocalDateTime; import java.util.Date; -import com.baeldung.datetime.UseLocalTime; +import com.baeldung.datetime.UseLocalDateTime; public class StringConversion { @@ -54,7 +54,7 @@ public class StringConversion { return formatter.parse(str); } - public static LocalTime getJava8Date(String str) throws ParseException { - return new UseLocalTime().getLocalTimeUsingParseMethod(str); + public static LocalDateTime getJava8Date(String str) throws ParseException { + return new UseLocalDateTime().getLocalDateTimeUsingParseMethod(str); } } diff --git a/core-java/src/main/resources/targetFile.tmp b/core-java/src/main/resources/targetFile.tmp new file mode 100644 index 0000000000..20f137b416 --- /dev/null +++ b/core-java/src/main/resources/targetFile.tmp @@ -0,0 +1,2 @@ +line 1 +a second line \ No newline at end of file From 8c953fe0f3c15ed8ff128dfe76978c565529e259 Mon Sep 17 00:00:00 2001 From: michal_aibin Date: Fri, 4 Nov 2016 22:23:17 +0100 Subject: [PATCH 06/24] Fix web.xml in spring-mvc-web-vs-initializer project --- spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml index 9bebc263be..5c7a0b52d4 100644 --- a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml +++ b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml @@ -9,11 +9,11 @@ org.springframework.web.servlet.DispatcherServlet - 1 contextConfigLocation classpath*:mvc-configuration.xml + 1 From 90783532a5e91be0592fbf684733719b766ed0a0 Mon Sep 17 00:00:00 2001 From: michal_aibin Date: Fri, 4 Nov 2016 22:42:20 +0100 Subject: [PATCH 07/24] Rollback web.xml --- spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml index 5c7a0b52d4..9bebc263be 100644 --- a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml +++ b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml @@ -9,11 +9,11 @@ org.springframework.web.servlet.DispatcherServlet + 1 contextConfigLocation classpath*:mvc-configuration.xml - 1 From d6363949475c8fbf784cc30d96bdcaf7969a12f7 Mon Sep 17 00:00:00 2001 From: michal_aibin Date: Fri, 4 Nov 2016 22:47:09 +0100 Subject: [PATCH 08/24] Fix web.xml file --- spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml index 9bebc263be..5c7a0b52d4 100644 --- a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml +++ b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml @@ -9,11 +9,11 @@ org.springframework.web.servlet.DispatcherServlet - 1 contextConfigLocation classpath*:mvc-configuration.xml + 1 From c29601db412811fdabe60e46bd79fe3560b84b0e Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sat, 5 Nov 2016 12:12:08 +0000 Subject: [PATCH 09/24] Refactor Bar.java --- .../src/main/java/com/baeldung/persistence/model/Bar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Bar.java b/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Bar.java index efc6367116..c7f05254cc 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Bar.java +++ b/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Bar.java @@ -80,7 +80,7 @@ public class Bar implements Serializable { @Column(name = "timestamp") private long timestamp; - @Column(name = "created_date") + @Column(name = "created_date", updatable = false, nullable = false) @CreatedDate private long createdDate; From 04d33298ac01ad2e46cc79b083136ecafab3b97f Mon Sep 17 00:00:00 2001 From: maibin Date: Sat, 5 Nov 2016 22:07:52 +0100 Subject: [PATCH 10/24] Fixes to PDF module (#807) * PDF to X * PDF to X * Remove created doc * Code fixes and cleanup for PDF module * Fix web.xml in spring-mvc-web-vs-initializer project * Rollback web.xml * Fixes to PDF article --- pdf/pom.xml | 18 ---------- .../com/baeldung/pdf/PDF2HTMLExample.java | 18 ++++------ .../com/baeldung/pdf/PDF2TextExample.java | 36 +++++++++---------- 3 files changed, 23 insertions(+), 49 deletions(-) diff --git a/pdf/pom.xml b/pdf/pom.xml index 078a364e77..be1e9822e2 100644 --- a/pdf/pom.xml +++ b/pdf/pom.xml @@ -24,49 +24,31 @@ 3.8.1 test - - - org.apache.pdfbox - pdfbox - 2.0.3 - - org.apache.pdfbox pdfbox-tools 2.0.3 - net.sf.cssbox pdf2dom 1.6 - com.itextpdf itextpdf 5.5.10 - org.apache.poi poi 3.15 - - - org.apache.poi - poi-ooxml - 3.15 - - org.apache.poi poi-scratchpad 3.15 - org.apache.xmlgraphics batik-transcoder diff --git a/pdf/src/main/java/com/baeldung/pdf/PDF2HTMLExample.java b/pdf/src/main/java/com/baeldung/pdf/PDF2HTMLExample.java index 14e886e23b..0d38208bab 100644 --- a/pdf/src/main/java/com/baeldung/pdf/PDF2HTMLExample.java +++ b/pdf/src/main/java/com/baeldung/pdf/PDF2HTMLExample.java @@ -23,17 +23,13 @@ public class PDF2HTMLExample { } private static void generateHTMLFromPDF(String filename) throws ParserConfigurationException, IOException { - try { - PDDocument pdf = PDDocument.load(new File(filename)); - PDFDomTree parser = new PDFDomTree(); - Writer output = new PrintWriter("src/output/pdf.html", "utf-8"); - parser.writeText(pdf, output); - output.close(); - if (pdf != null) { - pdf.close(); - } - } catch (IOException e) { - e.printStackTrace(); + PDDocument pdf = PDDocument.load(new File(filename)); + PDFDomTree parser = new PDFDomTree(); + Writer output = new PrintWriter("src/output/pdf.html", "utf-8"); + parser.writeText(pdf, output); + output.close(); + if (pdf != null) { + pdf.close(); } } } diff --git a/pdf/src/main/java/com/baeldung/pdf/PDF2TextExample.java b/pdf/src/main/java/com/baeldung/pdf/PDF2TextExample.java index e4fb29dfaa..c5880a4e91 100644 --- a/pdf/src/main/java/com/baeldung/pdf/PDF2TextExample.java +++ b/pdf/src/main/java/com/baeldung/pdf/PDF2TextExample.java @@ -23,30 +23,26 @@ public class PDF2TextExample { } private static void generateTxtFromPDF(String filename) throws IOException { - try { - File f = new File(filename); - String parsedText; - PDFParser parser = new PDFParser(new RandomAccessFile(f, "r")); - parser.parse(); + File f = new File(filename); + String parsedText; + PDFParser parser = new PDFParser(new RandomAccessFile(f, "r")); + parser.parse(); - COSDocument cosDoc = parser.getDocument(); + COSDocument cosDoc = parser.getDocument(); - PDFTextStripper pdfStripper = new PDFTextStripper(); - PDDocument pdDoc = new PDDocument(cosDoc); + PDFTextStripper pdfStripper = new PDFTextStripper(); + PDDocument pdDoc = new PDDocument(cosDoc); - parsedText = pdfStripper.getText(pdDoc); + parsedText = pdfStripper.getText(pdDoc); - if (cosDoc != null) - cosDoc.close(); - if (pdDoc != null) - pdDoc.close(); - - PrintWriter pw = new PrintWriter("src/output/pdf.txt"); - pw.print(parsedText); - pw.close(); - } catch (Exception e) { - e.printStackTrace(); - } + if (cosDoc != null) + cosDoc.close(); + if (pdDoc != null) + pdDoc.close(); + + PrintWriter pw = new PrintWriter("src/output/pdf.txt"); + pw.print(parsedText); + pw.close(); } } From 3df5c8210dad905c3d7d53bfe3a16f704c0385ae Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 6 Nov 2016 18:17:07 +0200 Subject: [PATCH 11/24] code snippets for the `Java 9 Stream API improvements` article (#809) * code snippets for the `Java 9 Stream API improvements` article * code snippets for the `Java 9 Stream API improvements` article [2 attempt] * removed the first attempt --- .../language/stream/StreamFeaturesTest.java | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/stream/StreamFeaturesTest.java diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/stream/StreamFeaturesTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/stream/StreamFeaturesTest.java new file mode 100644 index 0000000000..a260e84164 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/stream/StreamFeaturesTest.java @@ -0,0 +1,119 @@ +package com.baeldung.java9.language.stream; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static java.lang.Integer.*; +import static org.junit.Assert.assertEquals; + +public class StreamFeaturesTest { + + public static class TakeAndDropWhileTest { + + public Stream getStreamAfterTakeWhileOperation() { + return Stream + .iterate("", s -> s + "s") + .takeWhile(s -> s.length() < 10); + } + + public Stream getStreamAfterDropWhileOperation() { + return Stream + .iterate("", s -> s + "s") + .takeWhile(s -> s.length() < 10) + .dropWhile(s -> !s.contains("sssss")); + } + + @Test + public void testTakeWhileOperation() { + List list = getStreamAfterTakeWhileOperation().collect(Collectors.toList()); + + assertEquals(10, list.size()); + + assertEquals("", list.get(0)); + assertEquals("ss", list.get(2)); + assertEquals("sssssssss", list.get(list.size() - 1)); + } + + @Test + public void testDropWhileOperation() { + List list = getStreamAfterDropWhileOperation().collect(Collectors.toList()); + + assertEquals(5, list.size()); + + assertEquals("sssss", list.get(0)); + assertEquals("sssssss", list.get(2)); + assertEquals("sssssssss", list.get(list.size() - 1)); + } + + } + + public static class IterateTest { + + private Stream getStream() { + return Stream.iterate(0, i -> i < 10, i -> i + 1); + } + + @Test + public void testIterateOperation() { + List list = getStream().collect(Collectors.toList()); + + assertEquals(10, list.size()); + + assertEquals(valueOf(0), list.get(0)); + assertEquals(valueOf(5), list.get(5)); + assertEquals(valueOf(9), list.get(list.size() - 1)); + } + + } + + public static class OfNullableTest { + + private List collection = Arrays.asList("A", "B", "C"); + private Map map = new HashMap<>() {{ + put("A", 10); + put("C", 30); + }}; + + private Stream getStreamWithOfNullable() { + return collection.stream() + .flatMap(s -> Stream.ofNullable(map.get(s))); + } + + private Stream getStream() { + return collection.stream() + .flatMap(s -> { + Integer temp = map.get(s); + return temp != null ? Stream.of(temp) : Stream.empty(); + }); + } + + private List testOfNullableFrom(Stream stream) { + List list = stream.collect(Collectors.toList()); + + assertEquals(2, list.size()); + + assertEquals(valueOf(10), list.get(0)); + assertEquals(valueOf(30), list.get(list.size() - 1)); + + return list; + } + + @Test + public void testOfNullable() { + + assertEquals( + testOfNullableFrom(getStream()), + testOfNullableFrom(getStreamWithOfNullable()) + ); + + } + + } + +} From 8daa90f3ded15b96d92f6b0b491e47d63d6b9425 Mon Sep 17 00:00:00 2001 From: tschiman Date: Sat, 5 Nov 2016 16:57:39 +0100 Subject: [PATCH 12/24] BAEL-89 Adding spring session tutorial code. --- spring-session/jetty-ex/pom.xml | 71 +++++++++++++++++++ .../session/tomcatex/JettyWebApplication.java | 19 +++++ .../session/tomcatex/SecurityConfig.java | 22 ++++++ .../session/tomcatex/SessionConfig.java | 17 +++++ .../src/main/resources/application.properties | 4 ++ spring-session/pom.xml | 20 ++++++ spring-session/tomcat-ex/pom.xml | 71 +++++++++++++++++++ .../session/tomcatex/SecurityConfig.java | 32 +++++++++ .../session/tomcatex/SessionConfig.java | 10 +++ .../tomcatex/TomcatWebApplication.java | 29 ++++++++ .../src/main/resources/application.properties | 2 + 11 files changed, 297 insertions(+) create mode 100644 spring-session/jetty-ex/pom.xml create mode 100644 spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java create mode 100644 spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java create mode 100644 spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java create mode 100644 spring-session/jetty-ex/src/main/resources/application.properties create mode 100644 spring-session/pom.xml create mode 100644 spring-session/tomcat-ex/pom.xml create mode 100644 spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java create mode 100644 spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java create mode 100644 spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java create mode 100644 spring-session/tomcat-ex/src/main/resources/application.properties diff --git a/spring-session/jetty-ex/pom.xml b/spring-session/jetty-ex/pom.xml new file mode 100644 index 0000000000..339821b5fe --- /dev/null +++ b/spring-session/jetty-ex/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + com.baeldung + jetty-ex + 1.0.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-jetty + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.session + spring-session + 1.2.1.RELEASE + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java new file mode 100644 index 0000000000..0da6316560 --- /dev/null +++ b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.session.tomcatex; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +public class JettyWebApplication { + public static void main(String[] args) { + SpringApplication.run(JettyWebApplication.class, args); + } + + @RequestMapping + public String helloJetty() { + return "hello Jetty"; + } +} diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java new file mode 100644 index 0000000000..3cd2e5e3ca --- /dev/null +++ b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java @@ -0,0 +1,22 @@ +package com.baeldung.spring.session.tomcatex; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; + +@Configuration +@EnableWebSecurity +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .sessionManagement() + .sessionCreationPolicy(SessionCreationPolicy.NEVER) + .and() + .authorizeRequests().anyRequest().hasRole("ADMIN").and() + .httpBasic().disable(); + } +} diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java new file mode 100644 index 0000000000..59fdefe30b --- /dev/null +++ b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.session.tomcatex; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; +import org.springframework.session.web.http.HeaderHttpSessionStrategy; +import org.springframework.session.web.http.HttpSessionStrategy; + +@Configuration +@EnableRedisHttpSession +public class SessionConfig extends AbstractHttpSessionApplicationInitializer { + @Bean + public HttpSessionStrategy httpSessionStrategy() { + return new HeaderHttpSessionStrategy(); + } +} diff --git a/spring-session/jetty-ex/src/main/resources/application.properties b/spring-session/jetty-ex/src/main/resources/application.properties new file mode 100644 index 0000000000..902de4e45f --- /dev/null +++ b/spring-session/jetty-ex/src/main/resources/application.properties @@ -0,0 +1,4 @@ +server.port=8081 + +spring.redis.host=localhost +spring.redis.port=6379 \ No newline at end of file diff --git a/spring-session/pom.xml b/spring-session/pom.xml new file mode 100644 index 0000000000..1e4bec0014 --- /dev/null +++ b/spring-session/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + spring-session + 1.0.0-SNAPSHOT + + + jetty-ex + tomcat-ex + + \ No newline at end of file diff --git a/spring-session/tomcat-ex/pom.xml b/spring-session/tomcat-ex/pom.xml new file mode 100644 index 0000000000..aed49df5e3 --- /dev/null +++ b/spring-session/tomcat-ex/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + com.baeldung + tomcat-ex + 1.0.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.cloud + spring-cloud-starter-zuul + + + org.springframework.session + spring-session + 1.2.1.RELEASE + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java new file mode 100644 index 0000000000..2af111fe08 --- /dev/null +++ b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java @@ -0,0 +1,32 @@ +package com.baeldung.spring.session.tomcatex; + +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.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +@EnableWebSecurity +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Autowired + public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication() + .withUser("user").password("password").roles("USER").and() + .withUser("admin").password("password").roles("ADMIN"); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .httpBasic().and() +// .csrf().disable() + .authorizeRequests() + .antMatchers("/").permitAll() + .antMatchers("/tomcat").hasRole("USER") + .antMatchers("/tomcat/admin").hasRole("ADMIN") + .anyRequest().authenticated(); + } +} diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java new file mode 100644 index 0000000000..5afac6cb6b --- /dev/null +++ b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java @@ -0,0 +1,10 @@ +package com.baeldung.spring.session.tomcatex; + +import org.springframework.context.annotation.Configuration; +import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; + +@Configuration +@EnableRedisHttpSession +public class SessionConfig extends AbstractHttpSessionApplicationInitializer { +} diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java new file mode 100644 index 0000000000..417aaddf29 --- /dev/null +++ b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java @@ -0,0 +1,29 @@ +package com.baeldung.spring.session.tomcatex; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +public class TomcatWebApplication { + public static void main(String[] args) { + SpringApplication.run(TomcatWebApplication.class, args); + } + + @RequestMapping + public String helloDefault() { + return "hello default"; + } + + @RequestMapping("/tomcat") + public String helloTomcat() { + return "hello tomcat"; + } + + @RequestMapping("/tomcat/admin") + public String helloTomcatAdmin() { + return "hello tomcat admin"; + } +} diff --git a/spring-session/tomcat-ex/src/main/resources/application.properties b/spring-session/tomcat-ex/src/main/resources/application.properties new file mode 100644 index 0000000000..49886b3b70 --- /dev/null +++ b/spring-session/tomcat-ex/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.redis.host=localhost +spring.redis.port=6379 \ No newline at end of file From 9938a1a0c7c27c66b52c6db2d4cc675e2c2c9af7 Mon Sep 17 00:00:00 2001 From: tschiman Date: Sat, 5 Nov 2016 17:35:46 +0100 Subject: [PATCH 13/24] BAEL-89 remove csrf disable --- .../com/baeldung/spring/session/tomcatex/SecurityConfig.java | 3 +-- .../com/baeldung/spring/session/tomcatex/SecurityConfig.java | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java index 3cd2e5e3ca..ef779718cd 100644 --- a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java +++ b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java @@ -16,7 +16,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.NEVER) .and() - .authorizeRequests().anyRequest().hasRole("ADMIN").and() - .httpBasic().disable(); + .authorizeRequests().anyRequest().hasRole("ADMIN").and(); } } diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java index 2af111fe08..91cd749c4c 100644 --- a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java +++ b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java @@ -22,7 +22,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .httpBasic().and() -// .csrf().disable() .authorizeRequests() .antMatchers("/").permitAll() .antMatchers("/tomcat").hasRole("USER") From f821eca9b424164e7909aeff48e76aa69773ec7e Mon Sep 17 00:00:00 2001 From: tschiman Date: Sat, 5 Nov 2016 17:52:45 +0100 Subject: [PATCH 14/24] BAEL-89 remove csrf disable --- .../com/baeldung/spring/session/tomcatex/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java index ef779718cd..202cad27e6 100644 --- a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java +++ b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java @@ -16,6 +16,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.NEVER) .and() - .authorizeRequests().anyRequest().hasRole("ADMIN").and(); + .authorizeRequests().anyRequest().hasRole("ADMIN"); } } From 8d699c1b5d0e4655869982dcfc8a3f5091a92049 Mon Sep 17 00:00:00 2001 From: tschiman Date: Sun, 6 Nov 2016 03:35:52 +0100 Subject: [PATCH 15/24] BAEL-89 modifying the module names and changing the dependencies to be in line with what we would get from start.spring.io --- spring-session/{jetty-ex => jetty-session-demo}/pom.xml | 6 +++--- .../spring/session/tomcatex/JettyWebApplication.java | 5 +++++ .../baeldung/spring/session/tomcatex/SecurityConfig.java | 0 .../baeldung/spring/session/tomcatex/SessionConfig.java | 0 .../src/main/resources/application.properties | 0 spring-session/pom.xml | 4 ++-- .../{tomcat-ex => tomcat-session-demo}/pom.xml | 9 ++------- .../baeldung/spring/session/tomcatex/SecurityConfig.java | 0 .../baeldung/spring/session/tomcatex/SessionConfig.java | 0 .../spring/session/tomcatex/TomcatWebApplication.java | 0 .../src/main/resources/application.properties | 0 11 files changed, 12 insertions(+), 12 deletions(-) rename spring-session/{jetty-ex => jetty-session-demo}/pom.xml (97%) rename spring-session/{jetty-ex => jetty-session-demo}/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java (85%) rename spring-session/{jetty-ex => jetty-session-demo}/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java (100%) rename spring-session/{jetty-ex => jetty-session-demo}/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java (100%) rename spring-session/{jetty-ex => jetty-session-demo}/src/main/resources/application.properties (100%) rename spring-session/{tomcat-ex => tomcat-session-demo}/pom.xml (91%) rename spring-session/{tomcat-ex => tomcat-session-demo}/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java (100%) rename spring-session/{tomcat-ex => tomcat-session-demo}/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java (100%) rename spring-session/{tomcat-ex => tomcat-session-demo}/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java (100%) rename spring-session/{tomcat-ex => tomcat-session-demo}/src/main/resources/application.properties (100%) diff --git a/spring-session/jetty-ex/pom.xml b/spring-session/jetty-session-demo/pom.xml similarity index 97% rename from spring-session/jetty-ex/pom.xml rename to spring-session/jetty-session-demo/pom.xml index 339821b5fe..717506fbce 100644 --- a/spring-session/jetty-ex/pom.xml +++ b/spring-session/jetty-session-demo/pom.xml @@ -20,9 +20,10 @@ org.springframework.boot spring-boot-starter-jetty + org.springframework.boot - spring-boot-starter-web + spring-boot-starter-data-redis org.springframework.boot @@ -31,11 +32,10 @@ org.springframework.session spring-session - 1.2.1.RELEASE org.springframework.boot - spring-boot-starter-data-redis + spring-boot-starter-web diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java similarity index 85% rename from spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java rename to spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java index 0da6316560..2cdc5f99af 100644 --- a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java +++ b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java @@ -16,4 +16,9 @@ public class JettyWebApplication { public String helloJetty() { return "hello Jetty"; } + + @RequestMapping("/test") + public String lksjdf() { + return ""; + } } diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java similarity index 100% rename from spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java rename to spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java similarity index 100% rename from spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java rename to spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java diff --git a/spring-session/jetty-ex/src/main/resources/application.properties b/spring-session/jetty-session-demo/src/main/resources/application.properties similarity index 100% rename from spring-session/jetty-ex/src/main/resources/application.properties rename to spring-session/jetty-session-demo/src/main/resources/application.properties diff --git a/spring-session/pom.xml b/spring-session/pom.xml index 1e4bec0014..74561edc59 100644 --- a/spring-session/pom.xml +++ b/spring-session/pom.xml @@ -14,7 +14,7 @@ 1.0.0-SNAPSHOT - jetty-ex - tomcat-ex + jetty-session-demo + tomcat-session-demo \ No newline at end of file diff --git a/spring-session/tomcat-ex/pom.xml b/spring-session/tomcat-session-demo/pom.xml similarity index 91% rename from spring-session/tomcat-ex/pom.xml rename to spring-session/tomcat-session-demo/pom.xml index aed49df5e3..cade029ac8 100644 --- a/spring-session/tomcat-ex/pom.xml +++ b/spring-session/tomcat-session-demo/pom.xml @@ -18,24 +18,19 @@ org.springframework.boot - spring-boot-starter-web + spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-security - - org.springframework.cloud - spring-cloud-starter-zuul - org.springframework.session spring-session - 1.2.1.RELEASE org.springframework.boot - spring-boot-starter-data-redis + spring-boot-starter-web diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java similarity index 100% rename from spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java rename to spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java similarity index 100% rename from spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java rename to spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java similarity index 100% rename from spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java rename to spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java diff --git a/spring-session/tomcat-ex/src/main/resources/application.properties b/spring-session/tomcat-session-demo/src/main/resources/application.properties similarity index 100% rename from spring-session/tomcat-ex/src/main/resources/application.properties rename to spring-session/tomcat-session-demo/src/main/resources/application.properties From 9bf8fee21098336bd35f979b17910715e918f2e6 Mon Sep 17 00:00:00 2001 From: tschiman Date: Sun, 6 Nov 2016 03:38:21 +0100 Subject: [PATCH 16/24] BAEL-89 modifying the maven sub project names --- spring-session/jetty-session-demo/pom.xml | 2 +- spring-session/tomcat-session-demo/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-session/jetty-session-demo/pom.xml b/spring-session/jetty-session-demo/pom.xml index 717506fbce..86a8596862 100644 --- a/spring-session/jetty-session-demo/pom.xml +++ b/spring-session/jetty-session-demo/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.baeldung - jetty-ex + jetty-session-demo 1.0.0-SNAPSHOT diff --git a/spring-session/tomcat-session-demo/pom.xml b/spring-session/tomcat-session-demo/pom.xml index cade029ac8..805d7bec25 100644 --- a/spring-session/tomcat-session-demo/pom.xml +++ b/spring-session/tomcat-session-demo/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.baeldung - tomcat-ex + tomcat-session-demo 1.0.0-SNAPSHOT From ef090079322df1f128013dfd29b78a57162dee1e Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sun, 6 Nov 2016 22:28:05 +0100 Subject: [PATCH 17/24] BAEL-89 - reformatting source - adding packaging to pom to parent spring-session module --- .../session/tomcatex/JettyWebApplication.java | 22 ++++++------- .../session/tomcatex/SecurityConfig.java | 16 +++++----- .../session/tomcatex/SessionConfig.java | 8 ++--- .../src/main/resources/application.properties | 1 - spring-session/pom.xml | 2 ++ .../session/tomcatex/SecurityConfig.java | 32 +++++++++---------- .../tomcatex/TomcatWebApplication.java | 30 ++++++++--------- 7 files changed, 56 insertions(+), 55 deletions(-) diff --git a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java index 2cdc5f99af..7bbc776eaa 100644 --- a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java +++ b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java @@ -8,17 +8,17 @@ import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class JettyWebApplication { - public static void main(String[] args) { - SpringApplication.run(JettyWebApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(JettyWebApplication.class, args); + } - @RequestMapping - public String helloJetty() { - return "hello Jetty"; - } + @RequestMapping + public String helloJetty() { + return "hello Jetty"; + } - @RequestMapping("/test") - public String lksjdf() { - return ""; - } + @RequestMapping("/test") + public String lksjdf() { + return ""; + } } diff --git a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java index 202cad27e6..6ed7df9218 100644 --- a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java +++ b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java @@ -10,12 +10,12 @@ import org.springframework.security.config.http.SessionCreationPolicy; @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { - @Override - protected void configure(HttpSecurity http) throws Exception { - http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.NEVER) - .and() - .authorizeRequests().anyRequest().hasRole("ADMIN"); - } + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .sessionManagement() + .sessionCreationPolicy(SessionCreationPolicy.NEVER) + .and() + .authorizeRequests().anyRequest().hasRole("ADMIN"); + } } diff --git a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java index 59fdefe30b..f261f66f9d 100644 --- a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java +++ b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java @@ -10,8 +10,8 @@ import org.springframework.session.web.http.HttpSessionStrategy; @Configuration @EnableRedisHttpSession public class SessionConfig extends AbstractHttpSessionApplicationInitializer { - @Bean - public HttpSessionStrategy httpSessionStrategy() { - return new HeaderHttpSessionStrategy(); - } + @Bean + public HttpSessionStrategy httpSessionStrategy() { + return new HeaderHttpSessionStrategy(); + } } diff --git a/spring-session/jetty-session-demo/src/main/resources/application.properties b/spring-session/jetty-session-demo/src/main/resources/application.properties index 902de4e45f..7f81672eda 100644 --- a/spring-session/jetty-session-demo/src/main/resources/application.properties +++ b/spring-session/jetty-session-demo/src/main/resources/application.properties @@ -1,4 +1,3 @@ server.port=8081 - spring.redis.host=localhost spring.redis.port=6379 \ No newline at end of file diff --git a/spring-session/pom.xml b/spring-session/pom.xml index 74561edc59..fec6a46af2 100644 --- a/spring-session/pom.xml +++ b/spring-session/pom.xml @@ -4,6 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + com.baeldung parent-modules @@ -12,6 +13,7 @@ spring-session 1.0.0-SNAPSHOT + pom jetty-session-demo diff --git a/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java index 91cd749c4c..3e419b27a2 100644 --- a/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java +++ b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java @@ -11,21 +11,21 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication() - .withUser("user").password("password").roles("USER").and() - .withUser("admin").password("password").roles("ADMIN"); - } + @Autowired + public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication() + .withUser("user").password("password").roles("USER").and() + .withUser("admin").password("password").roles("ADMIN"); + } - @Override - protected void configure(HttpSecurity http) throws Exception { - http - .httpBasic().and() - .authorizeRequests() - .antMatchers("/").permitAll() - .antMatchers("/tomcat").hasRole("USER") - .antMatchers("/tomcat/admin").hasRole("ADMIN") - .anyRequest().authenticated(); - } + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .httpBasic().and() + .authorizeRequests() + .antMatchers("/").permitAll() + .antMatchers("/tomcat").hasRole("USER") + .antMatchers("/tomcat/admin").hasRole("ADMIN") + .anyRequest().authenticated(); + } } diff --git a/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java index 417aaddf29..58c6b807ec 100644 --- a/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java +++ b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java @@ -8,22 +8,22 @@ import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class TomcatWebApplication { - public static void main(String[] args) { - SpringApplication.run(TomcatWebApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(TomcatWebApplication.class, args); + } - @RequestMapping - public String helloDefault() { - return "hello default"; - } + @RequestMapping + public String helloDefault() { + return "hello default"; + } - @RequestMapping("/tomcat") - public String helloTomcat() { - return "hello tomcat"; - } + @RequestMapping("/tomcat") + public String helloTomcat() { + return "hello tomcat"; + } - @RequestMapping("/tomcat/admin") - public String helloTomcatAdmin() { - return "hello tomcat admin"; - } + @RequestMapping("/tomcat/admin") + public String helloTomcatAdmin() { + return "hello tomcat admin"; + } } From 9ea65a801e925873b011dccf50f335ad6531c013 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sun, 6 Nov 2016 22:55:22 +0100 Subject: [PATCH 18/24] BAEL-89 - adding spring-session to main pom --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index d8830e2a59..857922310f 100644 --- a/pom.xml +++ b/pom.xml @@ -132,6 +132,7 @@ spring-security-rest-full spring-security-rest spring-security-x509 + spring-session spring-spel spring-thymeleaf spring-userservice From 979b6787bad38f9e820e70dce69639f02b40a74f Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sun, 6 Nov 2016 23:08:05 +0100 Subject: [PATCH 19/24] adding missing dependency for PDF to X conversion article --- pdf/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pdf/pom.xml b/pdf/pom.xml index be1e9822e2..311265880d 100644 --- a/pdf/pom.xml +++ b/pdf/pom.xml @@ -54,6 +54,11 @@ batik-transcoder 1.8 + + org.apache.poi + poi-ooxml + 3.15 + From b9c3710c56544da328655b27ead3b6e6df02bac8 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 6 Nov 2016 21:38:08 -0500 Subject: [PATCH 20/24] Added code for new module --- .../spring-cloud-ribbon-client/pom.xml | 79 +++++++++++++++++++ .../ribbon/client/RibbonConfiguration.java | 28 +++++++ .../ribbon/client/ServerLocationApp.java | 36 +++++++++ .../src/main/resources/application.yml | 13 +++ .../ribbon/client/ServerLocationAppTests.java | 54 +++++++++++++ .../cloud/ribbon/client/TestConfig.java | 17 ++++ 6 files changed, 227 insertions(+) create mode 100644 spring-cloud/spring-cloud-ribbon-client/pom.xml create mode 100644 spring-cloud/spring-cloud-ribbon-client/src/main/java/com/baeldung/spring/cloud/ribbon/client/RibbonConfiguration.java create mode 100644 spring-cloud/spring-cloud-ribbon-client/src/main/java/com/baeldung/spring/cloud/ribbon/client/ServerLocationApp.java create mode 100644 spring-cloud/spring-cloud-ribbon-client/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-ribbon-client/src/test/java/com/baeldung/spring/cloud/ribbon/client/ServerLocationAppTests.java create mode 100644 spring-cloud/spring-cloud-ribbon-client/src/test/java/com/baeldung/spring/cloud/ribbon/client/TestConfig.java diff --git a/spring-cloud/spring-cloud-ribbon-client/pom.xml b/spring-cloud/spring-cloud-ribbon-client/pom.xml new file mode 100644 index 0000000000..c597c5ab8e --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon-client/pom.xml @@ -0,0 +1,79 @@ + + 4.0.0 + com.baeldung + spring-cloud-ribbon + 0.0.1-SNAPSHOT + jar + spring-cloud-ribbon-client + Introduction to Spring Cloud Rest Client with Netflix Ribbon + + + org.springframework.boot + spring-boot-starter-parent + 1.4.1.RELEASE + + + + + UTF-8 + 1.8 + + + + + org.springframework.cloud + spring-cloud-starter-ribbon + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Camden.SR1 + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-ribbon-client/src/main/java/com/baeldung/spring/cloud/ribbon/client/RibbonConfiguration.java b/spring-cloud/spring-cloud-ribbon-client/src/main/java/com/baeldung/spring/cloud/ribbon/client/RibbonConfiguration.java new file mode 100644 index 0000000000..59998432ad --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon-client/src/main/java/com/baeldung/spring/cloud/ribbon/client/RibbonConfiguration.java @@ -0,0 +1,28 @@ +package com.baeldung.spring.cloud.ribbon.client; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; + +import com.netflix.client.config.IClientConfig; +import com.netflix.loadbalancer.IPing; +import com.netflix.loadbalancer.IRule; +import com.netflix.loadbalancer.PingUrl; +import com.netflix.loadbalancer.WeightedResponseTimeRule; +import com.netflix.loadbalancer.AvailabilityFilteringRule; + +public class RibbonConfiguration { + + @Autowired + IClientConfig ribbonClientConfig; + + @Bean + public IPing ribbonPing(IClientConfig config) { + return new PingUrl(); + } + + @Bean + public IRule ribbonRule(IClientConfig config) { + return new WeightedResponseTimeRule(); + } + +} diff --git a/spring-cloud/spring-cloud-ribbon-client/src/main/java/com/baeldung/spring/cloud/ribbon/client/ServerLocationApp.java b/spring-cloud/spring-cloud-ribbon-client/src/main/java/com/baeldung/spring/cloud/ribbon/client/ServerLocationApp.java new file mode 100644 index 0000000000..6105e2c489 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon-client/src/main/java/com/baeldung/spring/cloud/ribbon/client/ServerLocationApp.java @@ -0,0 +1,36 @@ +package com.baeldung.spring.cloud.ribbon.client; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.netflix.ribbon.RibbonClient; +import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +@SpringBootApplication +@RestController +@RibbonClient(name = "ping-a-server", configuration = RibbonConfiguration.class) +public class ServerLocationApp { + + @LoadBalanced + @Bean + RestTemplate getRestTemplate() { + return new RestTemplate(); + } + + @Autowired + RestTemplate restTemplate; + + @RequestMapping("/server-location") + public String serverLocation() { + String servLoc = this.restTemplate.getForObject("http://ping-server/locaus", String.class); + return servLoc; + } + + public static void main(String[] args) { + SpringApplication.run(ServerLocationApp.class, args); + } +} diff --git a/spring-cloud/spring-cloud-ribbon-client/src/main/resources/application.yml b/spring-cloud/spring-cloud-ribbon-client/src/main/resources/application.yml new file mode 100644 index 0000000000..189a923c6c --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon-client/src/main/resources/application.yml @@ -0,0 +1,13 @@ +spring: + application: + name: spring-cloud-ribbon + +server: + port: 8888 + +ping-server: + ribbon: + eureka: + enabled: false + listOfServers: localhost:9092,localhost:9999 + ServerListRefreshInterval: 15000 \ No newline at end of file diff --git a/spring-cloud/spring-cloud-ribbon-client/src/test/java/com/baeldung/spring/cloud/ribbon/client/ServerLocationAppTests.java b/spring-cloud/spring-cloud-ribbon-client/src/test/java/com/baeldung/spring/cloud/ribbon/client/ServerLocationAppTests.java new file mode 100644 index 0000000000..b3606537a2 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon-client/src/test/java/com/baeldung/spring/cloud/ribbon/client/ServerLocationAppTests.java @@ -0,0 +1,54 @@ +package com.baeldung.spring.cloud.ribbon.client; + +import static org.assertj.core.api.BDDAssertions.then; +import static org.junit.Assert.assertEquals; + +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.SpringApplication; +import org.springframework.boot.context.embedded.LocalServerPort; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; + +@SuppressWarnings("unused") +@RunWith(SpringRunner.class) +@SpringBootTest(classes = ServerLocationApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class ServerLocationAppTests { + ConfigurableApplicationContext application2; + ConfigurableApplicationContext application3; + + @Before + public void startApps() { + this.application2 = startApp(9092); + this.application3 = startApp(9999); + } + + @After + public void closeApps() { + this.application2.close(); + this.application3.close(); + } + + @LocalServerPort + private int port; + + @Autowired + private TestRestTemplate testRestTemplate; + + @Test + public void loadBalancingServersTest() throws InterruptedException { + ResponseEntity response = this.testRestTemplate.getForEntity("http://localhost:" + this.port + "/server-location", String.class); + assertEquals(response.getBody(), "Australia"); + } + + private ConfigurableApplicationContext startApp(int port) { + return SpringApplication.run(TestConfig.class, "--server.port=" + port, "--spring.jmx.enabled=false"); + } +} diff --git a/spring-cloud/spring-cloud-ribbon-client/src/test/java/com/baeldung/spring/cloud/ribbon/client/TestConfig.java b/spring-cloud/spring-cloud-ribbon-client/src/test/java/com/baeldung/spring/cloud/ribbon/client/TestConfig.java new file mode 100644 index 0000000000..886b28a32e --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon-client/src/test/java/com/baeldung/spring/cloud/ribbon/client/TestConfig.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.cloud.ribbon.client; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Configuration +@EnableAutoConfiguration +@RestController +public class TestConfig { + + @RequestMapping(value = "/locaus") + public String locationAUSDetails() { + return "Australia"; + } +} From b7de8a08f453bd676a4f9acefe65add54837291e Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 6 Nov 2016 21:39:24 -0500 Subject: [PATCH 21/24] Updated pom.xml added new module "spring-cloud-ribbon-client" --- spring-cloud/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index 2349613def..455a5b876b 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -11,6 +11,7 @@ spring-cloud-eureka spring-cloud-hystrix spring-cloud-bootstrap + spring-cloud-ribbon-client pom From d07908f71b2572dfd49c3bafe51440f08992aeb4 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 7 Nov 2016 21:07:06 +0200 Subject: [PATCH 22/24] add source code for Facebook login --- spring-social-login/pom.xml | 169 ++++++++++++++++++ .../java/org/baeldung/config/Application.java | 18 ++ .../org/baeldung/config/SecurityConfig.java | 61 +++++++ .../java/org/baeldung/config/WebConfig.java | 39 ++++ .../persistence/dao/UserRepository.java | 10 ++ .../org/baeldung/persistence/model/User.java | 55 ++++++ .../security/FacebookConnectionSignup.java | 28 +++ .../security/FacebookSignInAdapter.java | 21 +++ .../security/MyUserDetailsService.java | 34 ++++ .../src/main/resources/application.properties | 3 + .../src/main/resources/data.sql | 1 + .../src/main/resources/templates/index.html | 27 +++ .../src/main/resources/templates/login.html | 44 +++++ .../test/ApplicationIntegrationTest.java | 18 ++ 14 files changed, 528 insertions(+) create mode 100644 spring-social-login/pom.xml create mode 100644 spring-social-login/src/main/java/org/baeldung/config/Application.java create mode 100644 spring-social-login/src/main/java/org/baeldung/config/SecurityConfig.java create mode 100644 spring-social-login/src/main/java/org/baeldung/config/WebConfig.java create mode 100644 spring-social-login/src/main/java/org/baeldung/persistence/dao/UserRepository.java create mode 100644 spring-social-login/src/main/java/org/baeldung/persistence/model/User.java create mode 100644 spring-social-login/src/main/java/org/baeldung/security/FacebookConnectionSignup.java create mode 100644 spring-social-login/src/main/java/org/baeldung/security/FacebookSignInAdapter.java create mode 100644 spring-social-login/src/main/java/org/baeldung/security/MyUserDetailsService.java create mode 100644 spring-social-login/src/main/resources/application.properties create mode 100644 spring-social-login/src/main/resources/data.sql create mode 100644 spring-social-login/src/main/resources/templates/index.html create mode 100644 spring-social-login/src/main/resources/templates/login.html create mode 100644 spring-social-login/src/test/java/org/baeldung/test/ApplicationIntegrationTest.java diff --git a/spring-social-login/pom.xml b/spring-social-login/pom.xml new file mode 100644 index 0000000000..6e74b1c3d1 --- /dev/null +++ b/spring-social-login/pom.xml @@ -0,0 +1,169 @@ + + 4.0.0 + spring-social-login + + spring-social-login + war + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + org.springframework.security + spring-security-web + + + + org.springframework.security + spring-security-config + + + + org.springframework.security + spring-security-taglibs + + + + org.thymeleaf.extras + thymeleaf-extras-springsecurity4 + + + + + org.springframework.social + spring-social-facebook + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + com.h2database + h2 + + + + + org.springframework.boot + spring-boot-starter-test + + + + org.springframework + spring-test + test + + + + junit + junit + test + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + + + + spring-social-login + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-war-plugin + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + + + 1.8 + 3.3.2 + + + \ No newline at end of file diff --git a/spring-social-login/src/main/java/org/baeldung/config/Application.java b/spring-social-login/src/main/java/org/baeldung/config/Application.java new file mode 100644 index 0000000000..cf6251a51e --- /dev/null +++ b/spring-social-login/src/main/java/org/baeldung/config/Application.java @@ -0,0 +1,18 @@ +package org.baeldung.config; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; + +@SpringBootApplication +@EnableJpaRepositories("org.baeldung.persistence.dao") +@EntityScan("org.baeldung.persistence.model") +public class Application extends SpringBootServletInitializer { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} \ No newline at end of file diff --git a/spring-social-login/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-social-login/src/main/java/org/baeldung/config/SecurityConfig.java new file mode 100644 index 0000000000..8e439653a9 --- /dev/null +++ b/spring-social-login/src/main/java/org/baeldung/config/SecurityConfig.java @@ -0,0 +1,61 @@ +package org.baeldung.config; + +import org.baeldung.security.FacebookSignInAdapter; +import org.baeldung.security.FacebookConnectionSignup; +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.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.social.connect.ConnectionFactoryLocator; +import org.springframework.social.connect.UsersConnectionRepository; +import org.springframework.social.connect.mem.InMemoryUsersConnectionRepository; +import org.springframework.social.connect.web.ProviderSignInController; + +@Configuration +@EnableWebSecurity +@ComponentScan(basePackages = { "org.baeldung.security" }) +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Autowired + private UserDetailsService userDetailsService; + + @Autowired + private ConnectionFactoryLocator connectionFactoryLocator; + + @Autowired + private UsersConnectionRepository usersConnectionRepository; + + @Autowired + private FacebookConnectionSignup facebookConnectionSignup; + + @Override + protected void configure(final AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService); + } + + @Override + protected void configure(final HttpSecurity http) throws Exception { + // @formatter:off + http + .csrf().disable() + .authorizeRequests() + .antMatchers("/login*","/signin/**","/signup/**").permitAll() + .anyRequest().authenticated() + .and() + .formLogin().loginPage("/login").permitAll() + .and() + .logout(); + } // @formatter:on + + @Bean + // @Primary + public ProviderSignInController providerSignInController() { + ((InMemoryUsersConnectionRepository) usersConnectionRepository).setConnectionSignUp(facebookConnectionSignup); + return new ProviderSignInController(connectionFactoryLocator, usersConnectionRepository, new FacebookSignInAdapter()); + } +} \ No newline at end of file diff --git a/spring-social-login/src/main/java/org/baeldung/config/WebConfig.java b/spring-social-login/src/main/java/org/baeldung/config/WebConfig.java new file mode 100644 index 0000000000..8cfcd6cb41 --- /dev/null +++ b/spring-social-login/src/main/java/org/baeldung/config/WebConfig.java @@ -0,0 +1,39 @@ +package org.baeldung.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +@Configuration +@EnableWebMvc +public class WebConfig extends WebMvcConfigurerAdapter { + + @Bean + public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + @Override + public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { + configurer.enable(); + } + + @Override + public void addViewControllers(final ViewControllerRegistry registry) { + super.addViewControllers(registry); + registry.addViewController("/").setViewName("forward:/index"); + registry.addViewController("/index"); + registry.addViewController("/login"); + } + + @Override + public void addResourceHandlers(final ResourceHandlerRegistry registry) { + registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); + } + +} \ No newline at end of file diff --git a/spring-social-login/src/main/java/org/baeldung/persistence/dao/UserRepository.java b/spring-social-login/src/main/java/org/baeldung/persistence/dao/UserRepository.java new file mode 100644 index 0000000000..679dd6c363 --- /dev/null +++ b/spring-social-login/src/main/java/org/baeldung/persistence/dao/UserRepository.java @@ -0,0 +1,10 @@ +package org.baeldung.persistence.dao; + +import org.baeldung.persistence.model.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { + + User findByUsername(final String username); + +} diff --git a/spring-social-login/src/main/java/org/baeldung/persistence/model/User.java b/spring-social-login/src/main/java/org/baeldung/persistence/model/User.java new file mode 100644 index 0000000000..a4cffc27d0 --- /dev/null +++ b/spring-social-login/src/main/java/org/baeldung/persistence/model/User.java @@ -0,0 +1,55 @@ +package org.baeldung.persistence.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class User { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @Column(nullable = false, unique = true) + private String username; + + private String password; + + public User() { + super(); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + final StringBuilder builder = new StringBuilder(); + builder.append("User [id=").append(id).append(", username=").append(username).append(", password=").append(password).append("]"); + return builder.toString(); + } + +} diff --git a/spring-social-login/src/main/java/org/baeldung/security/FacebookConnectionSignup.java b/spring-social-login/src/main/java/org/baeldung/security/FacebookConnectionSignup.java new file mode 100644 index 0000000000..6a9e30d7d8 --- /dev/null +++ b/spring-social-login/src/main/java/org/baeldung/security/FacebookConnectionSignup.java @@ -0,0 +1,28 @@ +package org.baeldung.security; + +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; + +import org.baeldung.persistence.dao.UserRepository; +import org.baeldung.persistence.model.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.social.connect.Connection; +import org.springframework.social.connect.ConnectionSignUp; +import org.springframework.stereotype.Service; + +@Service +public class FacebookConnectionSignup implements ConnectionSignUp { + + @Autowired + private UserRepository userRepository; + + @Override + public String execute(Connection connection) { + System.out.println("signup === "); + final User user = new User(); + user.setUsername(connection.getDisplayName()); + user.setPassword(randomAlphabetic(8)); + userRepository.save(user); + return user.getUsername(); + } + +} diff --git a/spring-social-login/src/main/java/org/baeldung/security/FacebookSignInAdapter.java b/spring-social-login/src/main/java/org/baeldung/security/FacebookSignInAdapter.java new file mode 100644 index 0000000000..b861609a01 --- /dev/null +++ b/spring-social-login/src/main/java/org/baeldung/security/FacebookSignInAdapter.java @@ -0,0 +1,21 @@ +package org.baeldung.security; + +import java.util.Arrays; + +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.social.connect.Connection; +import org.springframework.social.connect.web.SignInAdapter; +import org.springframework.stereotype.Service; +import org.springframework.web.context.request.NativeWebRequest; + +@Service +public class FacebookSignInAdapter implements SignInAdapter { + @Override + public String signIn(String localUserId, Connection connection, NativeWebRequest request) { + System.out.println(" ====== Sign In adapter"); + SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(connection.getDisplayName(), null, Arrays.asList(new SimpleGrantedAuthority("FACEBOOK_USER")))); + return null; + } +} diff --git a/spring-social-login/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-social-login/src/main/java/org/baeldung/security/MyUserDetailsService.java new file mode 100644 index 0000000000..5d0d5d793a --- /dev/null +++ b/spring-social-login/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -0,0 +1,34 @@ +package org.baeldung.security; + +import java.util.Arrays; + +import org.baeldung.persistence.dao.UserRepository; +import org.baeldung.persistence.model.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +@Service +public class MyUserDetailsService implements UserDetailsService { + + @Autowired + private UserRepository userRepository; + + public MyUserDetailsService() { + super(); + } + + // API + + @Override + public UserDetails loadUserByUsername(final String username) { + final User user = userRepository.findByUsername(username); + if (user == null) { + throw new UsernameNotFoundException(username); + } + return new org.springframework.security.core.userdetails.User(username, user.getPassword(), true, true, true, true, Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"))); + } +} diff --git a/spring-social-login/src/main/resources/application.properties b/spring-social-login/src/main/resources/application.properties new file mode 100644 index 0000000000..2bd99d8239 --- /dev/null +++ b/spring-social-login/src/main/resources/application.properties @@ -0,0 +1,3 @@ +spring.social.facebook.appId=1715784745414888 +spring.social.facebook.appSecret=abefd6497e9cc01ad03be28509617bf0 +spring.thymeleaf.cache=false \ No newline at end of file diff --git a/spring-social-login/src/main/resources/data.sql b/spring-social-login/src/main/resources/data.sql new file mode 100644 index 0000000000..3b26afef32 --- /dev/null +++ b/spring-social-login/src/main/resources/data.sql @@ -0,0 +1 @@ +insert into User (id, username, password) values (1,'john', '123'); \ No newline at end of file diff --git a/spring-social-login/src/main/resources/templates/index.html b/spring-social-login/src/main/resources/templates/index.html new file mode 100644 index 0000000000..8e1a8da60f --- /dev/null +++ b/spring-social-login/src/main/resources/templates/index.html @@ -0,0 +1,27 @@ + + + + +Spring Social Login + + + + + + +
+

Welcome, Username

+

User authorities

+
+ + \ No newline at end of file diff --git a/spring-social-login/src/main/resources/templates/login.html b/spring-social-login/src/main/resources/templates/login.html new file mode 100644 index 0000000000..41ad39332c --- /dev/null +++ b/spring-social-login/src/main/resources/templates/login.html @@ -0,0 +1,44 @@ + + + + +Spring Social Login + + + +
+
You have been logged out
+
There was an error, please try again
+ +

Login

+
+
+
+ + +
+
+
+ + +
+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+ + +
+ + \ No newline at end of file diff --git a/spring-social-login/src/test/java/org/baeldung/test/ApplicationIntegrationTest.java b/spring-social-login/src/test/java/org/baeldung/test/ApplicationIntegrationTest.java new file mode 100644 index 0000000000..43aaea18b1 --- /dev/null +++ b/spring-social-login/src/test/java/org/baeldung/test/ApplicationIntegrationTest.java @@ -0,0 +1,18 @@ +package org.baeldung.test; + +import org.baeldung.config.Application; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT) +public class ApplicationIntegrationTest { + + @Test + public void whenLoadApplication_thenSuccess() { + + } +} From 48f5fdb8e99bcca2e60abb9138073478f9f2c781 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 7 Nov 2016 21:12:50 +0100 Subject: [PATCH 23/24] Cleanup OkHttpGetLiveTest --- .../baeldung/okhttp/OkHttpGetLiveTest.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java index 632d7577a4..9bf57c41b2 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java @@ -1,23 +1,14 @@ package org.baeldung.okhttp; +import okhttp3.*; +import org.junit.Test; + +import java.io.IOException; + import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; -import java.io.IOException; - -import org.junit.Test; - -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.HttpUrl; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; - -//@RunWith(SpringJUnit4ClassRunner.class) -//@WebAppConfiguration -//@ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/api-servlet.xml") public class OkHttpGetLiveTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; From d1ea5e8394d9296228e1276334b0febda8b060ff Mon Sep 17 00:00:00 2001 From: Ante Pocedulic Date: Wed, 9 Nov 2016 08:00:50 +0100 Subject: [PATCH 24/24] - added new camel example (#812) - added new camel context for junit test --- .../baeldung/camel/file/FileProcessor.java | 20 ++++++ .../com/baeldung/camel/file/FileRouter.java | 15 ++++ .../src/main/resources/camel-context-test.xml | 14 ++++ .../src/main/resources/camel-context.xml | 48 ++++++------- .../file/processor/FileProcessorTest.java | 68 +++++++++++++++++++ 5 files changed, 141 insertions(+), 24 deletions(-) create mode 100644 spring-apache-camel/src/main/java/com/baeldung/camel/file/FileProcessor.java create mode 100644 spring-apache-camel/src/main/java/com/baeldung/camel/file/FileRouter.java create mode 100644 spring-apache-camel/src/main/resources/camel-context-test.xml create mode 100644 spring-apache-camel/src/test/java/org/apache/camel/file/processor/FileProcessorTest.java diff --git a/spring-apache-camel/src/main/java/com/baeldung/camel/file/FileProcessor.java b/spring-apache-camel/src/main/java/com/baeldung/camel/file/FileProcessor.java new file mode 100644 index 0000000000..1ea2cad188 --- /dev/null +++ b/spring-apache-camel/src/main/java/com/baeldung/camel/file/FileProcessor.java @@ -0,0 +1,20 @@ +package com.baeldung.camel.file; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; + +public class FileProcessor implements Processor { + + public void process(Exchange exchange) throws Exception { + String originalFileName = (String) exchange.getIn().getHeader(Exchange.FILE_NAME, String.class); + + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); + String changedFileName = dateFormat.format(date) + originalFileName; + exchange.getIn().setHeader(Exchange.FILE_NAME, changedFileName); + } + +} diff --git a/spring-apache-camel/src/main/java/com/baeldung/camel/file/FileRouter.java b/spring-apache-camel/src/main/java/com/baeldung/camel/file/FileRouter.java new file mode 100644 index 0000000000..5216c9a595 --- /dev/null +++ b/spring-apache-camel/src/main/java/com/baeldung/camel/file/FileRouter.java @@ -0,0 +1,15 @@ +package com.baeldung.camel.file; + +import org.apache.camel.builder.RouteBuilder; + +public class FileRouter extends RouteBuilder { + + private static final String SOURCE_FOLDER = "src/test/source-folder"; + private static final String DESTINATION_FOLDER = "src/test/destination-folder"; + + @Override + public void configure() throws Exception { + from("file://" + SOURCE_FOLDER + "?delete=true").process(new FileProcessor()).to("file://" + DESTINATION_FOLDER); + } + +} diff --git a/spring-apache-camel/src/main/resources/camel-context-test.xml b/spring-apache-camel/src/main/resources/camel-context-test.xml new file mode 100644 index 0000000000..e6435db9e5 --- /dev/null +++ b/spring-apache-camel/src/main/resources/camel-context-test.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/spring-apache-camel/src/main/resources/camel-context.xml b/spring-apache-camel/src/main/resources/camel-context.xml index 0c10e0ecef..63ef406fdf 100644 --- a/spring-apache-camel/src/main/resources/camel-context.xml +++ b/spring-apache-camel/src/main/resources/camel-context.xml @@ -1,39 +1,39 @@ - + - + - - + + - - + + - - + + - - - ${body.toLowerCase()} - + + + ${body.toLowerCase()} + - - + + - - - .......... File content conversion completed .......... - - + + + .......... File content conversion completed .......... + + - + - + - + \ No newline at end of file diff --git a/spring-apache-camel/src/test/java/org/apache/camel/file/processor/FileProcessorTest.java b/spring-apache-camel/src/test/java/org/apache/camel/file/processor/FileProcessorTest.java new file mode 100644 index 0000000000..3d63f614e0 --- /dev/null +++ b/spring-apache-camel/src/test/java/org/apache/camel/file/processor/FileProcessorTest.java @@ -0,0 +1,68 @@ +package org.apache.camel.file.processor; + +import java.io.File; + +import org.apache.camel.CamelContext; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.camel.file.FileProcessor; + + +public class FileProcessorTest { + + private static final long DURATION_MILIS = 10000; + private static final String SOURCE_FOLDER = "src/test/source-folder"; + private static final String DESTINATION_FOLDER = "src/test/destination-folder"; + + @Before + public void setUp() throws Exception { + File sourceFolder = new File(SOURCE_FOLDER); + File destinationFolder = new File(DESTINATION_FOLDER); + + cleanFolder(sourceFolder); + cleanFolder(destinationFolder); + + sourceFolder.mkdirs(); + File file1 = new File(SOURCE_FOLDER + "/File1.txt"); + File file2 = new File(SOURCE_FOLDER + "/File2.txt"); + file1.createNewFile(); + file2.createNewFile(); + } + + private void cleanFolder(File folder) { + File[] files = folder.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isFile()) { + file.delete(); + } + } + } + } + + @Test + public void moveFolderContentJavaDSLTest() throws Exception { + final CamelContext camelContext = new DefaultCamelContext(); + camelContext.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + from("file://" + SOURCE_FOLDER + "?delete=true").process(new FileProcessor()).to("file://" + DESTINATION_FOLDER); + } + }); + camelContext.start(); + Thread.sleep(DURATION_MILIS); + camelContext.stop(); + } + + @Test + public void moveFolderContentSpringDSLTest() throws InterruptedException { + ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("camel-context-test.xml"); + Thread.sleep(DURATION_MILIS); + applicationContext.close(); + + } +} \ No newline at end of file