diff --git a/persistence-modules/atomikos/pom.xml b/persistence-modules/atomikos/pom.xml
index c1748f7dac..b535ff4dcc 100644
--- a/persistence-modules/atomikos/pom.xml
+++ b/persistence-modules/atomikos/pom.xml
@@ -18,6 +18,12 @@
transactions-jdbc
${atomikos-version}
+
+ com.atomikos
+ transactions-jta
+ ${atomikos-version}
+ jakarta
+
com.atomikos
transactions-jms
@@ -90,10 +96,10 @@
- 5.0.6
- 5.1.6.RELEASE
- 5.4.3.Final
- 1.11.23.RELEASE
+ 6.0.0
+ 6.1.2
+ 6.4.2.Final
+ 3.2.2
5.7.0
10.8.1.2
1.1
diff --git a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/config/Config.java b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/config/Config.java
index c6ef83c4ca..1aee108308 100644
--- a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/config/Config.java
+++ b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/config/Config.java
@@ -1,17 +1,14 @@
package com.baeldung.atomikos.spring.config;
-import java.util.Properties;
-
-import javax.transaction.SystemException;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-import org.springframework.transaction.jta.JtaTransactionManager;
-
import com.atomikos.icatch.jta.UserTransactionManager;
import com.atomikos.jdbc.AtomikosDataSourceBean;
import com.baeldung.atomikos.spring.Application;
+import jakarta.transaction.SystemException;
+import java.util.Properties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.transaction.jta.JtaTransactionManager;
@Configuration
@EnableTransactionManagement
@@ -46,7 +43,7 @@ public class Config {
}
@Bean(initMethod = "init", destroyMethod = "close")
- public UserTransactionManager userTransactionManager() throws SystemException {
+ public UserTransactionManager userTransactionManager() throws jakarta.transaction.SystemException {
UserTransactionManager userTransactionManager = new UserTransactionManager();
userTransactionManager.setTransactionTimeout(300);
userTransactionManager.setForceShutdown(true);
diff --git a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/Application.java b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/Application.java
index ad828bd2ca..434dd24e4a 100644
--- a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/Application.java
+++ b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/Application.java
@@ -29,13 +29,13 @@ public class Application {
String orderId = UUID.randomUUID()
.toString();
- Inventory inventory = inventoryRepository.findOne(productId);
+ Inventory inventory = inventoryRepository.getReferenceById(productId);
inventory.setBalance(inventory.getBalance() - amount);
inventoryRepository.save(inventory);
Order order = new Order();
order.setOrderId(orderId);
order.setProductId(productId);
- order.setAmount(new Long(amount));
+ order.setAmount( Long.valueOf(amount));
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set> violations = validator.validate(order);
diff --git a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/config/Config.java b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/config/Config.java
index 6716f19576..6ebf3aea8f 100644
--- a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/config/Config.java
+++ b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/config/Config.java
@@ -1,6 +1,6 @@
package com.baeldung.atomikos.spring.jpa.config;
-import javax.transaction.SystemException;
+import jakarta.transaction.SystemException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/inventory/Inventory.java b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/inventory/Inventory.java
index 999879218c..f23c307fea 100644
--- a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/inventory/Inventory.java
+++ b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/inventory/Inventory.java
@@ -1,8 +1,8 @@
package com.baeldung.atomikos.spring.jpa.inventory;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
@Entity
@Table(name = "INVENTORY")
diff --git a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/inventory/InventoryConfig.java b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/inventory/InventoryConfig.java
index 5301ad6ff2..6b05c380d0 100644
--- a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/inventory/InventoryConfig.java
+++ b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/inventory/InventoryConfig.java
@@ -2,7 +2,7 @@ package com.baeldung.atomikos.spring.jpa.inventory;
import java.util.Properties;
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityManagerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/order/Order.java b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/order/Order.java
index 3a580e6448..18980e31d4 100644
--- a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/order/Order.java
+++ b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/order/Order.java
@@ -1,8 +1,8 @@
package com.baeldung.atomikos.spring.jpa.order;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
import jakarta.validation.constraints.Max;
@Entity
diff --git a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/order/OrderConfig.java b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/order/OrderConfig.java
index b4274bb64c..431cfffe49 100644
--- a/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/order/OrderConfig.java
+++ b/persistence-modules/atomikos/src/main/java/com/baeldung/atomikos/spring/jpa/order/OrderConfig.java
@@ -2,7 +2,7 @@ package com.baeldung.atomikos.spring.jpa.order;
import java.util.Properties;
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityManagerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/persistence-modules/atomikos/src/test/java/com/baeldung/atomikos/spring/jpa/ApplicationUnitTest.java b/persistence-modules/atomikos/src/test/java/com/baeldung/atomikos/spring/jpa/ApplicationUnitTest.java
index e6a3c1982c..b1c426f83a 100644
--- a/persistence-modules/atomikos/src/test/java/com/baeldung/atomikos/spring/jpa/ApplicationUnitTest.java
+++ b/persistence-modules/atomikos/src/test/java/com/baeldung/atomikos/spring/jpa/ApplicationUnitTest.java
@@ -72,7 +72,7 @@ public class ApplicationUnitTest {
private static long getBalance(InventoryRepository inventoryRepository, String productId) throws Exception {
- return inventoryRepository.findOne(productId)
+ return inventoryRepository.getReferenceById(productId)
.getBalance();
}
diff --git a/persistence-modules/hibernate-enterprise/pom.xml b/persistence-modules/hibernate-enterprise/pom.xml
index caf7b37a41..f5c165b10c 100644
--- a/persistence-modules/hibernate-enterprise/pom.xml
+++ b/persistence-modules/hibernate-enterprise/pom.xml
@@ -15,7 +15,7 @@
- org.hibernate
+ org.hibernate.orm
hibernate-core
${hibernate.version}
@@ -25,7 +25,7 @@
${h2.version}
- org.hibernate
+ org.hibernate.orm
hibernate-spatial
${hibernate.version}
@@ -45,7 +45,7 @@
${mariaDB4j.version}
- org.hibernate
+ org.hibernate.orm
hibernate-testing
${hibernate.version}
@@ -82,6 +82,7 @@
8.2.0
2.6.0
0.9
+ 6.4.2.Final
\ No newline at end of file
diff --git a/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/exception/HibernateExceptionUnitTest.java b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/exception/HibernateExceptionUnitTest.java
index 37c21d1899..2b711b9418 100644
--- a/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/exception/HibernateExceptionUnitTest.java
+++ b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/exception/HibernateExceptionUnitTest.java
@@ -9,12 +9,16 @@ import java.util.List;
import jakarta.persistence.OptimisticLockException;
import jakarta.persistence.PersistenceException;
+import org.h2.jdbc.JdbcSQLDataException;
+import org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException;
+import org.h2.jdbc.JdbcSQLSyntaxErrorException;
import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.NonUniqueObjectException;
import org.hibernate.PropertyValueException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
+import org.hibernate.StaleObjectStateException;
import org.hibernate.StaleStateException;
import org.hibernate.Transaction;
import org.hibernate.cfg.AvailableSettings;
@@ -132,8 +136,8 @@ public class HibernateExceptionUnitTest {
@Test
public void givenMissingTable_whenEntitySaved_thenSQLGrammarException() {
- thrown.expectCause(isA(SQLGrammarException.class));
- thrown.expectMessage("could not prepare statement");
+ thrown.expectCause(isA(JdbcSQLSyntaxErrorException.class));
+ thrown.expectMessage("Table \"PRODUCT\" not found (this database is empty); SQL statement");
Configuration cfg = getConfiguration();
cfg.addAnnotatedClass(Product.class);
@@ -161,8 +165,8 @@ public class HibernateExceptionUnitTest {
@Test
public void givenMissingTable_whenQueryExecuted_thenSQLGrammarException() {
- thrown.expectCause(isA(SQLGrammarException.class));
- thrown.expectMessage("could not prepare statement");
+ thrown.expectCause(isA(JdbcSQLSyntaxErrorException.class));
+ thrown.expectMessage("Table \"NON_EXISTING_TABLE\" not found");
Session session = sessionFactory.openSession();
NativeQuery query = session.createNativeQuery("select * from NON_EXISTING_TABLE", Product.class);
@@ -171,7 +175,7 @@ public class HibernateExceptionUnitTest {
@Test
public void whenDuplicateIdSaved_thenConstraintViolationException() {
- thrown.expectCause(isA(ConstraintViolationException.class));
+ thrown.expectCause(isA(JdbcSQLIntegrityConstraintViolationException.class));
thrown.expectMessage("could not execute statement");
Session session = null;
@@ -224,7 +228,7 @@ public class HibernateExceptionUnitTest {
public void givenEntityWithoutId_whenCallingSave_thenThrowIdentifierGenerationException() {
thrown.expect(isA(IdentifierGenerationException.class));
- thrown.expectMessage("ids for this class must be manually assigned before calling save(): com.baeldung.hibernate.exception.Product");
+ thrown.expectMessage("Identifier of entity 'com.baeldung.hibernate.exception.ProductEntity' must be manually assigned before calling 'persist()");
Session session = null;
Transaction transaction = null;
@@ -249,8 +253,8 @@ public class HibernateExceptionUnitTest {
@Test
public void givenQueryWithDataTypeMismatch_WhenQueryExecuted_thenDataException() {
- thrown.expectCause(isA(DataException.class));
- thrown.expectMessage("could not prepare statement");
+ thrown.expectCause(isA(JdbcSQLDataException.class));
+ thrown.expectMessage("Data conversion error converting \"wrongTypeId\"");
Session session = sessionFactory.openSession();
NativeQuery query = session.createNativeQuery("select * from PRODUCT where id='wrongTypeId'", Product.class);
@@ -291,7 +295,7 @@ public class HibernateExceptionUnitTest {
@Test
public void whenDeletingADeletedObject_thenOptimisticLockException() {
thrown.expect(isA(OptimisticLockException.class));
- thrown.expectMessage("Batch update returned unexpected row count from update");
+ thrown.expectMessage("Row was updated or deleted by another transaction");
thrown.expectCause(isA(StaleStateException.class));
Session session = null;
@@ -327,8 +331,8 @@ public class HibernateExceptionUnitTest {
@Test
public void whenUpdatingNonExistingObject_thenStaleStateException() {
- thrown.expectCause(isA(StaleStateException.class));
- thrown.expectMessage("Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: update PRODUCT set description=?, name=? where id=?");
+ thrown.expectCause(isA(StaleObjectStateException.class));
+ thrown.expectMessage("Row was updated or deleted by another transaction");
Session session = null;
Transaction transaction = null;
@@ -409,9 +413,7 @@ public class HibernateExceptionUnitTest {
@Test
public void givenExistingEntity_whenIdUpdated_thenHibernateException() {
- thrown.expect(isA(PersistenceException.class));
- thrown.expectCause(isA(HibernateException.class));
- thrown.expectMessage("identifier of an instance of com.baeldung.hibernate.exception.Product was altered");
+ thrown.expect(isA(HibernateException.class));
Session session = null;
Transaction transaction = null;
diff --git a/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/multitenancy/database/MapMultiTenantConnectionProvider.java b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/multitenancy/database/MapMultiTenantConnectionProvider.java
index 47abf6ff85..8458eefaeb 100644
--- a/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/multitenancy/database/MapMultiTenantConnectionProvider.java
+++ b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/multitenancy/database/MapMultiTenantConnectionProvider.java
@@ -10,7 +10,7 @@ import org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionPr
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
@SuppressWarnings("serial")
-public class MapMultiTenantConnectionProvider extends AbstractMultiTenantConnectionProvider {
+public class MapMultiTenantConnectionProvider extends AbstractMultiTenantConnectionProvider {
private final Map connectionProviderMap = new HashMap<>();
@@ -26,6 +26,7 @@ public class MapMultiTenantConnectionProvider extends AbstractMultiTenantConnect
.next();
}
+
@Override
protected ConnectionProvider selectConnectionProvider(String tenantIdentifier) {
return connectionProviderMap.get(tenantIdentifier);
diff --git a/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/multitenancy/schema/SchemaMultiTenantConnectionProvider.java b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/multitenancy/schema/SchemaMultiTenantConnectionProvider.java
index 67b838fdf1..aecfa23d0a 100644
--- a/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/multitenancy/schema/SchemaMultiTenantConnectionProvider.java
+++ b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/hibernate/multitenancy/schema/SchemaMultiTenantConnectionProvider.java
@@ -12,7 +12,7 @@ import org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionPr
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
@SuppressWarnings("serial")
-public class SchemaMultiTenantConnectionProvider extends AbstractMultiTenantConnectionProvider {
+public class SchemaMultiTenantConnectionProvider extends AbstractMultiTenantConnectionProvider {
private final ConnectionProvider connectionProvider;
diff --git a/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java
index c3d2362339..921459ac46 100644
--- a/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java
+++ b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java
@@ -179,7 +179,7 @@ public class SaveMethodsIntegrationTest {
.commit();
session.beginTransaction();
- assertNull(person.getId());
+ assertNotNull(person.getId());
assertNotNull(mergedPerson.getId());
}
diff --git a/persistence-modules/hibernate-exceptions/pom.xml b/persistence-modules/hibernate-exceptions/pom.xml
index 670ff4cdb8..7ab0308bd9 100644
--- a/persistence-modules/hibernate-exceptions/pom.xml
+++ b/persistence-modules/hibernate-exceptions/pom.xml
@@ -20,7 +20,7 @@
${hsqldb.version}
- org.hibernate
+ org.hibernate.orm
hibernate-core
${hibernate.version}
@@ -34,6 +34,7 @@
2.7.1
2.1.214
+ 6.4.2.Final
\ No newline at end of file
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java
index 271e810002..e882083a70 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java
@@ -26,9 +26,8 @@ public class Author {
@Column(name = "name")
private String name;
- @ManyToMany
@Cascade({ CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.PERSIST})
- @JoinColumn(name = "book_id")
+ @ManyToMany(mappedBy = "authors")
private Set books = new HashSet<>();
public void addBook(Book book) {
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java
index 0734cccff1..6034455370 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java
@@ -1,6 +1,7 @@
package com.baeldung.hibernate.exception.transientobject.entity;
+import jakarta.persistence.JoinTable;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@@ -29,7 +30,7 @@ public class Book {
@ManyToMany
@Cascade({ CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.PERSIST})
- @JoinColumn(name = "author_id")
+ @JoinTable(joinColumns = { @JoinColumn(name = "author_id") })
private Set authors = new HashSet<>();
public void addAuthor(Author author) {
diff --git a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/namedparameternotbound/NamedParameterNotBoundExceptionUnitTest.java b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/namedparameternotbound/NamedParameterNotBoundExceptionUnitTest.java
index f16a89917d..82788ce562 100644
--- a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/namedparameternotbound/NamedParameterNotBoundExceptionUnitTest.java
+++ b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/namedparameternotbound/NamedParameterNotBoundExceptionUnitTest.java
@@ -44,7 +44,7 @@ class NamedParameterNotBoundExceptionUnitTest {
query.list();
});
- String expectedMessage = "Named parameter not bound";
+ String expectedMessage = "No argument for named parameter";
String actualMessage = exception.getMessage();
assertTrue(actualMessage.contains(expectedMessage));
diff --git a/persistence-modules/hibernate-jpa/pom.xml b/persistence-modules/hibernate-jpa/pom.xml
index 603c749e95..b18ed85b41 100644
--- a/persistence-modules/hibernate-jpa/pom.xml
+++ b/persistence-modules/hibernate-jpa/pom.xml
@@ -15,7 +15,7 @@
- org.hibernate
+ org.hibernate.orm
hibernate-core
${hibernate.version}
@@ -84,6 +84,7 @@
8.2.0
+ 6.4.2.Final
2.6.0
3.0.4
2.1.214
diff --git a/persistence-modules/spring-data-jpa-repo-2/pom.xml b/persistence-modules/spring-data-jpa-repo-2/pom.xml
index e39458449c..12519088b5 100644
--- a/persistence-modules/spring-data-jpa-repo-2/pom.xml
+++ b/persistence-modules/spring-data-jpa-repo-2/pom.xml
@@ -8,9 +8,9 @@
com.baeldung
- parent-boot-2
+ parent-boot-3
0.0.1-SNAPSHOT
- ../../parent-boot-2
+ ../../parent-boot-3
@@ -19,8 +19,9 @@
spring-boot-starter-web
- javax.persistence
- javax.persistence-api
+ jakarta.persistence
+ jakarta.persistence-api
+ ${jakarta.persistence.version}
org.springframework.data
@@ -29,6 +30,16 @@
org.springframework.boot
spring-boot-starter-data-jpa
+
+
+ com.querydsl
+ querydsl-jpa
+
+
+ com.querydsl
+ querydsl-apt
+
+
com.h2database
@@ -36,33 +47,21 @@
com.querydsl
- querydsl-apt
+ querydsl-jpa
+ jakarta
+ ${querydsl.version}
com.querydsl
- querydsl-jpa
+ querydsl-apt
+ jakarta
+ ${querydsl.version}
+ provided
-
- com.mysema.maven
- apt-maven-plugin
- 1.1.3
-
-
- generate-sources
-
- process
-
-
- ${project.build.directory}/generated-sources
- com.querydsl.apt.jpa.JPAAnnotationProcessor
-
-
-
-
org.bsc.maven
maven-processor-plugin
@@ -86,11 +85,21 @@
org.hibernate
hibernate-jpamodelgen
- 5.6.11.Final
+ ${hibernate-jpamodelgen.version}
+
+ 17
+ 17
+ 5.0.0
+ 3.1.0
+ 1.1.3
+ true
+ 6.4.2.Final
+
+
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/model/User.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/model/User.java
index ba217577f3..13325e3dbd 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/model/User.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/model/User.java
@@ -1,8 +1,8 @@
package com.baeldung.spring.data.persistence.customrepository.model;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.Id;
import java.util.Objects;
@Entity
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepositoryImpl.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepositoryImpl.java
index dc006580c1..e9c8ea98ee 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepositoryImpl.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepositoryImpl.java
@@ -2,9 +2,9 @@ package com.baeldung.spring.data.persistence.customrepository.repository;
import com.baeldung.spring.data.persistence.customrepository.model.User;
-import javax.annotation.PostConstruct;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
+import jakarta.annotation.PostConstruct;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceContext;
import java.util.Objects;
public class CustomUserRepositoryImpl implements CustomUserRepository {
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/findbyvsfindallby/model/Player.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/findbyvsfindallby/model/Player.java
index 0d8f833b4c..2579472d03 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/findbyvsfindallby/model/Player.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/findbyvsfindallby/model/Player.java
@@ -1,9 +1,9 @@
package com.baeldung.spring.data.persistence.findbyvsfindallby.model;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
import java.util.Objects;
@Entity
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/saveperformance/Book.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/saveperformance/Book.java
index b6abdd2ed5..8199d59e39 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/saveperformance/Book.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/saveperformance/Book.java
@@ -1,9 +1,9 @@
package com.baeldung.spring.data.persistence.saveperformance;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
@Entity
public class Book {
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/search/Student.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/search/Student.java
index 1d6eaa3b33..fed1ff228e 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/search/Student.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/search/Student.java
@@ -2,10 +2,10 @@ package com.baeldung.spring.data.persistence.search;
import java.util.Objects;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
@Entity
public class Student {
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/model/Employee.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/model/Employee.java
index 9690bcf68a..284771a8c9 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/model/Employee.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/model/Employee.java
@@ -3,13 +3,13 @@ package com.baeldung.spring.data.persistence.springdatajpadifference.model;
import java.io.Serializable;
import java.util.Objects;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.NamedQuery;
+import jakarta.persistence.Table;
@Entity
@Table(name = "employee")
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/config/SpringDataJpaConfig.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/config/SpringDataJpaConfig.java
index 923e923c88..23c7b30470 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/config/SpringDataJpaConfig.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/config/SpringDataJpaConfig.java
@@ -2,7 +2,7 @@ package com.baeldung.spring.data.persistence.springdatajpadifference.springdata.
import java.util.Properties;
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
import javax.sql.DataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepositoryPagingAndSort.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepositoryPagingAndSort.java
index 731735ea62..e5019ddf42 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepositoryPagingAndSort.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepositoryPagingAndSort.java
@@ -1,11 +1,11 @@
package com.baeldung.spring.data.persistence.springdatajpadifference.springdata.repository;
-import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.baeldung.spring.data.persistence.springdatajpadifference.model.Employee;
@Repository
-public interface EmployeeRepositoryPagingAndSort extends PagingAndSortingRepository {
+public interface EmployeeRepositoryPagingAndSort extends JpaRepository {
}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/search/StudentApplicationUnitTest.java b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/search/StudentApplicationUnitTest.java
index ea16b3597d..4e1c09e0e1 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/search/StudentApplicationUnitTest.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/search/StudentApplicationUnitTest.java
@@ -13,8 +13,6 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
diff --git a/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/JpaDaoIntegrationTest.java b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/JpaDaoIntegrationTest.java
index b25038f175..b31fd3c182 100644
--- a/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/JpaDaoIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/JpaDaoIntegrationTest.java
@@ -7,15 +7,15 @@ import static org.junit.Assert.assertNull;
import java.util.Arrays;
import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.CriteriaUpdate;
-import javax.persistence.criteria.Root;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
+import jakarta.persistence.Query;
+import jakarta.persistence.TypedQuery;
+import jakarta.persistence.criteria.CriteriaBuilder;
+import jakarta.persistence.criteria.CriteriaQuery;
+import jakarta.persistence.criteria.CriteriaUpdate;
+import jakarta.persistence.criteria.Root;
import org.junit.Before;
import org.junit.Test;
diff --git a/pom.xml b/pom.xml
index a02bd85d3f..fe201fee89 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1194,8 +1194,8 @@
3.1.0
1.8
1.2.17
- 1.36
- 1.36
+ 1.37
+ 1.37
3.1.2
4.4
2.13.0
diff --git a/spring-security-modules/spring-security-acl/pom.xml b/spring-security-modules/spring-security-acl/pom.xml
index 734b85800a..4feea8fb96 100644
--- a/spring-security-modules/spring-security-acl/pom.xml
+++ b/spring-security-modules/spring-security-acl/pom.xml
@@ -11,7 +11,8 @@
com.baeldung
- spring-security-modules
+ parent-boot-3
+ ../../parent-boot-3
0.0.1-SNAPSHOT
@@ -46,16 +47,6 @@
org.springframework
spring-context-support
-
- net.sf.ehcache
- ehcache-core
- ${ehcache-core.version}
- jar
-
-
- 2.6.11
-
-
\ No newline at end of file
diff --git a/spring-security-modules/spring-security-acl/src/main/java/com/baeldung/acl/config/ACLContext.java b/spring-security-modules/spring-security-acl/src/main/java/com/baeldung/acl/config/ACLContext.java
index cb60ef1d45..186cadbb63 100644
--- a/spring-security-modules/spring-security-acl/src/main/java/com/baeldung/acl/config/ACLContext.java
+++ b/spring-security-modules/spring-security-acl/src/main/java/com/baeldung/acl/config/ACLContext.java
@@ -4,8 +4,7 @@ import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.cache.ehcache.EhCacheFactoryBean;
-import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
+import org.springframework.cache.concurrent.ConcurrentMapCache;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
@@ -16,7 +15,7 @@ import org.springframework.security.acls.domain.AclAuthorizationStrategy;
import org.springframework.security.acls.domain.AclAuthorizationStrategyImpl;
import org.springframework.security.acls.domain.ConsoleAuditLogger;
import org.springframework.security.acls.domain.DefaultPermissionGrantingStrategy;
-import org.springframework.security.acls.domain.EhCacheBasedAclCache;
+import org.springframework.security.acls.domain.SpringCacheBasedAclCache;
import org.springframework.security.acls.jdbc.BasicLookupStrategy;
import org.springframework.security.acls.jdbc.JdbcMutableAclService;
import org.springframework.security.acls.jdbc.LookupStrategy;
@@ -31,21 +30,9 @@ public class ACLContext {
DataSource dataSource;
@Bean
- public EhCacheBasedAclCache aclCache() {
- return new EhCacheBasedAclCache(aclEhCacheFactoryBean().getObject(), permissionGrantingStrategy(), aclAuthorizationStrategy());
- }
-
- @Bean
- public EhCacheFactoryBean aclEhCacheFactoryBean() {
- EhCacheFactoryBean ehCacheFactoryBean = new EhCacheFactoryBean();
- ehCacheFactoryBean.setCacheManager(aclCacheManager().getObject());
- ehCacheFactoryBean.setCacheName("aclCache");
- return ehCacheFactoryBean;
- }
-
- @Bean
- public EhCacheManagerFactoryBean aclCacheManager() {
- return new EhCacheManagerFactoryBean();
+ public SpringCacheBasedAclCache aclCache() {
+ final ConcurrentMapCache aclCache = new ConcurrentMapCache("acl_cache");
+ return new SpringCacheBasedAclCache(aclCache, permissionGrantingStrategy(), aclAuthorizationStrategy());
}
@Bean
diff --git a/spring-security-modules/spring-security-acl/src/main/java/com/baeldung/acl/persistence/entity/NoticeMessage.java b/spring-security-modules/spring-security-acl/src/main/java/com/baeldung/acl/persistence/entity/NoticeMessage.java
index 80c04146e4..c1de3112bf 100644
--- a/spring-security-modules/spring-security-acl/src/main/java/com/baeldung/acl/persistence/entity/NoticeMessage.java
+++ b/spring-security-modules/spring-security-acl/src/main/java/com/baeldung/acl/persistence/entity/NoticeMessage.java
@@ -1,9 +1,9 @@
package com.baeldung.acl.persistence.entity;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
@Entity
@Table(name="system_message")
diff --git a/spring-security-modules/spring-security-acl/src/main/resources/acl-data.sql b/spring-security-modules/spring-security-acl/src/main/resources/acl-data.sql
index 3b48c83f3c..f4c443961c 100644
--- a/spring-security-modules/spring-security-acl/src/main/resources/acl-data.sql
+++ b/spring-security-modules/spring-security-acl/src/main/resources/acl-data.sql
@@ -1,7 +1,7 @@
-INSERT INTO acl_sid (id, principal, sid) VALUES
-(1, 1, 'manager'),
-(2, 1, 'hr'),
-(3, 0, 'ROLE_EDITOR');
+INSERT INTO acl_sid (principal, sid) VALUES
+(1, 'manager'),
+(1, 'hr'),
+(0, 'ROLE_EDITOR');
INSERT INTO acl_class (id, class) VALUES
(1, 'com.baeldung.acl.persistence.entity.NoticeMessage');
@@ -11,16 +11,16 @@ INSERT INTO system_message(id,content) VALUES
(2,'Second Level Message'),
(3,'Third Level Message');
-INSERT INTO acl_object_identity (id, object_id_class, object_id_identity, parent_object, owner_sid, entries_inheriting) VALUES
-(1, 1, 1, NULL, 3, 0),
-(2, 1, 2, NULL, 3, 0),
-(3, 1, 3, NULL, 3, 0);
+INSERT INTO acl_object_identity (object_id_class, object_id_identity, parent_object, owner_sid, entries_inheriting) VALUES
+(1, 1, NULL, 3, 0),
+(1, 2, NULL, 3, 0),
+(1, 3, NULL, 3, 0);
-INSERT INTO acl_entry (id, acl_object_identity, ace_order, sid, mask, granting, audit_success, audit_failure) VALUES
-(1, 1, 1, 1, 1, 1, 1, 1),
-(2, 1, 2, 1, 2, 1, 1, 1),
-(3, 1, 3, 3, 1, 1, 1, 1),
-(4, 2, 1, 2, 1, 1, 1, 1),
-(5, 2, 2, 3, 1, 1, 1, 1),
-(6, 3, 1, 3, 1, 1, 1, 1),
-(7, 3, 2, 3, 2, 1, 1, 1);
\ No newline at end of file
+INSERT INTO acl_entry (acl_object_identity, ace_order, sid, mask, granting, audit_success, audit_failure) VALUES
+(1, 1, 1, 1, 1, 1, 1),
+(1, 2, 1, 2, 1, 1, 1),
+(1, 3, 3, 1, 1, 1, 1),
+(2, 1, 2, 1, 1, 1, 1),
+(2, 2, 3, 1, 1, 1, 1),
+(3, 1, 3, 1, 1, 1, 1),
+(3, 2, 3, 2, 1, 1, 1);
\ No newline at end of file
diff --git a/spring-security-modules/spring-security-acl/src/test/java/com/baeldung/SpringContextTest.java b/spring-security-modules/spring-security-acl/src/test/java/com/baeldung/SpringContextTest.java
index e60983733e..fa8ad73a80 100644
--- a/spring-security-modules/spring-security-acl/src/test/java/com/baeldung/SpringContextTest.java
+++ b/spring-security-modules/spring-security-acl/src/test/java/com/baeldung/SpringContextTest.java
@@ -4,10 +4,12 @@ import com.baeldung.acl.Application;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
+@DirtiesContext
public class SpringContextTest {
@Test
diff --git a/spring-security-modules/spring-security-cognito/pom.xml b/spring-security-modules/spring-security-cognito/pom.xml
index 2e359382a7..130c482c82 100644
--- a/spring-security-modules/spring-security-cognito/pom.xml
+++ b/spring-security-modules/spring-security-cognito/pom.xml
@@ -11,7 +11,8 @@
com.baeldung
- spring-security-modules
+ parent-boot-3
+ ../../parent-boot-3
0.0.1-SNAPSHOT
@@ -30,7 +31,7 @@
org.thymeleaf.extras
- thymeleaf-extras-springsecurity5
+ thymeleaf-extras-springsecurity6
diff --git a/spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/SecurityConfiguration.java b/spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/SecurityConfiguration.java
index 62cdd7c73c..7385aef78b 100644
--- a/spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/SecurityConfiguration.java
+++ b/spring-security-modules/spring-security-cognito/src/main/java/com/baeldung/cognito/SecurityConfiguration.java
@@ -2,6 +2,7 @@ package com.baeldung.cognito;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@@ -10,16 +11,13 @@ public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
- http.csrf()
- .and()
- .authorizeRequests(authz -> authz.mvcMatchers("/")
+ http.csrf(Customizer.withDefaults())
+ .authorizeHttpRequests(authz -> authz.requestMatchers("/")
.permitAll()
.anyRequest()
.authenticated())
- .oauth2Login()
- .and()
- .logout()
- .logoutSuccessUrl("/");
+ .oauth2Login(Customizer.withDefaults())
+ .logout(httpSecurityLogoutConfigurer -> httpSecurityLogoutConfigurer.logoutSuccessUrl("/"));
return http.build();
}
}
\ No newline at end of file
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/auditing/ExposeAttemptedPathAuthorizationAuditListener.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/auditing/ExposeAttemptedPathAuthorizationAuditListener.java
index ff53b3cc6a..0f966709b9 100644
--- a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/auditing/ExposeAttemptedPathAuthorizationAuditListener.java
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/auditing/ExposeAttemptedPathAuthorizationAuditListener.java
@@ -19,13 +19,13 @@ public class ExposeAttemptedPathAuthorizationAuditListener extends AbstractAutho
@Override
public void onApplicationEvent(AuthorizationEvent event) {
if (event instanceof AuthorizationDeniedEvent) {
- onAuthorizationFailureEvent((AuthorizationDeniedEvent) event);
+ onAuthorizationFailureEvent(event);
}
}
- private void onAuthorizationFailureEvent(AuthorizationDeniedEvent event) {
+ private void onAuthorizationFailureEvent(AuthorizationEvent event) {
String name = this.getName(event.getAuthentication());
- Map data = new LinkedHashMap();
+ Map data = new LinkedHashMap<>();
Object details = this.getDetails(event.getAuthentication());
if (details != null) {
data.put("details", details);
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/config/WebSecurityConfig.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/config/WebSecurityConfig.java
index 24f7dc8a5b..dc6f636715 100644
--- a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/config/WebSecurityConfig.java
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/config/WebSecurityConfig.java
@@ -3,9 +3,10 @@ package com.baeldung.app.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
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.configurers.AbstractHttpConfigurer;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.password.PasswordEncoder;
@@ -14,7 +15,7 @@ import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
-@EnableGlobalMethodSecurity(prePostEnabled = true)
+@EnableMethodSecurity
public class WebSecurityConfig {
@Bean
@@ -25,8 +26,8 @@ public class WebSecurityConfig {
.anyRequest()
.authenticated())
.httpBasic(Customizer.withDefaults())
- .logout(logout -> logout.disable())
- .csrf(csrf -> csrf.disable());
+ .logout(AbstractHttpConfigurer::disable)
+ .csrf(AbstractHttpConfigurer::disable);
return http.build();
}
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/controller/TaskController.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/controller/TaskController.java
index f2d479d782..217719cba6 100644
--- a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/controller/TaskController.java
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/controller/TaskController.java
@@ -6,9 +6,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("api/tasks")
@@ -20,14 +21,14 @@ public class TaskController {
@Autowired(required = false)
private UserDetailsService userDetailsService;
- @RequestMapping(method = RequestMethod.GET)
+ @GetMapping
public ResponseEntity> findAllTasks() {
Iterable tasks = taskService.findAll();
return ResponseEntity.ok().body(tasks);
}
- @RequestMapping(method = RequestMethod.POST, consumes = "application/json")
+ @PostMapping(consumes = "application/json")
public ResponseEntity> addTasks(@RequestBody Iterable newTasks) {
Iterable tasks = taskService.save(newTasks);
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/filter/CustomFilter.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/filter/CustomFilter.java
index c16202976b..8b47cf3f17 100644
--- a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/filter/CustomFilter.java
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/filter/CustomFilter.java
@@ -14,7 +14,7 @@ public class CustomFilter implements Filter {
private static Logger LOGGER = LoggerFactory.getLogger(CustomFilter.class);
@Override
- public void init(FilterConfig config) throws ServletException {
+ public void init(FilterConfig config) {
}
@Override
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/denyonmissing/CustomPermissionAllowedMethodSecurityMetadataSource.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/denyonmissing/CustomPermissionAllowedMethodSecurityMetadataSource.java
index c6508f0ab3..631987ba4d 100644
--- a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/denyonmissing/CustomPermissionAllowedMethodSecurityMetadataSource.java
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/denyonmissing/CustomPermissionAllowedMethodSecurityMetadataSource.java
@@ -2,34 +2,31 @@ package com.baeldung.denyonmissing;
import static org.springframework.security.access.annotation.Jsr250SecurityConfig.DENY_ALL_ATTRIBUTE;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import java.util.function.Supplier;
-import org.springframework.core.annotation.AnnotationUtils;
-import org.springframework.core.annotation.MergedAnnotation;
+import org.aopalliance.intercept.MethodInvocation;
import org.springframework.core.annotation.MergedAnnotations;
import org.springframework.security.access.ConfigAttribute;
-import org.springframework.security.access.method.AbstractFallbackMethodSecurityMetadataSource;
import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.authorization.AuthorizationDecision;
+import org.springframework.security.authorization.AuthorizationManager;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
-public class CustomPermissionAllowedMethodSecurityMetadataSource extends AbstractFallbackMethodSecurityMetadataSource {
- @Override
- protected Collection findAttributes(Class> clazz) {
- return null;
- }
+@Component
+public class CustomPermissionAllowedMethodSecurityMetadataSource implements AuthorizationManager {
@Override
- protected Collection findAttributes(Method method, Class> targetClass) {
- MergedAnnotations annotations = MergedAnnotations.from(method,
- MergedAnnotations.SearchStrategy.DIRECT);
+ public AuthorizationDecision check(Supplier authentication, MethodInvocation mi) {
+ MergedAnnotations annotations = MergedAnnotations.from(mi.getMethod(), MergedAnnotations.SearchStrategy.DIRECT);
List attributes = new ArrayList<>();
- MergedAnnotations classAnnotations = MergedAnnotations.from(targetClass, MergedAnnotations.SearchStrategy.DIRECT);
+ MergedAnnotations classAnnotations = MergedAnnotations.from(DenyOnMissingController.class, MergedAnnotations.SearchStrategy.DIRECT);
// if the class is annotated as @Controller we should by default deny access to every method
if (classAnnotations.get(Controller.class).isPresent()) {
attributes.add(DENY_ALL_ATTRIBUTE);
@@ -38,12 +35,6 @@ public class CustomPermissionAllowedMethodSecurityMetadataSource extends Abstrac
if (annotations.get(PreAuthorize.class).isPresent() || annotations.get(PostAuthorize.class).isPresent()) {
return null;
}
-
- return attributes;
- }
-
- @Override
- public Collection getAllConfigAttributes() {
- return null;
+ return new AuthorizationDecision(!Collections.disjoint(attributes, authentication.get().getAuthorities()));
}
}
\ No newline at end of file
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/denyonmissing/DenyMethodSecurityConfig.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/denyonmissing/DenyMethodSecurityConfig.java
index 695f81eb54..03fe2b6887 100644
--- a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/denyonmissing/DenyMethodSecurityConfig.java
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/denyonmissing/DenyMethodSecurityConfig.java
@@ -1,10 +1,12 @@
package com.baeldung.denyonmissing;
+import org.springframework.aop.Advisor;
+import org.springframework.aop.support.JdkRegexpMethodPointcut;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.security.access.method.MethodSecurityMetadataSource;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;
+import org.springframework.security.authorization.method.AuthorizationInterceptorsOrder;
+import org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor;
+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
@@ -12,11 +14,16 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration
@EnableWebSecurity
-@EnableGlobalMethodSecurity(prePostEnabled = true)
-public class DenyMethodSecurityConfig extends GlobalMethodSecurityConfiguration {
- @Override
- protected MethodSecurityMetadataSource customMethodSecurityMetadataSource() {
- return new CustomPermissionAllowedMethodSecurityMetadataSource();
+@EnableMethodSecurity
+public class DenyMethodSecurityConfig {
+
+ @Bean
+ public Advisor preAuthorize(CustomPermissionAllowedMethodSecurityMetadataSource manager) {
+ JdkRegexpMethodPointcut pattern = new JdkRegexpMethodPointcut();
+ pattern.setPattern("com.baeldung.denyonmissing.*");
+ AuthorizationManagerBeforeMethodInterceptor interceptor = new AuthorizationManagerBeforeMethodInterceptor(pattern, manager);
+ interceptor.setOrder(AuthorizationInterceptorsOrder.PRE_AUTHORIZE.getOrder() - 1);
+ return interceptor;
}
@Bean
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/filterresponse/config/AppConfig.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/filterresponse/config/AppConfig.java
index d57c1f2e5f..4f66c63817 100644
--- a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/filterresponse/config/AppConfig.java
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/filterresponse/config/AppConfig.java
@@ -6,6 +6,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
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.configurers.AbstractHttpConfigurer;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -42,7 +43,7 @@ public class AppConfig implements WebMvcConfigurer {
.anyRequest()
.authenticated())
.httpBasic(Customizer.withDefaults())
- .csrf(csrf -> csrf.disable());
+ .csrf(AbstractHttpConfigurer::disable);
return http.build();
}
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/filterresponse/model/Item.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/filterresponse/model/Item.java
index 9ebdc6bad0..9cc35d3829 100644
--- a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/filterresponse/model/Item.java
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/filterresponse/model/Item.java
@@ -6,11 +6,11 @@ import com.fasterxml.jackson.annotation.JsonView;
public class Item {
@JsonView(View.User.class)
- private int id;
+ private final int id;
@JsonView(View.User.class)
- private String name;
+ private final String name;
@JsonView(View.Admin.class)
- private String ownerName;
+ private final String ownerName;
public Item(int id, String name, String ownerName) {
this.id = id;
diff --git a/spring-security-modules/spring-security-core/src/test/java/com/baeldung/denyonmissing/DenyOnMissingControllerIntegrationTest.java b/spring-security-modules/spring-security-core/src/test/java/com/baeldung/denyonmissing/DenyOnMissingControllerIntegrationTest.java
index 2f67168229..a6a9653013 100644
--- a/spring-security-modules/spring-security-core/src/test/java/com/baeldung/denyonmissing/DenyOnMissingControllerIntegrationTest.java
+++ b/spring-security-modules/spring-security-core/src/test/java/com/baeldung/denyonmissing/DenyOnMissingControllerIntegrationTest.java
@@ -41,10 +41,8 @@ public class DenyOnMissingControllerIntegrationTest {
@Test
@WithMockUser(username = "user")
- public void givenANormalUser_whenCallingBye_thenAccessDenied() throws Exception {
- ServletException exception = Assertions.assertThrows(ServletException.class, () -> {
- mockMvc.perform(get("/bye"));
- });
+ public void givenANormalUser_whenCallingBye_thenAccessDenied() {
+ ServletException exception = Assertions.assertThrows(ServletException.class, () -> mockMvc.perform(get("/bye")));
Assertions.assertNotNull(exception);
Assertions.assertEquals(exception.getCause().getClass(), AccessDeniedException.class);
diff --git a/spring-security-modules/spring-security-core/src/test/java/com/baeldung/filterresponse/SpringSecurityJsonViewIntegrationTest.java b/spring-security-modules/spring-security-core/src/test/java/com/baeldung/filterresponse/SpringSecurityJsonViewIntegrationTest.java
index fd80ae48c9..de4afa4132 100644
--- a/spring-security-modules/spring-security-core/src/test/java/com/baeldung/filterresponse/SpringSecurityJsonViewIntegrationTest.java
+++ b/spring-security-modules/spring-security-core/src/test/java/com/baeldung/filterresponse/SpringSecurityJsonViewIntegrationTest.java
@@ -15,7 +15,7 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -66,6 +66,6 @@ public class SpringSecurityJsonViewIntegrationTest {
});
Assertions.assertEquals(exception.getCause().getClass(), IllegalArgumentException.class);
- assertTrue(exception.getCause().getMessage().equals("Ambiguous @JsonView declaration for roles ROLE_ADMIN,ROLE_USER"));
+ assertEquals("Ambiguous @JsonView declaration for roles ROLE_ADMIN,ROLE_USER", exception.getCause().getMessage());
}
}
diff --git a/spring-security-modules/spring-security-core/src/test/java/com/baeldung/methodsecurity/MethodSecurityIntegrationTest.java b/spring-security-modules/spring-security-core/src/test/java/com/baeldung/methodsecurity/MethodSecurityIntegrationTest.java
index 0ad01d9954..6f9fac5bb4 100644
--- a/spring-security-modules/spring-security-core/src/test/java/com/baeldung/methodsecurity/MethodSecurityIntegrationTest.java
+++ b/spring-security-modules/spring-security-core/src/test/java/com/baeldung/methodsecurity/MethodSecurityIntegrationTest.java
@@ -1,6 +1,7 @@
package com.baeldung.methodsecurity;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
@@ -50,7 +51,7 @@ public class MethodSecurityIntegrationTest {
@WithMockUser(username = "john", roles = { "EDITOR" })
public void givenUsernameJohn_whenCallIsValidUsername_thenReturnTrue() {
boolean isValid = userRoleService.isValidUsername("john");
- assertEquals(true, isValid);
+ assertTrue(isValid);
}
@Test(expected = AccessDeniedException.class)
@@ -60,7 +61,7 @@ public class MethodSecurityIntegrationTest {
}
@Test(expected = AccessDeniedException.class)
- @WithMockUser(username = "john", roles = { "USER" })
+ @WithMockUser(username = "john")
public void givenRoleUser_whenCallGetUsername2_thenReturnAccessDenied() {
userRoleService.getUsername2();
}
@@ -76,7 +77,7 @@ public class MethodSecurityIntegrationTest {
@WithMockUser(username = "john", roles = { "VIEWER" })
public void givenUsernameJerry_whenCallIsValidUsername2_thenReturnFalse() {
boolean isValid = userRoleService.isValidUsername2("jerry");
- assertEquals(false, isValid);
+ assertFalse(isValid);
}
@Test