From 7811566b579087c73129b5bc085998b92da79705 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:03:27 +0700 Subject: [PATCH 01/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.0=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 103806b..726b955 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.4 + 3.3.0 com.quickstartdev @@ -86,4 +86,4 @@ - \ No newline at end of file + From 6884b09526a030a17f6c319cd673cf454cbf9684 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:03:34 +0700 Subject: [PATCH 02/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.1=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 726b955..9240395 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.3.1 com.quickstartdev From 6f30be02a490a72bcf834183a4de84b51101e954 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:03:39 +0700 Subject: [PATCH 03/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.2=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9240395..574a00e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.2 com.quickstartdev From 980257124e579a11d40a317355a46a6745f13e4d Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:03:44 +0700 Subject: [PATCH 04/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.3=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 574a00e..ec11def 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.2 + 3.3.3 com.quickstartdev From 44acdfa5ccf8909f494388d213ac596fe080c9dc Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:03:49 +0700 Subject: [PATCH 05/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.4=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ec11def..b577998 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.3 + 3.3.4 com.quickstartdev From e96201b4bbac820929e7956d8eb27c42c0b19877 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:03:54 +0700 Subject: [PATCH 06/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.5=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b577998..f0d7d5a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.5 com.quickstartdev From 26451802f36c8f330b239186a5558fa205f50e61 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:03:59 +0700 Subject: [PATCH 07/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.6=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f0d7d5a..c99d304 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.5 + 3.3.6 com.quickstartdev From 3cb094451304f4d581fc3088596442335ab1444f Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:04:04 +0700 Subject: [PATCH 08/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.7=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c99d304..9be0d05 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.6 + 3.3.7 com.quickstartdev From c315b527d835246ac81a6fcc298836e9d7958403 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:04:08 +0700 Subject: [PATCH 09/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.8=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9be0d05..f1e989a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.7 + 3.3.8 com.quickstartdev From 7315a573a9ff8dbc0f20000dd27b42ddfe9a55f1 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:04:15 +0700 Subject: [PATCH 10/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.3.9=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f1e989a..7583315 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.8 + 3.3.9 com.quickstartdev From 15bc42f3fb27d8ba578544bed3400101ea4212e8 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:04:23 +0700 Subject: [PATCH 11/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.4.0=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7583315..a8b5335 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.9 + 3.4.0 com.quickstartdev From ece09cd4a8da3d413cc486f268632193f1f35452 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:04:28 +0700 Subject: [PATCH 12/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.4.1=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a8b5335..68220c7 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.1 com.quickstartdev From a1f1eee1ac0bbe3faaad5106cb53bbbb88be2336 Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:04:32 +0700 Subject: [PATCH 13/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.4.2=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 68220c7..05849b6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 com.quickstartdev From 57f5969cbe14af36ae14eb3cf300b758eee2319d Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:05:24 +0700 Subject: [PATCH 14/15] =?UTF-8?q?#9=20|=20Hendi=20|=20feat:=20Upgraded=20i?= =?UTF-8?q?nto=20Spring=20Boot=203.4.3=20version=20=F0=9F=AB=B8?= =?UTF-8?q?=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 05849b6..4161a55 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.2 + 3.4.3 com.quickstartdev @@ -14,7 +14,7 @@ Library management system - 17 + 23 @@ -36,7 +36,7 @@ org.thymeleaf.extras - thymeleaf-extras-springsecurity5 + thymeleaf-extras-springsecurity6 org.springframework.boot From 5e658df8be76d92b32e49c679d09622b88b67f7e Mon Sep 17 00:00:00 2001 From: hendisantika Date: Wed, 26 Feb 2025 10:57:35 +0700 Subject: [PATCH 15/15] =?UTF-8?q?#9=20|=20Hendi=20|=20fix:=20All=20codes?= =?UTF-8?q?=20=F0=9F=AB=B8=F0=9F=8C=80=E2=9C=8F=EF=B8=8F=F0=9F=93=97?= =?UTF-8?q?=F0=9F=90=A7=F0=9F=90=B3=E2=AC=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + pom.xml | 5 ++ .../controller/FileExportController.java | 6 +- .../entity/Author.java | 20 +++---- .../librarymanagementsystem/entity/Book.java | 24 ++++---- .../entity/Category.java | 20 +++---- .../entity/Publisher.java | 20 +++---- .../librarymanagementsystem/entity/Role.java | 14 ++--- .../librarymanagementsystem/entity/User.java | 30 +++++----- .../AuthenticationFailureHandler.java | 38 +++++++++++++ .../securityconfig/SecurityConfiguration.java | 56 ++++++++++++++----- .../service/FileService.java | 9 ++- .../service/impl/FileServiceImpl.java | 14 ++--- src/main/resources/application.properties | 5 +- 14 files changed, 165 insertions(+), 97 deletions(-) create mode 100644 src/main/java/com/knf/dev/librarymanagementsystem/securityconfig/AuthenticationFailureHandler.java diff --git a/.gitignore b/.gitignore index a5494f7..762a74d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *# *.idea +logs *.iml *.ipr *.iws diff --git a/pom.xml b/pom.xml index 4161a55..3896831 100644 --- a/pom.xml +++ b/pom.xml @@ -75,6 +75,11 @@ spring-security-test test + + org.projectlombok + lombok + provided + diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/controller/FileExportController.java b/src/main/java/com/knf/dev/librarymanagementsystem/controller/FileExportController.java index f201bdd..6c13a11 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/controller/FileExportController.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/controller/FileExportController.java @@ -1,13 +1,11 @@ package com.knf.dev.librarymanagementsystem.controller; -import javax.servlet.http.HttpServletResponse; - +import com.knf.dev.librarymanagementsystem.service.FileService; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import com.knf.dev.librarymanagementsystem.service.FileService; - @Controller public class FileExportController { diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Author.java b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Author.java index fdcba4c..c6fd270 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Author.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Author.java @@ -1,18 +1,18 @@ package com.knf.dev.librarymanagementsystem.entity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; + import java.util.HashSet; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToMany; -import javax.persistence.Table; - @Entity @Table(name = "authors") public class Author { diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Book.java b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Book.java index 854e262..05c347b 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Book.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Book.java @@ -1,20 +1,20 @@ package com.knf.dev.librarymanagementsystem.entity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; + import java.util.HashSet; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.Table; - @Entity @Table(name = "books") public class Book { diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Category.java b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Category.java index 2bd29b2..6a59ea0 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Category.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Category.java @@ -1,18 +1,18 @@ package com.knf.dev.librarymanagementsystem.entity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; + import java.util.HashSet; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToMany; -import javax.persistence.Table; - @Entity @Table(name = "categories") public class Category { diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Publisher.java b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Publisher.java index 401baf3..9de2904 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Publisher.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Publisher.java @@ -1,18 +1,18 @@ package com.knf.dev.librarymanagementsystem.entity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; + import java.util.HashSet; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToMany; -import javax.persistence.Table; - @Entity @Table(name = "publishers") public class Publisher { diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Role.java b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Role.java index 3e4a52d..be0de37 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/entity/Role.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/entity/Role.java @@ -1,13 +1,13 @@ package com.knf.dev.librarymanagementsystem.entity; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity -@Table(name = "role") +@Table(name = "roles") public class Role { @Id @@ -39,4 +39,4 @@ public String getName() { public void setName(String name) { this.name = name; } -} \ No newline at end of file +} diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/entity/User.java b/src/main/java/com/knf/dev/librarymanagementsystem/entity/User.java index 9de5619..4b5d6c2 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/entity/User.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/entity/User.java @@ -1,22 +1,22 @@ package com.knf.dev.librarymanagementsystem.entity; -import java.util.Collection; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; +import java.util.Collection; @Entity -@Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames = "email")) +@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email")) public class User { @Id @@ -98,4 +98,4 @@ public Collection getRoles() { public void setRoles(Collection roles) { this.roles = roles; } -} \ No newline at end of file +} diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/securityconfig/AuthenticationFailureHandler.java b/src/main/java/com/knf/dev/librarymanagementsystem/securityconfig/AuthenticationFailureHandler.java new file mode 100644 index 0000000..54a13a3 --- /dev/null +++ b/src/main/java/com/knf/dev/librarymanagementsystem/securityconfig/AuthenticationFailureHandler.java @@ -0,0 +1,38 @@ +package com.knf.dev.librarymanagementsystem.securityconfig; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; + +import java.io.IOException; + +/** + * Created by IntelliJ IDEA. + * Project : librarymanagementsystem + * User: hendisantika + * Link: s.id/hendisantika + * Email: hendisantika@yahoo.co.id + * Telegram : @hendisantika34 + * Date: 26/02/25 + * Time: 10.19 + * To change this template use File | Settings | File Templates. + */ +@Slf4j +public class AuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { + + @Override + public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, + AuthenticationException exception) throws IOException { + String errorMessage = "failed login attempt. invalid username or password"; + log.error(errorMessage); + if (exception.getMessage().equalsIgnoreCase("blocked")) { + errorMessage = "you have been blocked for 3 unsuccessful login attempt"; + log.error(errorMessage); + } + log.info("path {}", request.getPathInfo()); + response.sendRedirect(request.getPathInfo()); + } + +} diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/securityconfig/SecurityConfiguration.java b/src/main/java/com/knf/dev/librarymanagementsystem/securityconfig/SecurityConfiguration.java index 4203b0a..a6e4fbc 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/securityconfig/SecurityConfiguration.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/securityconfig/SecurityConfiguration.java @@ -1,21 +1,22 @@ package com.knf.dev.librarymanagementsystem.securityconfig; +import com.knf.dev.librarymanagementsystem.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; 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.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; -import com.knf.dev.librarymanagementsystem.service.UserService; - @Configuration @EnableWebSecurity -public class SecurityConfiguration extends WebSecurityConfigurerAdapter { +public class SecurityConfiguration { @Autowired private UserService userService; @@ -33,17 +34,42 @@ public DaoAuthenticationProvider authenticationProvider() { return auth; } - @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception { - auth.authenticationProvider(authenticationProvider()); + @Bean + public AuthenticationFailureHandler authenticationFailureHandler() { + return new com.knf.dev.librarymanagementsystem.securityconfig.AuthenticationFailureHandler(); + } + /* + * Tell Spring Security to use the custom built UserDetailsServiceImpl class + * + */ + + @Bean + public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception { + return authConfig.getAuthenticationManager(); } - @Override - protected void configure(HttpSecurity http) throws Exception { - http.authorizeRequests().antMatchers("/js/**", "/css/**", "/img/**").permitAll().anyRequest().authenticated() - .and().formLogin().loginPage("/login").permitAll().and().logout().invalidateHttpSession(true) - .clearAuthentication(true).logoutRequestMatcher(new AntPathRequestMatcher("/logout")) - .logoutSuccessUrl("/login?logout").permitAll(); +// @Override +// protected void configure(AuthenticationManagerBuilder auth) throws Exception { +// auth.authenticationProvider(authenticationProvider()); +// } + + @Bean + public SecurityFilterChain configure(HttpSecurity http) throws Exception { + http.authorizeHttpRequests(req -> req + .requestMatchers("/login", "/js/**", "/css/**", "/img/**").permitAll() + .anyRequest().authenticated() + ) + .formLogin(formLogin -> formLogin + .loginPage("/login") //enable this to go to your own custom login page + .loginProcessingUrl("/admin/dashboard") //enable this to use login page provided by spring security + .defaultSuccessUrl("/admin/dashboard", true) + .failureUrl("/login?error") + ) + .logout(logout -> logout + .logoutRequestMatcher(new AntPathRequestMatcher("/logout")) + .logoutSuccessUrl("/login?logout").permitAll() + ); + return http.build(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/service/FileService.java b/src/main/java/com/knf/dev/librarymanagementsystem/service/FileService.java index 7e12999..3054ec5 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/service/FileService.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/service/FileService.java @@ -1,13 +1,12 @@ package com.knf.dev.librarymanagementsystem.service; -import java.io.IOException; - -import javax.servlet.http.HttpServletResponse; - import com.opencsv.exceptions.CsvDataTypeMismatchException; import com.opencsv.exceptions.CsvRequiredFieldEmptyException; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; public interface FileService { - public void exportCSV(String fileName, HttpServletResponse response) + void exportCSV(String fileName, HttpServletResponse response) throws CsvDataTypeMismatchException, CsvRequiredFieldEmptyException, IOException; } diff --git a/src/main/java/com/knf/dev/librarymanagementsystem/service/impl/FileServiceImpl.java b/src/main/java/com/knf/dev/librarymanagementsystem/service/impl/FileServiceImpl.java index be05e72..2258233 100644 --- a/src/main/java/com/knf/dev/librarymanagementsystem/service/impl/FileServiceImpl.java +++ b/src/main/java/com/knf/dev/librarymanagementsystem/service/impl/FileServiceImpl.java @@ -1,13 +1,5 @@ package com.knf.dev.librarymanagementsystem.service.impl; -import java.io.IOException; -import java.io.PrintWriter; - -import javax.servlet.http.HttpServletResponse; - -import org.springframework.http.HttpHeaders; -import org.springframework.stereotype.Service; - import com.knf.dev.librarymanagementsystem.constant.Item; import com.knf.dev.librarymanagementsystem.service.AuthorService; import com.knf.dev.librarymanagementsystem.service.BookService; @@ -24,6 +16,12 @@ import com.opencsv.bean.StatefulBeanToCsvBuilder; import com.opencsv.exceptions.CsvDataTypeMismatchException; import com.opencsv.exceptions.CsvRequiredFieldEmptyException; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.io.PrintWriter; @Service public class FileServiceImpl implements FileService { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 30adec3..4163976 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,5 @@ server.port=9080 -server.error.whitelabel.enabled=false \ No newline at end of file +server.error.whitelabel.enabled=false +spring.jpa.show-sql=true +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.generate-ddl=true